Merge pull request #810 from JackDandy/feature/AddDisableFullBacklog

Add search setting "Disable auto full backlog"
This commit is contained in:
JackDandy 2016-10-28 13:55:23 +01:00 committed by GitHub
commit 5839b958df
5 changed files with 53 additions and 25 deletions

View file

@ -187,6 +187,7 @@
* Add Plex notifications secure connect where available (PMS 1.1.4.2757 and newer with username and password)
* Add if all torrent caches fail, save magnets from RARBG and TPB as files for clients (or plugins) that now support it
* Add advice to logs if all caches fail to switch to direct client connect instead of the basic blackhole method
* Add search setting "Disable auto full backlog"
[develop changelog]
* Change send nzb data to NZBGet for Anizb instead of url

View file

@ -52,7 +52,7 @@
<span class="component-title">Download propers</span>
<span class="component-desc">
<input type="checkbox" name="download_propers" id="download_propers" class="enabler"<%= html_checked if sickbeard.DOWNLOAD_PROPERS == True else '' %>>
<p>replace original download with "Proper" or "Repack" if nuked</p>
<p>replace original download with 'Proper' or 'Repack' if nuked</p>
</span>
</label>
</div>
@ -93,6 +93,24 @@
</div>
<div class="field-pair">
<label for="backlog_nofull">
<span class="component-title">Disable auto full backlog</span>
<span class="component-desc">
<input type="checkbox" name="backlog_nofull" id="backlog_nofull" class="enabler viewIf"<%= html_checked if sickbeard.BACKLOG_NOFULL == True else '' %>>
<p>backlog search manually by setting episodes 'Wanted' or via 'Backlog overview'</p>
</span>
</label>
</div>
<div class="field-pair" id="content_backlog_nofull">
<label>
<span class="component-title"><em class="grey-text">Backlog search spread</em></span>
<span class="component-desc">
<p><em class="grey-text">to access this setting, unselect "<span class="boldest">Disable auto full backlog</span>" search above</em></p>
</span>
</label>
</div>
<div class="field-pair hide_if_backlog_nofull">
<label>
<span class="component-title">Backlog search spread</span>
<span class="component-desc">
@ -116,7 +134,7 @@
<label>
<span class="component-title">Ignore result with any word</span>
<span class="component-desc">
<input type="text" name="ignore_words" value="$sickbeard.IGNORE_WORDS" class="form-control input-sm input350"><p>(opt: start "regex:")</p>
<input type="text" name="ignore_words" value="$sickbeard.IGNORE_WORDS" class="form-control input-sm input350"><p>(opt: start 'regex:')</p>
<p class="clear-left note">ignore search result <em class="grey-text">if its title contains any</em> of these comma seperated words</p>
</span>
<span class="component-title">Shows with custom ignores</span>
@ -138,7 +156,7 @@
<label>
<span class="component-title">Require all these words</span>
<span class="component-desc">
<input type="text" name="require_words" value="$sickbeard.REQUIRE_WORDS" class="form-control input-sm input350"><p>(opt: start "regex:")</p>
<input type="text" name="require_words" value="$sickbeard.REQUIRE_WORDS" class="form-control input-sm input350"><p>(opt: start 'regex:')</p>
<p class="clear-left note">ignore search result <em class="grey-text">unless its title contains all</em> of these comma seperated words</p>
</span>
<span class="component-title">Shows with custom requires</span>

View file

