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