diff --git a/gui/slick/interfaces/default/config_providers.tmpl b/gui/slick/interfaces/default/config_providers.tmpl index e0c361f4..bf0389ce 100644 --- a/gui/slick/interfaces/default/config_providers.tmpl +++ b/gui/slick/interfaces/default/config_providers.tmpl @@ -240,6 +240,17 @@ #end if + #if $hasattr($cur_newznab_provider, 'enable_scheduled_backlog') and $cur_newznab_provider.supports_backlog: +
+ +
+ #end if #if $hasattr($cur_newznab_provider, 'search_mode') and $cur_newznab_provider.supports_backlog:
Episode search mode @@ -319,6 +330,17 @@
#end if + #if $hasattr($cur_nzb_provider, 'enable_scheduled_backlog') and $cur_nzb_provider.supports_backlog: +
+ +
+ #end if #if $hasattr($cur_nzb_provider, 'search_mode') and $cur_nzb_provider.supports_backlog:
Episode search mode @@ -575,6 +597,17 @@ name = '' if not client else get_client_instance(sickbeard.TORRENT_METHOD)().nam
#end if + #if $hasattr($cur_torrent_provider, 'enable_scheduled_backlog') and $cur_torrent_provider.supports_backlog: +
+ +
+ #end if #if $hasattr($cur_torrent_provider, 'search_mode') and $cur_torrent_provider.supports_backlog:
Episode search mode diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 3b7abbd9..be77c187 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -1145,6 +1145,8 @@ def initialize(console_logging=True): not getattr(torrent_prov, 'supports_backlog') if hasattr(torrent_prov, 'enable_backlog'): torrent_prov.enable_backlog = bool(check_setting_int(CFG, prov_id_uc, prov_id + '_enable_backlog', 1)) + if hasattr(torrent_prov, 'enable_scheduled_backlog'): + torrent_prov.enable_scheduled_backlog = bool(check_setting_int(CFG, prov_id_uc, prov_id + '_enable_scheduled_backlog', 1)) if hasattr(torrent_prov, 'search_mode'): torrent_prov.search_mode = check_setting_str(CFG, prov_id_uc, prov_id + '_search_mode', 'eponly') if hasattr(torrent_prov, 'search_fallback'): @@ -1172,6 +1174,8 @@ def initialize(console_logging=True): not getattr(nzb_prov, 'supports_backlog') if hasattr(nzb_prov, 'enable_backlog'): nzb_prov.enable_backlog = bool(check_setting_int(CFG, prov_id_uc, prov_id + '_enable_backlog', 1)) + if hasattr(nzb_prov, 'enable_scheduled_backlog'): + nzb_prov.enable_scheduled_backlog = bool(check_setting_int(CFG, prov_id_uc, prov_id + '_enable_scheduled_backlog', 1)) if not os.path.isfile(CONFIG_FILE): logger.log(u'Unable to find \'%s\', all settings will be default!' % CONFIG_FILE, logger.DEBUG) @@ -1562,7 +1566,7 @@ def save_config(): ('api_key', None), ('passkey', None), ('digest', None), ('hash', None), ('username', ''), ('uid', ''), ('minseed', 1), ('minleech', 1), ('confirmed', 1), ('freeleech', 1), ('reject_m2ts', 1), ('enable_recentsearch', 1), ('enable_backlog', 1), ('search_mode', None), ('search_fallback', 1), - ('seed_time', None)] if hasattr(src, k)]: + ('seed_time', None), ('enable_scheduled_backlog', 1)] if hasattr(src, k)]: new_config[src_id_uc][setting] = value if hasattr(src, '_seed_ratio'): @@ -1579,7 +1583,8 @@ def save_config(): for attr in [x for x in ['api_key', 'username', 'search_mode'] if hasattr(src, x)]: new_config[src_id_uc]['%s_%s' % (src_id, attr)] = getattr(src, attr) - for attr in [x for x in ['enable_recentsearch', 'enable_backlog', 'search_fallback'] if hasattr(src, x)]: + for attr in [x for x in ['enable_recentsearch', 'enable_backlog', 'search_fallback', + 'enable_scheduled_backlog'] if hasattr(src, x)]: new_config[src_id_uc]['%s_%s' % (src_id, attr)] = helpers.tryInt(getattr(src, attr, None)) new_config['SABnzbd'] = {} diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index 870b04be..1b33b3b7 100755 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -144,6 +144,7 @@ def getNewznabProviderList(data): providerDict[curDefault.name].search_fallback = curDefault.search_fallback providerDict[curDefault.name].enable_recentsearch = curDefault.enable_recentsearch providerDict[curDefault.name].enable_backlog = curDefault.enable_backlog + providerDict[curDefault.name].enable_scheduled_backlog = curDefault.enable_scheduled_backlog return filter(lambda x: x, providerList) @@ -156,10 +157,14 @@ def makeNewznabProvider(configString): search_fallback = 0 enable_recentsearch = 0 enable_backlog = 0 + enable_scheduled_backlog = 1 try: values = configString.split('|') - if len(values) == 9: + if len(values) == 10: + name, url, key, cat_ids, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog, \ + enable_scheduled_backlog = values + elif len(values) == 9: name, url, key, cat_ids, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog = values else: name = values[0] @@ -175,7 +180,7 @@ def makeNewznabProvider(configString): newProvider = newznab.NewznabProvider(name, url, key=key, cat_ids=cat_ids, search_mode=search_mode, search_fallback=search_fallback, enable_recentsearch=enable_recentsearch, - enable_backlog=enable_backlog) + enable_backlog=enable_backlog, enable_scheduled_backlog=enable_scheduled_backlog) newProvider.enabled = enabled == '1' return newProvider @@ -204,10 +209,14 @@ def makeTorrentRssProvider(configString): search_fallback = 0 enable_recentsearch = 0 enable_backlog = 0 + enable_scheduled_backlog = 1 try: values = configString.split('|') - if len(values) == 8: + if len(values) == 9: + name, url, cookies, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog, \ + enable_scheduled_backlog = values + elif len(values) == 8: name, url, cookies, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog = values else: name = values[0] @@ -224,7 +233,7 @@ def makeTorrentRssProvider(configString): return newProvider = torrentRss.TorrentRssProvider(name, url, cookies, search_mode, search_fallback, enable_recentsearch, - enable_backlog) + enable_backlog, enable_scheduled_backlog) newProvider.enabled = enabled == '1' return newProvider diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index ac087f31..43cece65 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -70,6 +70,7 @@ class GenericProvider: self.enabled = False self.enable_recentsearch = False self.enable_backlog = False + self.enable_scheduled_backlog = True self.categories = None self.cache = tvcache.TVCache(self) diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py index e7265454..f50dc5a4 100755 --- a/sickbeard/providers/newznab.py +++ b/sickbeard/providers/newznab.py @@ -34,6 +34,7 @@ from sickbeard.indexers.indexer_config import * from io import BytesIO from lib.dateutil import parser from sickbeard.network_timezones import sb_timezone +from sickbeard.helpers import tryInt try: from lxml import etree @@ -90,7 +91,7 @@ class NewznabConstants: class NewznabProvider(generic.NZBProvider): def __init__(self, name, url, key='', cat_ids=None, search_mode=None, - search_fallback=False, enable_recentsearch=False, enable_backlog=False): + search_fallback=False, enable_recentsearch=False, enable_backlog=False, enable_scheduled_backlog=False): generic.NZBProvider.__init__(self, name, True, False) self.url = url @@ -100,7 +101,8 @@ class NewznabProvider(generic.NZBProvider): self.search_mode = search_mode or 'eponly' self.search_fallback = search_fallback self.enable_recentsearch = enable_recentsearch - self.enable_backlog = enable_backlog + self.enable_backlog = bool(tryInt(enable_backlog)) + self.enable_scheduled_backlog = bool(tryInt(enable_scheduled_backlog)) self.needs_auth = '0' != self.key.strip() # '0' in the key setting indicates that api_key is not needed self.default = False self._caps = {} @@ -295,9 +297,10 @@ class NewznabProvider(generic.NZBProvider): return True def config_str(self): - return '%s|%s|%s|%s|%i|%s|%i|%i|%i' \ + return '%s|%s|%s|%s|%i|%s|%i|%i|%i|%i' \ % (self.name or '', self.url or '', self.maybe_apikey() or '', self.cat_ids or '', self.enabled, - self.search_mode or '', self.search_fallback, self.enable_recentsearch, self.enable_backlog) + self.search_mode or '', self.search_fallback, self.enable_recentsearch, self.enable_backlog, + self.enable_scheduled_backlog) def _season_strings(self, ep_obj): diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py index 8d3fea3b..50a9d864 100644 --- a/sickbeard/providers/rsstorrent.py +++ b/sickbeard/providers/rsstorrent.py @@ -28,8 +28,9 @@ from lib.bencode import bdecode class TorrentRssProvider(generic.TorrentProvider): def __init__(self, name, url, cookies='', search_mode='eponly', search_fallback=False, - enable_recentsearch=False, enable_backlog=False): + enable_recentsearch=False, enable_backlog=False, enable_scheduled_backlog=False): self.enable_backlog = bool(tryInt(enable_backlog)) + self.enable_scheduled_backlog = bool(tryInt(enable_scheduled_backlog)) generic.TorrentProvider.__init__(self, name, supports_backlog=self.enable_backlog, cache_update_freq=15) self.url = url.rstrip('/') @@ -48,9 +49,10 @@ class TorrentRssProvider(generic.TorrentProvider): def config_str(self): - return '%s|%s|%s|%d|%s|%d|%d|%d' % ( + return '%s|%s|%s|%d|%s|%d|%d|%d|%d' % ( self.name or '', self.url or '', self.cookies or '', self.enabled, - self.search_mode or '', self.search_fallback, self.enable_recentsearch, self.enable_backlog) + self.search_mode or '', self.search_fallback, self.enable_recentsearch, self.enable_backlog, + self.enable_scheduled_backlog) def _title_and_url(self, item): diff --git a/sickbeard/search.py b/sickbeard/search.py index 1dbbd566..bf7a7e65 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -465,7 +465,7 @@ def search_for_needed_episodes(episodes): return found_results.values() -def search_providers(show, episodes, manual_search=False, torrent_only=False, try_other_searches=False): +def search_providers(show, episodes, manual_search=False, torrent_only=False, try_other_searches=False, scheduled=False): found_results = {} final_results = [] @@ -474,7 +474,8 @@ def search_providers(show, episodes, manual_search=False, torrent_only=False, tr orig_thread_name = threading.currentThread().name provider_list = [x for x in sickbeard.providers.sortedProviderList() if x.is_active() and x.enable_backlog and - (not torrent_only or x.providerType == GenericProvider.TORRENT)] + (not torrent_only or x.providerType == GenericProvider.TORRENT) and + (not scheduled or x.enable_scheduled_backlog)] for cur_provider in provider_list: if cur_provider.anime_only and not show.is_anime: logger.log(u'%s is not an anime, skipping' % show.name, logger.DEBUG) diff --git a/sickbeard/search_queue.py b/sickbeard/search_queue.py index 7f389ce0..78de66b3 100644 --- a/sickbeard/search_queue.py +++ b/sickbeard/search_queue.py @@ -429,7 +429,8 @@ class BacklogQueueItem(generic_queue.QueueItem): logger.log(u'Beginning backlog search for: [%s]' % self.show.name) search_result = search.search_providers( self.show, self.segment, False, - try_other_searches=(not self.standard_backlog or not self.limited_backlog)) + try_other_searches=(not self.standard_backlog or not self.limited_backlog), + scheduled=self.standard_backlog) if search_result: for result in search_result: diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index c4496bd2..00984315 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -5247,7 +5247,7 @@ class ConfigProviders(Config): if cur_id + '_' + attr in kwargs: setattr(nzb_src, attr, str(kwargs.get(cur_id + '_' + attr)).strip()) - for attr in ['search_fallback', 'enable_recentsearch', 'enable_backlog']: + for attr in ['search_fallback', 'enable_recentsearch', 'enable_backlog', 'enable_scheduled_backlog']: setattr(nzb_src, attr, config.checkbox_to_value(kwargs.get(cur_id + '_' + attr))) else: @@ -5350,7 +5350,7 @@ class ConfigProviders(Config): setattr(torrent_src, attr, config.to_int(str(kwargs.get(src_id_prefix + attr)).strip())) for attr in [x for x in ['confirmed', 'freeleech', 'reject_m2ts', 'enable_recentsearch', - 'enable_backlog', 'search_fallback'] + 'enable_backlog', 'search_fallback', 'enable_scheduled_backlog'] if hasattr(torrent_src, x) and src_id_prefix + attr in kwargs]: setattr(torrent_src, attr, config.checkbox_to_value(kwargs.get(src_id_prefix + attr))) @@ -5392,7 +5392,7 @@ class ConfigProviders(Config): setattr(nzb_src, attr, config.checkbox_to_value(kwargs.get(src_id_prefix + attr)) or not getattr(nzb_src, 'supports_backlog', True)) - for attr in [x for x in ['search_fallback', 'enable_backlog'] if hasattr(nzb_src, x)]: + for attr in [x for x in ['search_fallback', 'enable_backlog', 'enable_scheduled_backlog'] if hasattr(nzb_src, x)]: setattr(nzb_src, attr, config.checkbox_to_value(kwargs.get(src_id_prefix + attr))) sickbeard.NEWZNAB_DATA = '!!!'.join([x.config_str() for x in sickbeard.newznabProviderList])