@ -210,6 +210,7 @@ UPDATE_FREQUENCY = None
RECENTSEARCH_STARTUP = False
BACKLOG_FREQUENCY = None
BACKLOG_STARTUP = False
BACKLOG_NOFULL = False
DEFAULT_AUTOPOSTPROCESSER_FREQUENCY = 10
DEFAULT_RECENTSEARCH_FREQUENCY = 40
@ -514,7 +515,7 @@ def initialize(consoleLogging=True):
USE_PLEX, PLEX_NOTIFY_ONSNATCH, PLEX_NOTIFY_ONDOWNLOAD, PLEX_NOTIFY_ONSUBTITLEDOWNLOAD, \
PLEX_UPDATE_LIBRARY, PLEX_SERVER_HOST, PLEX_HOST, PLEX_USERNAME, PLEX_PASSWORD, \
USE_TRAKT, TRAKT_CONNECTED_ACCOUNT, TRAKT_ACCOUNTS, TRAKT_MRU, TRAKT_VERIFY, TRAKT_REMOVE_WATCHLIST, TRAKT_TIMEOUT, TRAKT_USE_WATCHLIST, TRAKT_METHOD_ADD, TRAKT_START_PAUSED, traktCheckerScheduler, TRAKT_SYNC, TRAKT_DEFAULT_INDEXER, TRAKT_REMOVE_SERIESLIST, TRAKT_UPDATE_COLLECTION, \
BACKLOG_FREQUENCY, DEFAULT_BACKLOG_FREQUENCY, MIN_BACKLOG_FREQUENCY, MAX_BACKLOG_FREQUENCY, BACKLOG_STARTUP, SKIP_REMOVED_FILES, \
BACKLOG_FREQUENCY, DEFAULT_BACKLOG_FREQUENCY, MIN_BACKLOG_FREQUENCY, MAX_BACKLOG_FREQUENCY, BACKLOG_STARTUP, BACKLOG_NOFULL, SKIP_REMOVED_FILES, \
showUpdateScheduler, __INITIALIZED__, LAUNCH_BROWSER, TRASH_REMOVE_SHOW, TRASH_ROTATE_LOGS, HOME_SEARCH_FOCUS, SORT_ARTICLE, showList, loadingShowList, UPDATE_SHOWS_ON_START, SHOW_UPDATE_HOUR, \
NEWZNAB_DATA, INDEXER_DEFAULT, INDEXER_TIMEOUT, USENET_RETENTION, TORRENT_DIR, \
QUALITY_DEFAULT, FLATTEN_FOLDERS_DEFAULT, SUBTITLES_DEFAULT, STATUS_DEFAULT, WANTED_BEGIN_DEFAULT, WANTED_LATEST_DEFAULT, RECENTSEARCH_STARTUP, \
@ -740,6 +741,7 @@ def initialize(consoleLogging=True):
RECENTSEARCH_STARTUP = bool(check_setting_int(CFG, 'General', 'recentsearch_startup', 0))
BACKLOG_STARTUP = bool(check_setting_int(CFG, 'General', 'backlog_startup', 0))
BACKLOG_NOFULL = bool(check_setting_int(CFG, 'General', 'backlog_nofull', 0))
SKIP_REMOVED_FILES = check_setting_int(CFG, 'General', 'skip_removed_files', 0)
USENET_RETENTION = check_setting_int(CFG, 'General', 'usenet_retention', 500)
@ -1498,6 +1500,7 @@ def save_config():
new_config['General']['allow_high_priority'] = int(ALLOW_HIGH_PRIORITY)
new_config['General']['recentsearch_startup'] = int(RECENTSEARCH_STARTUP)
new_config['General']['backlog_startup'] = int(BACKLOG_STARTUP)
new_config['General']['backlog_nofull'] = int(BACKLOG_NOFULL)
new_config['General']['skip_removed_files'] = int(SKIP_REMOVED_FILES)
new_config['General']['quality_default'] = int(QUALITY_DEFAULT)
new_config['General']['status_default'] = int(STATUS_DEFAULT)

View file

