From 9c30ac62d0995cd1271265e5818ff8353a118042 Mon Sep 17 00:00:00 2001 From: Prinz23 Date: Fri, 3 Apr 2020 20:41:33 +0200 Subject: [PATCH 1/2] Fix use release group for Propers check from history if status is snatched. --- sickbeard/properFinder.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py index f8280fe..81b15ea 100644 --- a/sickbeard/properFinder.py +++ b/sickbeard/properFinder.py @@ -229,6 +229,8 @@ def _get_proper_list(aired_since_shows, recent_shows, recent_anime, proper_dict= :rtype: List[sickbeard.classes.Proper] """ propers = {} + # make sure the episode has been downloaded before + history_limit = datetime.datetime.today() - datetime.timedelta(days=30) my_db = db.DBConnection() # for each provider get a list of arbitrary Propers @@ -336,7 +338,25 @@ def _get_proper_list(aired_since_shows, recent_shows, recent_anime, proper_dict= cur_proper.is_repack, cur_proper.properlevel = Quality.get_proper_level( parse_result.extra_info_no_name(), parse_result.version, parse_result.is_anime, check_is_repack=True) cur_proper.proper_level = cur_proper.properlevel # local non global value - old_release_group = sql_result[0]['release_group'] + if old_status in SNATCHED_ANY: + old_release_group = '' + # noinspection SqlResolve + history_results = my_db.select( + 'SELECT resource FROM history' + ' WHERE indexer = ? AND showid = ?' + ' AND season = ? AND episode = ? AND quality = ? AND date >= ?' + ' AND (%s) ORDER BY date DESC LIMIT 1' % ' OR '.join( + ['action = "%d%02d"' % (old_quality, x) for x in SNATCHED_ANY]), + [cur_proper.tvid, cur_proper.prodid, + cur_proper.season, cur_proper.episode, cur_proper.quality, + history_limit.strftime(history.dateFormat)]) + if len(history_results): + try: + old_release_group = np.parse(history_results[0]['resource']).release_group + except (BaseException, Exception): + pass + else: + old_release_group = sql_result[0]['release_group'] try: same_release_group = parse_result.release_group.lower() == old_release_group.lower() except (BaseException, Exception): @@ -393,8 +413,6 @@ def _get_proper_list(aired_since_shows, recent_shows, recent_anime, proper_dict= else: found_msg = 'Found Proper [%s]' % cur_proper.name - # make sure the episode has been downloaded before - history_limit = datetime.datetime.today() - datetime.timedelta(days=30) # noinspection SqlResolve history_results = my_db.select( 'SELECT resource FROM history' From a1200bdbada464f456c4c0c57036b0829954741d Mon Sep 17 00:00:00 2001 From: JackDandy Date: Sat, 4 Apr 2020 00:17:39 +0100 Subject: [PATCH 2/2] Change add provider filter fallbacks into Propers search flow. --- CHANGES.md | 8 +++++++- sickbeard/properFinder.py | 10 +++++++--- sickbeard/search.py | 10 +++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 67852a2..bb2dcc8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,10 @@ -### 0.21.23 (2020-03-31 10:00:00 UTC) +### 0.21.24 (2020-04-04 00:30:00 UTC) + +* Fix use release group for Propers check from history if status is snatched +* Change add provider filter fallbacks into Propers search flow + + +### 0.21.23 (2020-03-31 10:00:00 UTC) * Update UnRar for Windows 5.80 to 5.90 x64 * Fix viewing Manage/Bulk Change" page skews "Added last..." list diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py index 81b15ea..50ad321 100644 --- a/sickbeard/properFinder.py +++ b/sickbeard/properFinder.py @@ -507,8 +507,12 @@ def _download_propers(proper_list): # scene release checking scene_only = getattr(cur_proper.provider, 'scene_only', False) + non_scene_fallback = getattr(cur_proper.provider, 'scene_loose', False) \ + or getattr(cur_proper.provider, 'scene_loose_active', False) scene_rej_nuked = getattr(cur_proper.provider, 'scene_rej_nuked', False) - if any([scene_only, scene_rej_nuked]) and not cur_proper.parsed_show_obj.is_anime: + scene_nuked_active = getattr(cur_proper.provider, 'scene_nuked_active', False) + if any([scene_only, non_scene_fallback, scene_rej_nuked, scene_nuked_active]) \ + and not cur_proper.parsed_show_obj.is_anime: scene_or_contain = getattr(cur_proper.provider, 'scene_or_contain', '') scene_contains = False if scene_only and scene_or_contain: @@ -523,14 +527,14 @@ def _download_propers(proper_list): reject, url = search.can_reject(cur_proper.name) if reject: if isinstance(reject, string_types): - if scene_rej_nuked: + if scene_rej_nuked and not scene_nuked_active: logger.log('Rejecting nuked release. Nuke reason [%s] source [%s]' % (reject, url), logger.DEBUG) else: logger.log('Considering nuked release. Nuke reason [%s] source [%s]' % (reject, url), logger.DEBUG) reject = False - elif scene_contains: + elif scene_contains or non_scene_fallback: reject = False else: logger.log('Rejecting as not scene release listed at any [%s]' % url, logger.DEBUG) diff --git a/sickbeard/search.py b/sickbeard/search.py index f4957c3..35a5b9f 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -249,15 +249,15 @@ def pick_best_result( # find the best result for the current episode best_result = None best_fallback_result = None - scene_only = scene_or_contain = scene_loose = scene_loose_active = scene_rej_nuked = scene_nuked_active = False + scene_only = scene_or_contain = non_scene_fallback = scene_rej_nuked = scene_nuked_active = False if filter_rls: try: provider = getattr(results[0], 'provider', None) scene_only = getattr(provider, 'scene_only', False) scene_or_contain = getattr(provider, 'scene_or_contain', '') recent_task = 'RECENT' in filter_rls - scene_loose = getattr(provider, 'scene_loose', False) and recent_task - scene_loose_active = getattr(provider, 'scene_loose_active', False) and not recent_task + non_scene_fallback = (getattr(provider, 'scene_loose', False) and recent_task) \ + or (getattr(provider, 'scene_loose_active', False) and not recent_task) scene_rej_nuked = getattr(provider, 'scene_rej_nuked', False) scene_nuked_active = getattr(provider, 'scene_nuked_active', False) and not recent_task except (BaseException, Exception): @@ -283,7 +283,7 @@ def pick_best_result( logger.log(u'Rejecting previously failed [%s]' % cur_result.name) continue - if filter_rls and any([scene_only, scene_loose, scene_loose_active, scene_rej_nuked, scene_nuked_active]): + if filter_rls and any([scene_only, non_scene_fallback, scene_rej_nuked, scene_nuked_active]): if show_obj.is_anime: addendum = u'anime (skipping scene/nuke filter) ' else: @@ -310,7 +310,7 @@ def pick_best_result( logger.log(u'Considering nuked release. Nuke reason [%s] source [%s]' % (reject, url), logger.DEBUG) reject = False - elif scene_contains or any([scene_loose, scene_loose_active]): + elif scene_contains or non_scene_fallback: best_fallback_result = best_candidate(best_fallback_result, cur_result) else: logger.log(u'Rejecting as not scene release listed at any [%s]' % url, logger.DEBUG)