def start(self): self.PID = os.getpid() # set socket timeout socket.setdefaulttimeout(sickrage.srConfig.SOCKET_TIMEOUT) # init version updater self.VERSIONUPDATER = srVersionUpdater() # init updater and get current version self.VERSION = self.VERSIONUPDATER.updater.version # init services self.SCHEDULER = srScheduler() self.WEBSERVER = srWebServer() self.INDEXER_API = srIndexerApi # init caches self.NAMECACHE = srNameCache() # init queues self.SHOWUPDATER = srShowUpdater() self.SHOWQUEUE = srShowQueue() self.SEARCHQUEUE = srSearchQueue() # init searchers self.DAILYSEARCHER = srDailySearcher() self.BACKLOGSEARCHER = srBacklogSearcher() self.PROPERSEARCHER = srProperSearcher() self.TRAKTSEARCHER = srTraktSearcher() self.SUBTITLESEARCHER = srSubtitleSearcher() # init postprocessor self.AUTOPOSTPROCESSOR = srPostProcessor() # migrate old database file names to new ones if not os.path.exists(main_db.MainDB().filename) and os.path.exists("sickbeard.db"): helpers.moveFile("sickbeard.db", main_db.MainDB().filename) # initialize the main SB database main_db.MainDB().InitialSchema().upgrade() # initialize the cache database cache_db.CacheDB().InitialSchema().upgrade() # initialize the failed downloads database failed_db.FailedDB().InitialSchema().upgrade() # fix up any db problems main_db.MainDB().SanityCheck() # load data for shows from database self.load_shows() if sickrage.srConfig.DEFAULT_PAGE not in ('home', 'schedule', 'history', 'news', 'IRC'): sickrage.srConfig.DEFAULT_PAGE = 'home' if not makeDir(sickrage.srConfig.CACHE_DIR): sickrage.srLogger.error("!!! Creating local cache dir failed") sickrage.srConfig.CACHE_DIR = get_temp_dir() # Check if we need to perform a restore of the cache folder try: restore_dir = os.path.join(sickrage.DATA_DIR, 'restore') if os.path.exists(restore_dir) and os.path.exists(os.path.join(restore_dir, 'cache')): def restore_cache(src_dir, dst_dir): def path_leaf(path): head, tail = os.path.split(path) return tail or os.path.basename(head) try: if os.path.isdir(dst_dir): bak_filename = '{}-{}'.format(path_leaf(dst_dir), datetime.now().strftime('%Y%m%d_%H%M%S')) shutil.move(dst_dir, os.path.join(os.path.dirname(dst_dir), bak_filename)) shutil.move(src_dir, dst_dir) sickrage.srLogger.info("Restore: restoring cache successful") except Exception as E: sickrage.srLogger.error("Restore: restoring cache failed: {}".format(E.message)) restore_cache(os.path.join(restore_dir, 'cache'), sickrage.srConfig.CACHE_DIR) except Exception as e: sickrage.srLogger.error("Restore: restoring cache failed: {}".format(e.message)) finally: if os.path.exists(os.path.join(sickrage.DATA_DIR, 'restore')): try: removetree(os.path.join(sickrage.DATA_DIR, 'restore')) except Exception as e: sickrage.srLogger.error("Restore: Unable to remove the restore directory: {}".format(e.message)) for cleanupDir in ['mako', 'sessions', 'indexers']: try: removetree(os.path.join(sickrage.srConfig.CACHE_DIR, cleanupDir)) except Exception as e: sickrage.srLogger.warning( "Restore: Unable to remove the cache/{} directory: {1}".format(cleanupDir, e)) if sickrage.srConfig.WEB_PORT < 21 or sickrage.srConfig.WEB_PORT > 65535: sickrage.srConfig.WEB_PORT = 8081 if not sickrage.srConfig.WEB_COOKIE_SECRET: sickrage.srConfig.WEB_COOKIE_SECRET = generateCookieSecret() # attempt to help prevent users from breaking links by using a bad url if not sickrage.srConfig.ANON_REDIRECT.endswith('?'): sickrage.srConfig.ANON_REDIRECT = '' if not re.match(r'\d+\|[^|]+(?:\|[^|]+)*', sickrage.srConfig.ROOT_DIRS): sickrage.srConfig.ROOT_DIRS = '' sickrage.srConfig.NAMING_FORCE_FOLDERS = check_force_season_folders() if sickrage.srConfig.NZB_METHOD not in ('blackhole', 'sabnzbd', 'nzbget'): sickrage.srConfig.NZB_METHOD = 'blackhole' if not sickrage.srConfig.PROVIDER_ORDER: sickrage.srConfig.PROVIDER_ORDER = self.providersDict[GenericProvider.NZB].keys() + \ self.providersDict[GenericProvider.TORRENT].keys() if sickrage.srConfig.TORRENT_METHOD not in ( 'blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'): sickrage.srConfig.TORRENT_METHOD = 'blackhole' if sickrage.srConfig.PROPER_SEARCHER_INTERVAL not in ('15m', '45m', '90m', '4h', 'daily'): sickrage.srConfig.PROPER_SEARCHER_INTERVAL = 'daily' if sickrage.srConfig.AUTOPOSTPROCESSOR_FREQ < sickrage.srConfig.MIN_AUTOPOSTPROCESSOR_FREQ: sickrage.srConfig.AUTOPOSTPROCESSOR_FREQ = sickrage.srConfig.MIN_AUTOPOSTPROCESSOR_FREQ if sickrage.srConfig.NAMECACHE_FREQ < sickrage.srConfig.MIN_NAMECACHE_FREQ: sickrage.srConfig.NAMECACHE_FREQ = sickrage.srConfig.MIN_NAMECACHE_FREQ if sickrage.srConfig.DAILY_SEARCHER_FREQ < sickrage.srConfig.MIN_DAILY_SEARCHER_FREQ: sickrage.srConfig.DAILY_SEARCHER_FREQ = sickrage.srConfig.MIN_DAILY_SEARCHER_FREQ sickrage.srConfig.MIN_BACKLOG_SEARCHER_FREQ = get_backlog_cycle_time() if sickrage.srConfig.BACKLOG_SEARCHER_FREQ < sickrage.srConfig.MIN_BACKLOG_SEARCHER_FREQ: sickrage.srConfig.BACKLOG_SEARCHER_FREQ = sickrage.srConfig.MIN_BACKLOG_SEARCHER_FREQ if sickrage.srConfig.VERSION_UPDATER_FREQ < sickrage.srConfig.MIN_VERSION_UPDATER_FREQ: sickrage.srConfig.VERSION_UPDATER_FREQ = sickrage.srConfig.MIN_VERSION_UPDATER_FREQ if sickrage.srConfig.SHOWUPDATE_HOUR > 23: sickrage.srConfig.SHOWUPDATE_HOUR = 0 elif sickrage.srConfig.SHOWUPDATE_HOUR < 0: sickrage.srConfig.SHOWUPDATE_HOUR = 0 if sickrage.srConfig.SUBTITLE_SEARCHER_FREQ < sickrage.srConfig.MIN_SUBTITLE_SEARCHER_FREQ: sickrage.srConfig.SUBTITLE_SEARCHER_FREQ = sickrage.srConfig.MIN_SUBTITLE_SEARCHER_FREQ sickrage.srConfig.NEWS_LATEST = sickrage.srConfig.NEWS_LAST_READ if sickrage.srConfig.SUBTITLES_LANGUAGES[0] == '': sickrage.srConfig.SUBTITLES_LANGUAGES = [] sickrage.srConfig.TIME_PRESET = sickrage.srConfig.TIME_PRESET_W_SECONDS.replace(":%S", "") # initialize metadata_providers self.metadataProviderDict = get_metadata_generator_dict() for cur_metadata_tuple in [(sickrage.srConfig.METADATA_KODI, kodi), (sickrage.srConfig.METADATA_KODI_12PLUS, kodi_12plus), (sickrage.srConfig.METADATA_MEDIABROWSER, mediabrowser), (sickrage.srConfig.METADATA_PS3, ps3), (sickrage.srConfig.METADATA_WDTV, wdtv), (sickrage.srConfig.METADATA_TIVO, tivo), (sickrage.srConfig.METADATA_MEDE8ER, mede8er)]: (cur_metadata_config, cur_metadata_class) = cur_metadata_tuple tmp_provider = cur_metadata_class.metadata_class() tmp_provider.set_config(cur_metadata_config) self.metadataProviderDict[tmp_provider.name] = tmp_provider # add version checker job to scheduler self.SCHEDULER.add_job( self.VERSIONUPDATER.run, srIntervalTrigger( **{'hours': sickrage.srConfig.VERSION_UPDATER_FREQ, 'min': sickrage.srConfig.MIN_VERSION_UPDATER_FREQ}), name="VERSIONUPDATER", id="VERSIONUPDATER", replace_existing=True ) # add network timezones updater job to scheduler self.SCHEDULER.add_job( update_network_dict, srIntervalTrigger(**{'days': 1}), name="TZUPDATER", id="TZUPDATER", replace_existing=True ) # add namecache updater job to scheduler self.SCHEDULER.add_job( self.NAMECACHE.run, srIntervalTrigger(**{'minutes': sickrage.srConfig.NAMECACHE_FREQ, 'min': sickrage.srConfig.MIN_NAMECACHE_FREQ}), name="NAMECACHE", id="NAMECACHE", replace_existing=True ) # add show queue job to scheduler self.SCHEDULER.add_job( self.SHOWQUEUE.run, srIntervalTrigger(**{'seconds': 3}), name="SHOWQUEUE", id="SHOWQUEUE", replace_existing=True ) # add search queue job to scheduler self.SCHEDULER.add_job( self.SEARCHQUEUE.run, srIntervalTrigger(**{'seconds': 1}), name="SEARCHQUEUE", id="SEARCHQUEUE", replace_existing=True ) # add show updater job to scheduler self.SCHEDULER.add_job( self.SHOWUPDATER.run, srIntervalTrigger( **{'hours': 1, 'start_date': datetime.now().replace(hour=sickrage.srConfig.SHOWUPDATE_HOUR)}), name="SHOWUPDATER", id="SHOWUPDATER", replace_existing=True ) # add daily search job to scheduler self.SCHEDULER.add_job( self.DAILYSEARCHER.run, srIntervalTrigger( **{'minutes': sickrage.srConfig.DAILY_SEARCHER_FREQ, 'min': sickrage.srConfig.MIN_DAILY_SEARCHER_FREQ}), name="DAILYSEARCHER", id="DAILYSEARCHER", replace_existing=True ) # add backlog search job to scheduler self.SCHEDULER.add_job( self.BACKLOGSEARCHER.run, srIntervalTrigger( **{'minutes': sickrage.srConfig.BACKLOG_SEARCHER_FREQ, 'min': sickrage.srConfig.MIN_BACKLOG_SEARCHER_FREQ}), name="BACKLOG", id="BACKLOG", replace_existing=True ) # add auto-postprocessing job to scheduler job = self.SCHEDULER.add_job( self.AUTOPOSTPROCESSOR.run, srIntervalTrigger(**{'minutes': sickrage.srConfig.AUTOPOSTPROCESSOR_FREQ, 'min': sickrage.srConfig.MIN_AUTOPOSTPROCESSOR_FREQ}), name="POSTPROCESSOR", id="POSTPROCESSOR", replace_existing=True ) (job.pause, job.resume)[sickrage.srConfig.PROCESS_AUTOMATICALLY]() # add find proper job to scheduler job = self.SCHEDULER.add_job( self.PROPERSEARCHER.run, srIntervalTrigger(**{ 'minutes': {'15m': 15, '45m': 45, '90m': 90, '4h': 4 * 60, 'daily': 24 * 60}[ sickrage.srConfig.PROPER_SEARCHER_INTERVAL]}), name="PROPERSEARCHER", id="PROPERSEARCHER", replace_existing=True ) (job.pause, job.resume)[sickrage.srConfig.DOWNLOAD_PROPERS]() # add trakt.tv checker job to scheduler job = self.SCHEDULER.add_job( self.TRAKTSEARCHER.run, srIntervalTrigger(**{'hours': 1}), name="TRAKTSEARCHER", id="TRAKTSEARCHER", replace_existing=True, ) (job.pause, job.resume)[sickrage.srConfig.USE_TRAKT]() # add subtitles finder job to scheduler job = self.SCHEDULER.add_job( self.SUBTITLESEARCHER.run, srIntervalTrigger(**{'hours': sickrage.srConfig.SUBTITLE_SEARCHER_FREQ}), name="SUBTITLESEARCHER", id="SUBTITLESEARCHER", replace_existing=True ) (job.pause, job.resume)[sickrage.srConfig.USE_SUBTITLES]() # add scheduler callback self.SCHEDULER.start()
sickrage.srConfig.LOG_DIR = os.path.join(TESTDIR, 'Logs') createTestLogFolder() sickrage.srConfig.IGNORE_WORDS = 'german, french, core2hd, dutch, swedish, reenc, MrLss' sickrage.srConfig.QUALITY_DEFAULT = 4 # hdtv sickrage.srConfig.FLATTEN_FOLDERS_DEFAULT = 0 sickrage.srConfig.NAMING_PATTERN = '' sickrage.srConfig.NAMING_ABD_PATTERN = '' sickrage.srConfig.NAMING_SPORTS_PATTERN = '' sickrage.srConfig.NAMING_MULTI_EP = 1 sickrage.srConfig.PROVIDER_ORDER = ["sick_beard_index"] sickrage.srCore.newznabProviderList = NewznabProvider.getProviderList(NewznabProvider.getDefaultProviders()) sickrage.srCore.torrentRssProviderList = TorrentRssProvider.getProviderList(TorrentRssProvider.getDefaultProviders()) sickrage.srCore.metadataProviderDict = get_metadata_generator_dict() sickrage.srConfig.GUI_NAME = "slick" sickrage.srConfig.THEME_NAME = "dark" sickrage.srConfig.GUI_DIR = os.path.join(sickrage.PROG_DIR, 'core', 'webserver', 'gui', sickrage.srConfig.GUI_NAME) sickrage.srConfig.TV_DOWNLOAD_DIR = FILEDIR sickrage.srConfig.HTTPS_CERT = "server.crt" sickrage.srConfig.HTTPS_KEY = "server.key" sickrage.srConfig.WEB_USERNAME = "******" sickrage.srConfig.WEB_PASSWORD = "******" sickrage.srConfig.WEB_COOKIE_SECRET = "sickrage" sickrage.srConfig.WEB_ROOT = "" sickrage.srCore.WEBSERVER = None sickrage.srConfig.CPU_PRESET = "NORMAL" sickrage.srConfig.EXTRA_SCRIPTS = []