@ -136,11 +136,11 @@ class BacklogSearcher:
if i % parts == 0:
p += 1
cl.append(['INSERT INTO backlogparts (part, indexerid, indexer) VALUES (?,?,?)',
[p, s['indexerid'], s['indexer']]])
[p, s['indexerid'], s['indexer']]])
if 0 < len(cl):
my_db.mass_action(cl)
except:
except (StandardError, Exception):
pass
def search_backlog(self, which_shows=None, force_type=NORMAL_BACKLOG, force=False):
@ -157,13 +157,12 @@ class BacklogSearcher:
standard_backlog = True
now = datetime.datetime.now()
torrent_only = continued_backlog = False
any_torrent_enabled = continued_backlog = False
if not force and standard_backlog and (datetime.datetime.now() - datetime.datetime.fromtimestamp(
self._get_last_runtime())) < datetime.timedelta(hours=23):
if [x for x in sickbeard.providers.sortedProviderList() if x.is_active() and x.enable_backlog and
x.providerType == GenericProvider.TORRENT]:
torrent_only = True
else:
any_torrent_enabled = any([x for x in sickbeard.providers.sortedProviderList() if x.is_active()
and x.enable_backlog and x.providerType == GenericProvider.TORRENT])
if not any_torrent_enabled:
logger.log('Last scheduled Backlog run was within the last day, skipping this run.', logger.DEBUG)
return
@ -176,14 +175,17 @@ class BacklogSearcher:
limited_from_date = datetime.date.today() - datetime.timedelta(days=sickbeard.BACKLOG_DAYS)
limited_backlog = False
if not which_shows and torrent_only:
if standard_backlog and (any_torrent_enabled or sickbeard.BACKLOG_NOFULL):
logger.log(u'Running limited backlog for episodes missed during the last %s day(s)' %
str(sickbeard.BACKLOG_DAYS))
from_date = limited_from_date
limited_backlog = True
runparts = []
if standard_backlog and not torrent_only:
if standard_backlog and not any_torrent_enabled and sickbeard.BACKLOG_NOFULL:
logger.log(u'Skipping automated full backlog search because it is disabled in search settings')
if standard_backlog and not any_torrent_enabled and not sickbeard.BACKLOG_NOFULL:
my_db = db.DBConnection('cache.db')
sql_result = my_db.select('SELECT * FROM backlogparts WHERE part in (SELECT MIN(part) FROM backlogparts)')
if sql_result:
@ -198,9 +200,7 @@ class BacklogSearcher:
continued_backlog = True
my_db.action('DELETE FROM backlogparts WHERE part = ?', [part_nr])
forced = False
if not which_shows and force_type != NORMAL_BACKLOG:
forced = True
forced = standard_backlog and force_type != NORMAL_BACKLOG
wanted_list = []
for curShow in show_list:
@ -211,7 +211,7 @@ class BacklogSearcher:
wanted_list.append(w)
parts = []
if standard_backlog and not torrent_only and not continued_backlog:
if standard_backlog and not any_torrent_enabled and not continued_backlog and not sickbeard.BACKLOG_NOFULL:
fullbacklogparts = sum([len(w) for w in wanted_list if w]) // sickbeard.BACKLOG_FREQUENCY
h_part = []
counter = 0
@ -238,7 +238,7 @@ class BacklogSearcher:
wanted_list = [w for w in wanted_list if w and in_showlist(w.itervalues().next()[0].show, runparts)]
limited_wanted_list = []
if standard_backlog and not torrent_only and runparts:
if standard_backlog and not any_torrent_enabled and runparts:
for curShow in sickbeard.showList:
if not curShow.paused and not in_showlist(curShow, runparts):
w = wanted_episodes(curShow, limited_from_date, make_dict=True,
@ -246,11 +246,11 @@ class BacklogSearcher:
if w:
limited_wanted_list.append(w)
self.add_backlog_item(wanted_list, standard_backlog, limited_backlog, forced, torrent_only)
if standard_backlog and not torrent_only and limited_wanted_list:
self.add_backlog_item(limited_wanted_list, standard_backlog, True, forced, torrent_only)
self.add_backlog_item(wanted_list, standard_backlog, limited_backlog, forced, any_torrent_enabled)
if standard_backlog and not any_torrent_enabled and limited_wanted_list:
self.add_backlog_item(limited_wanted_list, standard_backlog, True, forced, any_torrent_enabled)
if standard_backlog and not torrent_only and not continued_backlog:
if standard_backlog and not sickbeard.BACKLOG_NOFULL and not any_torrent_enabled and not continued_backlog:
cl = ([], [['DELETE FROM backlogparts']])[len(parts) > 1]
for i, l in enumerate(parts):
if 0 == i:
@ -264,11 +264,11 @@ class BacklogSearcher:
# don't consider this an actual backlog search if we only did recent eps
# or if we only did certain shows
if from_date == datetime.date.fromordinal(1) and not which_shows:
if from_date == datetime.date.fromordinal(1) and standard_backlog:
self._set_last_backlog(cur_date)
self._get_last_backlog()
if standard_backlog and not torrent_only:
if standard_backlog and not any_torrent_enabled:
self._set_last_runtime(now)
self.amActive = False

View file

@ -4483,7 +4483,8 @@ class ConfigSearch(Config):
download_propers=None, check_propers_interval=None, allow_high_priority=None,
torrent_dir=None, torrent_username=None, torrent_password=None, torrent_host=None,
torrent_label=None, torrent_path=None, torrent_verify_cert=None,
torrent_seed_time=None, torrent_paused=None, torrent_high_bandwidth=None, ignore_words=None, require_words=None):
torrent_seed_time=None, torrent_paused=None, torrent_high_bandwidth=None, ignore_words=None, require_words=None,
backlog_nofull=None):
results = []
@ -4500,6 +4501,11 @@ class ConfigSearch(Config):
sickbeard.search_backlog.BacklogSearcher.change_backlog_parts(old_backlog_frequency, sickbeard.BACKLOG_FREQUENCY)
sickbeard.BACKLOG_DAYS = config.to_int(backlog_days, default=7)
sickbeard.BACKLOG_NOFULL = bool(config.checkbox_to_value(backlog_nofull))
if sickbeard.BACKLOG_NOFULL:
my_db = db.DBConnection('cache.db')
my_db.action('DELETE FROM backlogparts')
sickbeard.USE_NZBS = config.checkbox_to_value(use_nzbs)
sickbeard.USE_TORRENTS = config.checkbox_to_value(use_torrents)