From f1ec38c84c55ff1d67c399da58accd594675d917 Mon Sep 17 00:00:00 2001 From: Nic Wolfe <nic@wolfeden.ca> Date: Sat, 24 Mar 2012 12:27:22 -0600 Subject: [PATCH] Fixed some bugs and enabled the config migration to convert the old config settings to a new custom naming string. --- sickbeard/__init__.py | 10 +++++----- sickbeard/config.py | 36 +++++++++++++++++++++++++++++++++-- sickbeard/databases/mainDB.py | 4 ++-- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index ebd1a9ba7..b6d0a4e1d 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -54,7 +54,7 @@ CFG = None CONFIG_FILE = None # this is the version of the config we EXPECT to find -CONFIG_VERSION = 0 +CONFIG_VERSION = 1 PROG_DIR = '.' MY_FULLNAME = None @@ -632,10 +632,6 @@ def initialize(consoleLogging=True): newznabProviderList = providers.getNewznabProviderList(newznabData) providerList = providers.makeProviderList() - # migrate the config if it needs it - migrator = ConfigMigrator(CFG) - migrator.migrate_config() - # start up all the threads logger.sb_log_instance.initLogging(consoleLogging=consoleLogging) @@ -648,6 +644,10 @@ def initialize(consoleLogging=True): # fix up any db problems db.sanityCheckDatabase(db.DBConnection(), mainDB.MainSanityCheck) + # migrate the config if it needs it + migrator = ConfigMigrator(CFG) + migrator.migrate_config() + currentSearchScheduler = scheduler.Scheduler(searchCurrent.CurrentSearcher(), cycleTime=datetime.timedelta(minutes=SEARCH_FREQUENCY), threadName="SEARCH", diff --git a/sickbeard/config.py b/sickbeard/config.py index 95ddf8991..3c24f9fe8 100644 --- a/sickbeard/config.py +++ b/sickbeard/config.py @@ -26,6 +26,7 @@ import re from sickbeard import helpers from sickbeard import logger from sickbeard import naming +from sickbeard import db import sickbeard @@ -246,6 +247,8 @@ def check_setting_str(config, cfg_name, item_name, def_val, log=True): class ConfigMigrator(): + migration_names = {1: 'Custom naming'} + def __init__(self, config_obj): """ Initializes a config migrator that can take the config from the version indicated in the config @@ -265,8 +268,13 @@ class ConfigMigrator(): while self.config_version < sickbeard.CONFIG_VERSION: next_version = self.config_version + 1 + if next_version in self.migration_names: + migration_name = ': ' + self.migrate_names[next_version] + else: + migration_name = '' + # do the migration, expect a method named _migrate_v<num> - logger.log(u"Migrating config up to version "+str(next_version)) + logger.log(u"Migrating config up to version "+str(next_version)+migration_name) getattr(self, '_migrate_v'+str(next_version))() self.config_version = next_version @@ -276,19 +284,43 @@ class ConfigMigrator(): """ sickbeard.NAMING_PATTERN = self._name_to_pattern() + logger.log("Based on your old settings I'm setting your new naming pattern to: "+sickbeard.NAMING_PATTERN) sickbeard.NAMING_CUSTOM_ABD = bool(check_setting_int(self.config_obj, 'General', 'naming_dates', 0)) if sickbeard.NAMING_CUSTOM_ABD: sickbeard.NAMING_ABD_PATTERN = self._name_to_pattern(True) + logger.log("Adding a custom air-by-date naming pattern to your config: "+sickbeard.NAMING_ABD_PATTERN) else: sickbeard.NAMING_ABD_PATTERN = naming.name_abd_presets[0] + sickbeard.NAMING_MULTI_EP = int(check_setting_int(self.config_obj, 'General', 'naming_multi_ep_type', 1)) + # see if any of their shows used season folders + myDB = db.DBConnection() + season_folder_shows = myDB.select("SELECT * FROM tv_shows WHERE flatten_folders = 0") # if any shows had season folders on then prepend season folder to the pattern + if season_folder_shows: + + old_season_format = check_setting_str(self.config_obj, 'General', 'season_folders_format', 'Season %02d') + + new_season_format = old_season_format % 9 + new_season_format = new_season_format.replace('09', '%0S') + new_season_format = new_season_format.replace('9', '%S') + logger.log(u"Changed season folder format from "+old_season_format+" to "+new_season_format+", prepending it to your naming config") - # flatten any shows that didn't have it on + sickbeard.NAMING_PATTERN = new_season_format + os.sep + sickbeard.NAMING_PATTERN + + # if no shows had it on then don't flatten any shows and don't put season folders in the config + else: + + logger.log(u"No shows were using season folders before so I'm disabling flattening on all shows") + + # don't flatten any shows at all + myDB.action("UPDATE tv_shows SET flatten_folders = 0") + + sickbeard.NAMING_FORCE_FOLDERS = naming.check_force_season_folders() def _name_to_pattern(self, abd=False): diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py index 4ce58461c..4a1a9e4e9 100644 --- a/sickbeard/databases/mainDB.py +++ b/sickbeard/databases/mainDB.py @@ -476,13 +476,13 @@ class RenameSeasonFolders(AddSizeAndSceneNameFields): def execute(self): + # rename the column self.connection.action("ALTER TABLE tv_shows RENAME TO tmp_tv_shows") - self.connection.action("CREATE TABLE tv_shows (show_id INTEGER PRIMARY KEY, location TEXT, show_name TEXT, tvdb_id NUMERIC, network TEXT, genre TEXT, runtime NUMERIC, quality NUMERIC, airs TEXT, status TEXT, flatten_folders NUMERIC, paused NUMERIC, startyear NUMERIC, tvr_id NUMERIC, tvr_name TEXT, air_by_date NUMERIC, lang TEXT)") - sql = "INSERT INTO tv_shows(show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, flatten_folders, paused, startyear, tvr_id, tvr_name, air_by_date, lang) SELECT show_id, location, show_name, tvdb_id, network, genre, runtime, quality, airs, status, seasonfolders, paused, startyear, tvr_id, tvr_name, air_by_date, lang FROM tmp_tv_shows" self.connection.action(sql) + # flip the values to be opposite of what they were before self.connection.action("UPDATE tv_shows SET flatten_folders = 2 WHERE flatten_folders = 1") self.connection.action("UPDATE tv_shows SET flatten_folders = 1 WHERE flatten_folders = 0") self.connection.action("UPDATE tv_shows SET flatten_folders = 0 WHERE flatten_folders = 2") -- GitLab