Browse Source

Add UI for loading page progress.

Change move global func upgrade_log() to member func of class SchemaUpgrade().
Change add WorkingDirectory to systemd startup prevents startup git issue.
Change remove redundant log_level usage and do db refactoring.
pull/1200/head
JackDandy 6 years ago
parent
commit
f1c921b2e7
  1. 1
      CHANGES.md
  2. 8
      gui/slick/interfaces/default/loading.tmpl
  3. 2
      gui/slick/interfaces/default/restart.tmpl
  4. 42
      gui/slick/js/loadingStartup.js
  5. 1
      init-scripts/init.systemd
  6. 144
      sickbeard/databases/mainDB.py
  7. 18
      sickbeard/db.py

1
CHANGES.md

@ -32,6 +32,7 @@
* Add startup loading page * Add startup loading page
* Change restart to use loading page * Change restart to use loading page
* Add upgrade messages for sickbeard, cache, and failed db upgrade processes to loading page * Add upgrade messages for sickbeard, cache, and failed db upgrade processes to loading page
* Change add WorkingDirectory to systemd startup prevents startup git issue
[develop changelog] [develop changelog]

8
gui/slick/interfaces/default/loading.tmpl

@ -41,7 +41,7 @@
<script type="text/javascript" src="$sg_root/js/loadingStartup.js?v=$sg_pid"></script> <script type="text/javascript" src="$sg_root/js/loadingStartup.js?v=$sg_pid"></script>
<style> <style>
body{padding-top:0 !important}.sglogo{display:block;width:138px;height:74px;margin-bottom:-10px;background:url(${sg_root}/images/sickgear.png) no-repeat 0 0}.bfr{position:absolute;left:-999px;top:-999px}.bfr img{width:16px;height:16px}.spinner{display:inline-block;width:16px;height:16px;background:url(${sg_root}/images/loading16${theme_suffix}.gif) no-repeat 0 0}.sub-title{padding-bottom:10px}.desc, .images i{margin-right:6px}.images i{vertical-align:middle}.hide,.hide-yes,.hide-no{display:none} body{padding-top:0 !important}.sglogo{display:block;width:138px;height:74px;margin-bottom:-10px;background:url(${sg_root}/images/sickgear.png) no-repeat 0 0}.bfr{position:absolute;left:-999px;top:-999px}.bfr img{width:16px;height:16px}.spinner{display:inline-block;width:16px;height:16px;background:url(${sg_root}/images/loading16${theme_suffix}.gif) no-repeat 0 0}.sub-title{padding-bottom:10px}.desc, .images i{margin-right:6px}.images i{vertical-align:middle}.hide{display:none}
</style> </style>
<link rel="stylesheet" type="text/css" href="$sg_root/css/style.css?v=$sg_pid"> <link rel="stylesheet" type="text/css" href="$sg_root/css/style.css?v=$sg_pid">
@ -52,9 +52,9 @@ body{padding-top:0 !important}.sglogo{display:block;width:138px;height:74px;marg
<h2 class="sub-title">Starting up</h2> <h2 class="sub-title">Starting up</h2>
#set msg_cnt = len($message) - 1 #set msg_cnt = len($message) - 1
#for i, msg in enumerate($message) #for i, msg in enumerate($message)
<div class="loading-step"> <div class="loading-step" data-message="$msg['msg']">
<span class="desc grey-text" data-message="$msg">$msg: </span> <span class="desc grey-text">$msg['msg']: </span><span class="count"></span>
<span class="images">#if i == msg_cnt#<i class="spinner"></i>#end if#<span #if i == msg_cnt#class="hide-yes"#end if#><i class="yes"></i></span></span> <span class="images"><i class="spinner#if i != msg_cnt# hide#end if#"></i><span class="result#if i == msg_cnt# hide#end if#"><i class="yes"></i></span></span>
</div> </div>
#end for #end for

2
gui/slick/interfaces/default/restart.tmpl

@ -76,7 +76,7 @@ body{padding-top:0 !important}.sglogo{display:block;width:138px;height:74px;marg
<div class="hide" id="refresh_message"> <div class="hide" id="refresh_message">
#if not $do_shutdown #if not $do_shutdown
<span class="desc"><span class="grey-text">Waiting for SickGear </span> home page: </span> <span class="desc"><span class="grey-text">SickGear </span> start phase: </span>
<span class="images"><i class="spinner"></i></span> <span class="images"><i class="spinner"></i></span>
#end if #end if
</div> </div>

42
gui/slick/js/loadingStartup.js

@ -1,13 +1,11 @@
/** @namespace $.SickGear.Root */ /** @namespace $.SickGear.Root */
var dev = !1, var dev = !1,
logInfo = dev && console.info.bind(window.console) || function(){}, logInfo = dev && console.info.bind(window.console) || function (){},
logErr = dev && console.error.bind(window.console) || function(){}; logErr = dev && console.error.bind(window.console) || function (){};
$(function () { $(function () {
ajaxConsumer.checkLoadNotifications(); ajaxConsumer.checkLoadNotifications();
}); });
var baseUrl = function () { var baseUrl = function () {
@ -49,22 +47,36 @@ var ajaxConsumer = function () {
}(); }();
function putMsg(msg) { function putMsg(msg) {
var loading = '.loading-step', lastStep = $(loading).filter(':last'); var loading = '.loading-step', lastStep$ = $(loading).filter(':last');
if (msg !== lastStep.find('.desc').attr('data-message')){ if (msg !== lastStep$.attr('data-message')) {
lastStep.after(lastStep.clone()); lastStep$.clone().insertAfter(lastStep$);
lastStep.find('.spinner').hide();
lastStep.find('.hide-yes').removeClass('hide-yes'); var result$ = lastStep$.find('.result');
$(loading).filter(':last') lastStep$.find('.spinner').addClass('hide');
.find('.desc') if (!lastStep$.find('.count').text().length) {
.attr('data-message', msg) result$.removeClass('hide');
.text(msg + ': '); } else {
result$.addClass('hide');
}
lastStep$ = $(loading).filter(':last');
lastStep$.attr('data-message', msg);
lastStep$.find('.desc').text(msg + ': ');
lastStep$.find('.count').text('');
lastStep$.find('.spinner').removeClass('hide');
lastStep$.find('.result').addClass('hide');
} }
} }
function uiUpdateComplete(data) { function uiUpdateComplete(data) {
$.each(data, function (i, msg) { $.each(data, function (i, msg) {
if (i >= $('.loading-step').length){ var loading = '.loading-step';
putMsg(msg) if (i >= $(loading).length) {
putMsg(msg.msg);
}
if (-1 !== msg.progress) {
var loading$ = $(loading + '[data-message="' + msg.msg + '"]');
loading$.find('.spinner, .result').addClass('hide');
loading$.find('.count').text(msg.progress);
} }
}); });
} }

1
init-scripts/init.systemd

@ -42,6 +42,7 @@ Environment=PYTHONUNBUFFERED=true
ExecStart=/usr/bin/python2 /opt/sickgear/app/sickgear.py --systemd --datadir=/opt/sickgear/data ExecStart=/usr/bin/python2 /opt/sickgear/app/sickgear.py --systemd --datadir=/opt/sickgear/data
KillMode=process KillMode=process
Restart=on-failure Restart=on-failure
WorkingDirectory=/opt/sickgear
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

144
sickbeard/databases/mainDB.py

@ -31,10 +31,6 @@ MAX_DB_VERSION = 20010
TEST_BASE_VERSION = None # the base production db version, only needed for TEST db versions (>=100000) TEST_BASE_VERSION = None # the base production db version, only needed for TEST db versions (>=100000)
def upgrade_log(to_log, log_level=logger.MESSAGE):
logger.load_log('Upgrading main db', to_log, log_level)
class MainSanityCheck(db.DBSanityCheck): class MainSanityCheck(db.DBSanityCheck):
def check(self): def check(self):
self.fix_missing_table_indexes() self.fix_missing_table_indexes()
@ -327,7 +323,7 @@ class AddSizeAndSceneNameFields(db.SchemaUpgrade):
ep_results = self.connection.select('SELECT episode_id, location, file_size FROM tv_episodes') ep_results = self.connection.select('SELECT episode_id, location, file_size FROM tv_episodes')
upgrade_log(u'Adding file size to all episodes in DB, please be patient') self.upgrade_log(u'Adding file size to all episodes in DB, please be patient')
for cur_ep in ep_results: for cur_ep in ep_results:
if not cur_ep['location']: if not cur_ep['location']:
continue continue
@ -341,7 +337,7 @@ class AddSizeAndSceneNameFields(db.SchemaUpgrade):
# check each snatch to see if we can use it to get a release name from # check each snatch to see if we can use it to get a release name from
history_results = self.connection.select('SELECT * FROM history WHERE provider != -1 ORDER BY date ASC') history_results = self.connection.select('SELECT * FROM history WHERE provider != -1 ORDER BY date ASC')
upgrade_log(u'Adding release name to all episodes still in history') self.upgrade_log(u'Adding release name to all episodes still in history')
for cur_result in history_results: for cur_result in history_results:
# find the associated download, if there isn't one then ignore it # find the associated download, if there isn't one then ignore it
download_results = self.connection.select( download_results = self.connection.select(
@ -350,7 +346,7 @@ class AddSizeAndSceneNameFields(db.SchemaUpgrade):
' WHERE provider = -1 AND showid = ? AND season = ? AND episode = ? AND date > ?', ' WHERE provider = -1 AND showid = ? AND season = ? AND episode = ? AND date > ?',
[cur_result['showid'], cur_result['season'], cur_result['episode'], cur_result['date']]) [cur_result['showid'], cur_result['season'], cur_result['episode'], cur_result['date']])
if not download_results: if not download_results:
upgrade_log(u'Found a snatch in the history for ' + cur_result[ self.upgrade_log(u'Found a snatch in the history for ' + cur_result[
'resource'] + ' but couldn\'t find the associated download, skipping it', logger.DEBUG) 'resource'] + ' but couldn\'t find the associated download, skipping it', logger.DEBUG)
continue continue
@ -400,7 +396,7 @@ class AddSizeAndSceneNameFields(db.SchemaUpgrade):
# check each snatch to see if we can use it to get a release name from # check each snatch to see if we can use it to get a release name from
empty_results = self.connection.select('SELECT episode_id, location FROM tv_episodes WHERE release_name = ""') empty_results = self.connection.select('SELECT episode_id, location FROM tv_episodes WHERE release_name = ""')
upgrade_log(u'Adding release name to all episodes with obvious scene filenames') self.upgrade_log(u'Adding release name to all episodes with obvious scene filenames')
for cur_result in empty_results: for cur_result in empty_results:
ep_file_name = ek.ek(os.path.basename, cur_result['location']) ep_file_name = ek.ek(os.path.basename, cur_result['location'])
@ -545,7 +541,7 @@ class Add1080pAndRawHDQualities(db.SchemaUpgrade):
common.Quality.UNKNOWN], []) common.Quality.UNKNOWN], [])
# update qualities (including templates) # update qualities (including templates)
upgrade_log(u'[1/4] Updating pre-defined templates and the quality for each show...', logger.MESSAGE) self.upgrade_log(u'[1/4] Updating pre-defined templates and the quality for each show...')
cl = [] cl = []
shows = self.connection.select('SELECT * FROM tv_shows') shows = self.connection.select('SELECT * FROM tv_shows')
for cur_show in shows: for cur_show in shows:
@ -560,7 +556,7 @@ class Add1080pAndRawHDQualities(db.SchemaUpgrade):
# update status that are are within the old hdwebdl # update status that are are within the old hdwebdl
# (1<<3 which is 8) and better -- exclude unknown (1<<15 which is 32768) # (1<<3 which is 8) and better -- exclude unknown (1<<15 which is 32768)
upgrade_log(u'[2/4] Updating the status for the episodes within each show...', logger.MESSAGE) self.upgrade_log(u'[2/4] Updating the status for the episodes within each show...')
cl = [] cl = []
episodes = self.connection.select('SELECT * FROM tv_episodes WHERE status < 3276800 AND status >= 800') episodes = self.connection.select('SELECT * FROM tv_episodes WHERE status < 3276800 AND status >= 800')
for cur_episode in episodes: for cur_episode in episodes:
@ -572,7 +568,7 @@ class Add1080pAndRawHDQualities(db.SchemaUpgrade):
# may not always coordinate together # may not always coordinate together
# update previous history so it shows the correct action # update previous history so it shows the correct action
upgrade_log(u'[3/4] Updating history to reflect the correct action...', logger.MESSAGE) self.upgrade_log(u'[3/4] Updating history to reflect the correct action...')
cl = [] cl = []
history_action = self.connection.select('SELECT * FROM history WHERE action < 3276800 AND action >= 800') history_action = self.connection.select('SELECT * FROM history WHERE action < 3276800 AND action >= 800')
for cur_entry in history_action: for cur_entry in history_action:
@ -581,7 +577,7 @@ class Add1080pAndRawHDQualities(db.SchemaUpgrade):
self.connection.mass_action(cl) self.connection.mass_action(cl)
# update previous history so it shows the correct quality # update previous history so it shows the correct quality
upgrade_log(u'[4/4] Updating history to reflect the correct quality...', logger.MESSAGE) self.upgrade_log(u'[4/4] Updating history to reflect the correct quality...')
cl = [] cl = []
history_quality = self.connection.select('SELECT * FROM history WHERE quality < 32768 AND quality >= 8') history_quality = self.connection.select('SELECT * FROM history WHERE quality < 32768 AND quality >= 8')
for cur_entry in history_quality: for cur_entry in history_quality:
@ -592,7 +588,7 @@ class Add1080pAndRawHDQualities(db.SchemaUpgrade):
self.incDBVersion() self.incDBVersion()
# cleanup and reduce db if any previous data was removed # cleanup and reduce db if any previous data was removed
upgrade_log(u'Performing a vacuum on the database.', logger.DEBUG) self.upgrade_log(u'Performing a vacuum on the database.', logger.DEBUG)
self.connection.action('VACUUM') self.connection.action('VACUUM')
return self.checkDBVersion() return self.checkDBVersion()
@ -604,10 +600,10 @@ class AddShowidTvdbidIndex(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Checking for duplicate shows before adding unique index.') self.upgrade_log(u'Checking for duplicate shows before adding unique index.')
MainSanityCheck(self.connection).fix_duplicate_shows('tvdb_id') MainSanityCheck(self.connection).fix_duplicate_shows('tvdb_id')
upgrade_log(u'Adding index on tvdb_id (tv_shows) and showid (tv_episodes) to speed up searches/queries.') self.upgrade_log(u'Adding index on tvdb_id (tv_shows) and showid (tv_episodes) to speed up searches/queries.')
if not self.hasTable('idx_showid'): if not self.hasTable('idx_showid'):
self.connection.action('CREATE INDEX idx_showid ON tv_episodes (showid);') self.connection.action('CREATE INDEX idx_showid ON tv_episodes (showid);')
if not self.hasTable('idx_tvdb_id'): if not self.hasTable('idx_tvdb_id'):
@ -623,7 +619,7 @@ class AddLastUpdateTVDB(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'last_update_tvdb'): if not self.hasColumn('tv_shows', 'last_update_tvdb'):
upgrade_log(u'Adding column last_update_tvdb to tv_shows') self.upgrade_log(u'Adding column last_update_tvdb to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'last_update_tvdb', default=1) self.addColumn('tv_shows', 'last_update_tvdb', default=1)
@ -636,7 +632,7 @@ class AddDBIncreaseTo15(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version to v%s' % self.checkDBVersion()) self.upgrade_log(u'Bumping database version to v%s' % self.checkDBVersion())
self.incDBVersion() self.incDBVersion()
return self.checkDBVersion() return self.checkDBVersion()
@ -647,7 +643,7 @@ class AddIMDbInfo(db.SchemaUpgrade):
db_backed_up = False db_backed_up = False
if not self.hasTable('imdb_info'): if not self.hasTable('imdb_info'):
upgrade_log(u'Creating IMDb table imdb_info') self.upgrade_log(u'Creating IMDb table imdb_info')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
db_backed_up = True db_backed_up = True
@ -657,7 +653,7 @@ class AddIMDbInfo(db.SchemaUpgrade):
' rating TEXT, votes INTEGER, last_update NUMERIC)') ' rating TEXT, votes INTEGER, last_update NUMERIC)')
if not self.hasColumn('tv_shows', 'imdb_id'): if not self.hasColumn('tv_shows', 'imdb_id'):
upgrade_log(u'Adding IMDb column imdb_id to tv_shows') self.upgrade_log(u'Adding IMDb column imdb_id to tv_shows')
if not db_backed_up: if not db_backed_up:
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
@ -678,7 +674,7 @@ class AddProperNamingSupport(db.SchemaUpgrade):
return self.checkDBVersion() return self.checkDBVersion()
if not self.hasColumn('tv_episodes', 'is_proper'): if not self.hasColumn('tv_episodes', 'is_proper'):
upgrade_log(u'Adding column is_proper to tv_episodes') self.upgrade_log(u'Adding column is_proper to tv_episodes')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_episodes', 'is_proper') self.addColumn('tv_episodes', 'is_proper')
@ -698,7 +694,7 @@ class AddEmailSubscriptionTable(db.SchemaUpgrade):
return self.checkDBVersion() return self.checkDBVersion()
if not self.hasColumn('tv_shows', 'notify_list'): if not self.hasColumn('tv_shows', 'notify_list'):
upgrade_log(u'Adding column notify_list to tv_shows') self.upgrade_log(u'Adding column notify_list to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'notify_list', 'TEXT', None) self.addColumn('tv_shows', 'notify_list', 'TEXT', None)
@ -722,7 +718,7 @@ class AddProperSearch(db.SchemaUpgrade):
return self.checkDBVersion() return self.checkDBVersion()
if not self.hasColumn('info', 'last_proper_search'): if not self.hasColumn('info', 'last_proper_search'):
upgrade_log(u'Adding column last_proper_search to info') self.upgrade_log(u'Adding column last_proper_search to info')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('info', 'last_proper_search', default=1) self.addColumn('info', 'last_proper_search', default=1)
@ -734,7 +730,7 @@ class AddProperSearch(db.SchemaUpgrade):
class AddDvdOrderOption(db.SchemaUpgrade): class AddDvdOrderOption(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'dvdorder'): if not self.hasColumn('tv_shows', 'dvdorder'):
upgrade_log(u'Adding column dvdorder to tv_shows') self.upgrade_log(u'Adding column dvdorder to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'dvdorder', 'NUMERIC', '0') self.addColumn('tv_shows', 'dvdorder', 'NUMERIC', '0')
@ -746,7 +742,7 @@ class AddDvdOrderOption(db.SchemaUpgrade):
class AddSubtitlesSupport(db.SchemaUpgrade): class AddSubtitlesSupport(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'subtitles'): if not self.hasColumn('tv_shows', 'subtitles'):
upgrade_log(u'Adding subtitles to tv_shows and tv_episodes') self.upgrade_log(u'Adding subtitles to tv_shows and tv_episodes')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'subtitles') self.addColumn('tv_shows', 'subtitles')
self.addColumn('tv_episodes', 'subtitles', 'TEXT', '') self.addColumn('tv_episodes', 'subtitles', 'TEXT', '')
@ -762,10 +758,10 @@ class ConvertTVShowsToIndexerScheme(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Converting TV Shows table to Indexer Scheme...') self.upgrade_log(u'Converting TV Shows table to Indexer Scheme...')
if self.hasTable('tmp_tv_shows'): if self.hasTable('tmp_tv_shows'):
upgrade_log(u'Removing temp tv show tables left behind from previous updates...') self.upgrade_log(u'Removing temp tv show tables left behind from previous updates...')
self.connection.action('DROP TABLE tmp_tv_shows') self.connection.action('DROP TABLE tmp_tv_shows')
self.connection.action('ALTER TABLE tv_shows RENAME TO tmp_tv_shows') self.connection.action('ALTER TABLE tv_shows RENAME TO tmp_tv_shows')
@ -798,10 +794,10 @@ class ConvertTVEpisodesToIndexerScheme(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Converting TV Episodes table to Indexer Scheme...') self.upgrade_log(u'Converting TV Episodes table to Indexer Scheme...')
if self.hasTable('tmp_tv_episodes'): if self.hasTable('tmp_tv_episodes'):
upgrade_log(u'Removing temp tv episode tables left behind from previous updates...') self.upgrade_log(u'Removing temp tv episode tables left behind from previous updates...')
self.connection.action('DROP TABLE tmp_tv_episodes') self.connection.action('DROP TABLE tmp_tv_episodes')
self.connection.action('ALTER TABLE tv_episodes RENAME TO tmp_tv_episodes') self.connection.action('ALTER TABLE tv_episodes RENAME TO tmp_tv_episodes')
@ -835,10 +831,10 @@ class ConvertIMDBInfoToIndexerScheme(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Converting IMDB Info table to Indexer Scheme...') self.upgrade_log(u'Converting IMDB Info table to Indexer Scheme...')
if self.hasTable('tmp_imdb_info'): if self.hasTable('tmp_imdb_info'):
upgrade_log(u'Removing temp imdb info tables left behind from previous updates...') self.upgrade_log(u'Removing temp imdb info tables left behind from previous updates...')
self.connection.action('DROP TABLE tmp_imdb_info') self.connection.action('DROP TABLE tmp_imdb_info')
self.connection.action('ALTER TABLE imdb_info RENAME TO tmp_imdb_info') self.connection.action('ALTER TABLE imdb_info RENAME TO tmp_imdb_info')
@ -861,10 +857,10 @@ class ConvertInfoToIndexerScheme(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Converting Info table to Indexer Scheme...') self.upgrade_log(u'Converting Info table to Indexer Scheme...')
if self.hasTable('tmp_info'): if self.hasTable('tmp_info'):
upgrade_log(u'Removing temp info tables left behind from previous updates...') self.upgrade_log(u'Removing temp info tables left behind from previous updates...')
self.connection.action('DROP TABLE tmp_info') self.connection.action('DROP TABLE tmp_info')
self.connection.action('ALTER TABLE info RENAME TO tmp_info') self.connection.action('ALTER TABLE info RENAME TO tmp_info')
@ -885,7 +881,7 @@ class AddArchiveFirstMatchOption(db.SchemaUpgrade):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
if not self.hasColumn('tv_shows', 'archive_firstmatch'): if not self.hasColumn('tv_shows', 'archive_firstmatch'):
upgrade_log(u'Adding column archive_firstmatch to tv_shows') self.upgrade_log(u'Adding column archive_firstmatch to tv_shows')
self.addColumn('tv_shows', 'archive_firstmatch', 'NUMERIC', '0') self.addColumn('tv_shows', 'archive_firstmatch', 'NUMERIC', '0')
self.incDBVersion() self.incDBVersion()
@ -900,7 +896,7 @@ class AddSceneNumbering(db.SchemaUpgrade):
if self.hasTable('scene_numbering'): if self.hasTable('scene_numbering'):
self.connection.action('DROP TABLE scene_numbering') self.connection.action('DROP TABLE scene_numbering')
upgrade_log(u'Upgrading table scene_numbering ...', logger.MESSAGE) self.upgrade_log(u'Upgrading table scene_numbering ...')
self.connection.action( self.connection.action(
'CREATE TABLE scene_numbering (indexer TEXT, indexer_id INTEGER, season INTEGER, episode INTEGER,' 'CREATE TABLE scene_numbering (indexer TEXT, indexer_id INTEGER, season INTEGER, episode INTEGER,'
' scene_season INTEGER, scene_episode INTEGER,' ' scene_season INTEGER, scene_episode INTEGER,'
@ -916,7 +912,7 @@ class ConvertIndexerToInteger(db.SchemaUpgrade):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
cl = [] cl = []
upgrade_log(u'Converting Indexer to Integer ...', logger.MESSAGE) self.upgrade_log(u'Converting Indexer to Integer ...')
cl.append(['UPDATE tv_shows SET indexer = ? WHERE LOWER(indexer) = ?', ['1', 'tvdb']]) cl.append(['UPDATE tv_shows SET indexer = ? WHERE LOWER(indexer) = ?', ['1', 'tvdb']])
cl.append(['UPDATE tv_shows SET indexer = ? WHERE LOWER(indexer) = ?', ['2', 'tvrage']]) cl.append(['UPDATE tv_shows SET indexer = ? WHERE LOWER(indexer) = ?', ['2', 'tvrage']])
cl.append(['UPDATE tv_episodes SET indexer = ? WHERE LOWER(indexer) = ?', ['1', 'tvdb']]) cl.append(['UPDATE tv_episodes SET indexer = ? WHERE LOWER(indexer) = ?', ['1', 'tvdb']])
@ -940,13 +936,13 @@ class AddRequireAndIgnoreWords(db.SchemaUpgrade):
db_backed_up = False db_backed_up = False
if not self.hasColumn('tv_shows', 'rls_require_words'): if not self.hasColumn('tv_shows', 'rls_require_words'):
upgrade_log(u'Adding column rls_require_words to tv_shows') self.upgrade_log(u'Adding column rls_require_words to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
db_backed_up = True db_backed_up = True
self.addColumn('tv_shows', 'rls_require_words', 'TEXT', '') self.addColumn('tv_shows', 'rls_require_words', 'TEXT', '')
if not self.hasColumn('tv_shows', 'rls_ignore_words'): if not self.hasColumn('tv_shows', 'rls_ignore_words'):
upgrade_log(u'Adding column rls_ignore_words to tv_shows') self.upgrade_log(u'Adding column rls_ignore_words to tv_shows')
if not db_backed_up: if not db_backed_up:
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'rls_ignore_words', 'TEXT', '') self.addColumn('tv_shows', 'rls_ignore_words', 'TEXT', '')
@ -960,14 +956,14 @@ class AddSportsOption(db.SchemaUpgrade):
def execute(self): def execute(self):
db_backed_up = False db_backed_up = False
if not self.hasColumn('tv_shows', 'sports'): if not self.hasColumn('tv_shows', 'sports'):
upgrade_log(u'Adding column sports to tv_shows') self.upgrade_log(u'Adding column sports to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
db_backed_up = True db_backed_up = True
self.addColumn('tv_shows', 'sports', 'NUMERIC', '0') self.addColumn('tv_shows', 'sports', 'NUMERIC', '0')
if self.hasColumn('tv_shows', 'air_by_date') and self.hasColumn('tv_shows', 'sports'): if self.hasColumn('tv_shows', 'air_by_date') and self.hasColumn('tv_shows', 'sports'):
# update sports column # update sports column
upgrade_log(u'[4/4] Updating tv_shows to reflect the correct sports value...', logger.MESSAGE) self.upgrade_log(u'[4/4] Updating tv_shows to reflect the correct sports value...')
if not db_backed_up: if not db_backed_up:
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
cl = [] cl = []
@ -988,7 +984,7 @@ class AddSceneNumberingToTvEpisodes(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding columns scene_season and scene_episode to tvepisodes') self.upgrade_log(u'Adding columns scene_season and scene_episode to tvepisodes')
self.addColumn('tv_episodes', 'scene_season', 'NUMERIC', 'NULL') self.addColumn('tv_episodes', 'scene_season', 'NUMERIC', 'NULL')
self.addColumn('tv_episodes', 'scene_episode', 'NUMERIC', 'NULL') self.addColumn('tv_episodes', 'scene_episode', 'NUMERIC', 'NULL')
@ -1001,7 +997,7 @@ class AddAnimeTVShow(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding column anime to tv_episodes') self.upgrade_log(u'Adding column anime to tv_episodes')
self.addColumn('tv_shows', 'anime', 'NUMERIC', '0') self.addColumn('tv_shows', 'anime', 'NUMERIC', '0')
self.incDBVersion() self.incDBVersion()
@ -1013,7 +1009,7 @@ class AddAbsoluteNumbering(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding column absolute_number to tv_episodes') self.upgrade_log(u'Adding column absolute_number to tv_episodes')
self.addColumn('tv_episodes', 'absolute_number', 'NUMERIC', '0') self.addColumn('tv_episodes', 'absolute_number', 'NUMERIC', '0')
self.incDBVersion() self.incDBVersion()
@ -1025,7 +1021,7 @@ class AddSceneAbsoluteNumbering(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding columns absolute_number and scene_absolute_number to scene_numbering') self.upgrade_log(u'Adding columns absolute_number and scene_absolute_number to scene_numbering')
self.addColumn('scene_numbering', 'absolute_number', 'NUMERIC', '0') self.addColumn('scene_numbering', 'absolute_number', 'NUMERIC', '0')
self.addColumn('scene_numbering', 'scene_absolute_number', 'NUMERIC', '0') self.addColumn('scene_numbering', 'scene_absolute_number', 'NUMERIC', '0')
@ -1040,7 +1036,7 @@ class AddAnimeBlacklistWhitelist(db.SchemaUpgrade):
cl = [['CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)'], cl = [['CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)'],
['CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)']] ['CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)']]
upgrade_log(u'Creating table blacklist whitelist') self.upgrade_log(u'Creating table blacklist whitelist')
self.connection.mass_action(cl) self.connection.mass_action(cl)
self.incDBVersion() self.incDBVersion()
@ -1052,7 +1048,7 @@ class AddSceneAbsoluteNumbering2(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding column scene_absolute_number to tv_episodes') self.upgrade_log(u'Adding column scene_absolute_number to tv_episodes')
self.addColumn('tv_episodes', 'scene_absolute_number', 'NUMERIC', '0') self.addColumn('tv_episodes', 'scene_absolute_number', 'NUMERIC', '0')
self.incDBVersion() self.incDBVersion()
@ -1064,7 +1060,7 @@ class AddXemRefresh(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Creating table xem_refresh') self.upgrade_log(u'Creating table xem_refresh')
self.connection.action( self.connection.action(
'CREATE TABLE xem_refresh (indexer TEXT, indexer_id INTEGER PRIMARY KEY, last_refreshed INTEGER)') 'CREATE TABLE xem_refresh (indexer TEXT, indexer_id INTEGER PRIMARY KEY, last_refreshed INTEGER)')
@ -1077,7 +1073,7 @@ class AddSceneToTvShows(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding column scene to tv_shows') self.upgrade_log(u'Adding column scene to tv_shows')
self.addColumn('tv_shows', 'scene', 'NUMERIC', '0') self.addColumn('tv_shows', 'scene', 'NUMERIC', '0')
self.incDBVersion() self.incDBVersion()
@ -1092,7 +1088,7 @@ class AddIndexerMapping(db.SchemaUpgrade):
if self.hasTable('indexer_mapping'): if self.hasTable('indexer_mapping'):
self.connection.action('DROP TABLE indexer_mapping') self.connection.action('DROP TABLE indexer_mapping')
upgrade_log(u'Adding table indexer_mapping') self.upgrade_log(u'Adding table indexer_mapping')
self.connection.action( self.connection.action(
'CREATE TABLE indexer_mapping (indexer_id INTEGER, indexer NUMERIC, mindexer_id INTEGER, mindexer NUMERIC,' 'CREATE TABLE indexer_mapping (indexer_id INTEGER, indexer NUMERIC, mindexer_id INTEGER, mindexer NUMERIC,'
' PRIMARY KEY (indexer_id, indexer))') ' PRIMARY KEY (indexer_id, indexer))')
@ -1106,11 +1102,11 @@ class AddVersionToTvEpisodes(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Adding columns release_group and version to tv_episodes') self.upgrade_log(u'Adding columns release_group and version to tv_episodes')
self.addColumn('tv_episodes', 'release_group', 'TEXT', '') self.addColumn('tv_episodes', 'release_group', 'TEXT', '')
self.addColumn('tv_episodes', 'version', 'NUMERIC', '-1') self.addColumn('tv_episodes', 'version', 'NUMERIC', '-1')
upgrade_log(u'Adding column version to history') self.upgrade_log(u'Adding column version to history')
self.addColumn('history', 'version', 'NUMERIC', '-1') self.addColumn('history', 'version', 'NUMERIC', '-1')
self.incDBVersion() self.incDBVersion()
@ -1122,7 +1118,7 @@ class BumpDatabaseVersion(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(10000) self.setDBVersion(10000)
return self.checkDBVersion() return self.checkDBVersion()
@ -1133,7 +1129,7 @@ class Migrate41(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(10001) self.setDBVersion(10001)
return self.checkDBVersion() return self.checkDBVersion()
@ -1149,7 +1145,7 @@ class Migrate43(db.SchemaUpgrade):
if self.hasTable(table): if self.hasTable(table):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
db_backed_up = True db_backed_up = True
upgrade_log(u'Dropping redundant table tmdb_info') self.upgrade_log(u'Dropping redundant table tmdb_info')
self.connection.action('DROP TABLE [%s]' % table) self.connection.action('DROP TABLE [%s]' % table)
db_chg = True db_chg = True
@ -1157,7 +1153,7 @@ class Migrate43(db.SchemaUpgrade):
if not db_backed_up: if not db_backed_up:
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
db_backed_up = True db_backed_up = True
upgrade_log(u'Dropping redundant tmdb_info refs') self.upgrade_log(u'Dropping redundant tmdb_info refs')
self.dropColumn('tv_shows', 'tmdb_id') self.dropColumn('tv_shows', 'tmdb_id')
db_chg = True db_chg = True
@ -1169,7 +1165,7 @@ class Migrate43(db.SchemaUpgrade):
self.connection.action('INSERT INTO db_version (db_version) VALUES (0);') self.connection.action('INSERT INTO db_version (db_version) VALUES (0);')
if not db_chg: if not db_chg:
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(10001) self.setDBVersion(10001)
return self.checkDBVersion() return self.checkDBVersion()
@ -1180,7 +1176,7 @@ class Migrate4301(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(10002) self.setDBVersion(10002)
return self.checkDBVersion() return self.checkDBVersion()
@ -1191,7 +1187,7 @@ class Migrate4302(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(10003) self.setDBVersion(10003)
return self.checkDBVersion() return self.checkDBVersion()
@ -1202,7 +1198,7 @@ class MigrateUpstream(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Migrate SickBeard DB v%s into v15' % str(self.checkDBVersion()).replace('58', '')) self.upgrade_log(u'Migrate SickBeard db v%s into v15' % str(self.checkDBVersion()).replace('58', ''))
self.setDBVersion(15) self.setDBVersion(15)
return self.checkDBVersion() return self.checkDBVersion()
@ -1213,7 +1209,7 @@ class SickGearDatabaseVersion(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version to new SickGear standards') self.upgrade_log(u'Bumping database version to new SickGear standards')
self.setDBVersion(20000) self.setDBVersion(20000)
return self.checkDBVersion() return self.checkDBVersion()
@ -1224,7 +1220,7 @@ class RemoveDefaultEpStatusFromTvShows(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Dropping redundant column default_ep_status from tv_shows') self.upgrade_log(u'Dropping redundant column default_ep_status from tv_shows')
self.dropColumn('tv_shows', 'default_ep_status') self.dropColumn('tv_shows', 'default_ep_status')
self.setDBVersion(10000) self.setDBVersion(10000)
@ -1236,7 +1232,7 @@ class RemoveMinorDBVersion(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Dropping redundant column db_minor_version from db_version') self.upgrade_log(u'Dropping redundant column db_minor_version from db_version')
self.dropColumn('db_version', 'db_minor_version') self.dropColumn('db_version', 'db_minor_version')
self.setDBVersion(10001) self.setDBVersion(10001)
@ -1247,7 +1243,7 @@ class RemoveMinorDBVersion(db.SchemaUpgrade):
class RemoveMetadataSub(db.SchemaUpgrade): class RemoveMetadataSub(db.SchemaUpgrade):
def execute(self): def execute(self):
if self.hasColumn('tv_shows', 'sub_use_sr_metadata'): if self.hasColumn('tv_shows', 'sub_use_sr_metadata'):
upgrade_log(u'Dropping redundant column metadata sub') self.upgrade_log(u'Dropping redundant column metadata sub')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.dropColumn('tv_shows', 'sub_use_sr_metadata') self.dropColumn('tv_shows', 'sub_use_sr_metadata')
@ -1260,10 +1256,10 @@ class DBIncreaseTo20001(db.SchemaUpgrade):
def execute(self): def execute(self):
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
upgrade_log(u'Bumping database version to force a backup before new database code') self.upgrade_log(u'Bumping database version to force a backup before new database code')
self.connection.action('VACUUM') self.connection.action('VACUUM')
upgrade_log(u'Performed a vacuum on the database', logger.DEBUG) self.upgrade_log(u'Performed a vacuum on the database', logger.DEBUG)
self.setDBVersion(20001) self.setDBVersion(20001)
return self.checkDBVersion() return self.checkDBVersion()
@ -1273,7 +1269,7 @@ class DBIncreaseTo20001(db.SchemaUpgrade):
class AddTvShowOverview(db.SchemaUpgrade): class AddTvShowOverview(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'overview'): if not self.hasColumn('tv_shows', 'overview'):
upgrade_log(u'Adding column overview to tv_shows') self.upgrade_log(u'Adding column overview to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'overview', 'TEXT', '') self.addColumn('tv_shows', 'overview', 'TEXT', '')
@ -1285,7 +1281,7 @@ class AddTvShowOverview(db.SchemaUpgrade):
class AddTvShowTags(db.SchemaUpgrade): class AddTvShowTags(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'tag'): if not self.hasColumn('tv_shows', 'tag'):
upgrade_log(u'Adding tag to tv_shows') self.upgrade_log(u'Adding tag to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'tag', 'TEXT', 'Show List') self.addColumn('tv_shows', 'tag', 'TEXT', 'Show List')
@ -1302,7 +1298,7 @@ class ChangeMapIndexer(db.SchemaUpgrade):
if self.hasTable('indexer_mapping'): if self.hasTable('indexer_mapping'):
self.connection.action('DROP TABLE indexer_mapping') self.connection.action('DROP TABLE indexer_mapping')
upgrade_log(u'Changing table indexer_mapping') self.upgrade_log(u'Changing table indexer_mapping')
self.connection.action( self.connection.action(
'CREATE TABLE indexer_mapping (indexer_id INTEGER, indexer NUMERIC, mindexer_id INTEGER NOT NULL,' 'CREATE TABLE indexer_mapping (indexer_id INTEGER, indexer NUMERIC, mindexer_id INTEGER NOT NULL,'
' mindexer NUMERIC, date NUMERIC NOT NULL DEFAULT 0, status INTEGER NOT NULL DEFAULT 0,' ' mindexer NUMERIC, date NUMERIC NOT NULL DEFAULT 0, status INTEGER NOT NULL DEFAULT 0,'
@ -1311,10 +1307,10 @@ class ChangeMapIndexer(db.SchemaUpgrade):
self.connection.action('CREATE INDEX IF NOT EXISTS idx_mapping ON indexer_mapping (indexer_id, indexer)') self.connection.action('CREATE INDEX IF NOT EXISTS idx_mapping ON indexer_mapping (indexer_id, indexer)')
if not self.hasColumn('info', 'last_run_backlog'): if not self.hasColumn('info', 'last_run_backlog'):
upgrade_log('Adding last_run_backlog to info') self.upgrade_log('Adding last_run_backlog to info')
self.addColumn('info', 'last_run_backlog', 'NUMERIC', 1) self.addColumn('info', 'last_run_backlog', 'NUMERIC', 1)
upgrade_log(u'Moving table scene_exceptions from cache.db to sickbeard.db') self.upgrade_log(u'Moving table scene_exceptions from cache.db to sickbeard.db')
if self.hasTable('scene_exceptions_refresh'): if self.hasTable('scene_exceptions_refresh'):
self.connection.action('DROP TABLE scene_exceptions_refresh') self.connection.action('DROP TABLE scene_exceptions_refresh')
self.connection.action('CREATE TABLE scene_exceptions_refresh (list TEXT PRIMARY KEY, last_refreshed INTEGER)') self.connection.action('CREATE TABLE scene_exceptions_refresh (list TEXT PRIMARY KEY, last_refreshed INTEGER)')
@ -1357,7 +1353,7 @@ class ChangeMapIndexer(db.SchemaUpgrade):
class AddShowNotFoundCounter(db.SchemaUpgrade): class AddShowNotFoundCounter(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasTable('tv_shows_not_found'): if not self.hasTable('tv_shows_not_found'):
upgrade_log(u'Adding table tv_shows_not_found') self.upgrade_log(u'Adding table tv_shows_not_found')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.connection.action( self.connection.action(
@ -1373,7 +1369,7 @@ class AddShowNotFoundCounter(db.SchemaUpgrade):
class AddFlagTable(db.SchemaUpgrade): class AddFlagTable(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasTable('flags'): if not self.hasTable('flags'):
upgrade_log(u'Adding table flags') self.upgrade_log(u'Adding table flags')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.connection.action('CREATE TABLE flags (flag PRIMARY KEY NOT NULL)') self.connection.action('CREATE TABLE flags (flag PRIMARY KEY NOT NULL)')
@ -1386,7 +1382,7 @@ class AddFlagTable(db.SchemaUpgrade):
class DBIncreaseTo20007(db.SchemaUpgrade): class DBIncreaseTo20007(db.SchemaUpgrade):
def execute(self): def execute(self):
upgrade_log(u'Bumping database version') self.upgrade_log(u'Bumping database version')
self.setDBVersion(20007) self.setDBVersion(20007)
return self.checkDBVersion() return self.checkDBVersion()
@ -1411,7 +1407,7 @@ class AddWatched(db.SchemaUpgrade):
self.connection.action('VACUUM') self.connection.action('VACUUM')
if not self.hasTable('tv_episodes_watched'): if not self.hasTable('tv_episodes_watched'):
upgrade_log(u'Adding table tv_episodes_watched') self.upgrade_log(u'Adding table tv_episodes_watched')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.connection.action( self.connection.action(
@ -1429,7 +1425,7 @@ class AddPrune(db.SchemaUpgrade):
def execute(self): def execute(self):
if not self.hasColumn('tv_shows', 'prune'): if not self.hasColumn('tv_shows', 'prune'):
upgrade_log('Adding prune to tv_shows') self.upgrade_log('Adding prune to tv_shows')
db.backup_database('sickbeard.db', self.checkDBVersion()) db.backup_database('sickbeard.db', self.checkDBVersion())
self.addColumn('tv_shows', 'prune', 'INT', 0) self.addColumn('tv_shows', 'prune', 'INT', 0)

18
sickbeard/db.py

@ -312,6 +312,9 @@ class DBConnection(object):
self.connection.close() self.connection.close()
self.connection = None self.connection = None
def upgrade_log(self, to_log, log_level=logger.MESSAGE):
logger.load_log('Upgrading %s' % self.filename, to_log, log_level)
def sanityCheckDatabase(connection, sanity_check): def sanityCheckDatabase(connection, sanity_check):
sanity_check(connection).check() sanity_check(connection).check()
@ -325,16 +328,12 @@ class DBSanityCheck(object):
pass pass
def load_msg(db_name, progess_msg):
logger.load_log('Upgrading %s' % db_name, progess_msg)
def upgradeDatabase(connection, schema): def upgradeDatabase(connection, schema):
logger.log(u'Checking database structure...', logger.MESSAGE) logger.log(u'Checking database structure...', logger.MESSAGE)
connection.is_upgrading = False connection.is_upgrading = False
_processUpgrade(connection, schema) _processUpgrade(connection, schema)
if connection.is_upgrading: if connection.is_upgrading:
load_msg(connection.filename, 'Finished') connection.upgrade_log('Finished')
def prettyName(class_name): def prettyName(class_name):
@ -355,7 +354,7 @@ def _processUpgrade(connection, upgradeClass):
logger.log(u'Checking %s database upgrade' % prettyName(upgradeClass.__name__), logger.DEBUG) logger.log(u'Checking %s database upgrade' % prettyName(upgradeClass.__name__), logger.DEBUG)
if not instance.test(): if not instance.test():
connection.is_upgrading = True connection.is_upgrading = True
load_msg(connection.filename, getattr(upgradeClass, 'pretty_name', None) or prettyName(upgradeClass.__name__)) connection.upgrade_log(getattr(upgradeClass, 'pretty_name', None) or prettyName(upgradeClass.__name__))
logger.log(u'Database upgrade required: %s' % prettyName(upgradeClass.__name__), logger.MESSAGE) logger.log(u'Database upgrade required: %s' % prettyName(upgradeClass.__name__), logger.MESSAGE)
try: try:
instance.execute() instance.execute()
@ -499,6 +498,9 @@ class SchemaUpgrade(object):
self.connection.action('VACUUM') self.connection.action('VACUUM')
self.incDBVersion() self.incDBVersion()
def upgrade_log(self, *args, **kwargs):
self.connection.upgrade_log(*args, **kwargs)
def MigrationCode(myDB): def MigrationCode(myDB):
schema = { schema = {
@ -580,7 +582,7 @@ def MigrationCode(myDB):
else: else:
load_msg('main db', 'Upgrading') myDB.upgrade_log('Upgrading')
while db_version < sickbeard.mainDB.MAX_DB_VERSION: while db_version < sickbeard.mainDB.MAX_DB_VERSION:
if None is schema[db_version]: # skip placeholders used when multi PRs are updating DB if None is schema[db_version]: # skip placeholders used when multi PRs are updating DB
db_version += 1 db_version += 1
@ -597,7 +599,7 @@ def MigrationCode(myDB):
logger.log_error_and_exit(u'Successfully restored database version: %s' % db_version) logger.log_error_and_exit(u'Successfully restored database version: %s' % db_version)
else: else:
logger.log_error_and_exit(u'Failed to restore database version: %s' % db_version) logger.log_error_and_exit(u'Failed to restore database version: %s' % db_version)
load_msg('main db', 'Finished') myDB.upgrade_log('Finished')
def backup_database(filename, version): def backup_database(filename, version):

Loading…
Cancel
Save