From 5b14b6eac7dbcf665bf4796b3949c42328745dae Mon Sep 17 00:00:00 2001 From: JackDandy Date: Thu, 15 Oct 2020 13:18:48 +0100 Subject: [PATCH] Fix enable "Perform search tasks" at config/Media Providers/Options for custom RSS. Fix remove enable_scheduled_backlog as it is not appropriate for custom RSS. Fix if no anime release group parsed, provider id is used to prevent skipping result. Fix if no anime season is parsed, assume season 1 to prevent skipping result. Change add some anime quality recognition to assist search. --- CHANGES.md | 11 ++++++++++- sickbeard/common.py | 3 +++ sickbeard/name_parser/parser.py | 13 +++++++++---- sickbeard/providers/__init__.py | 10 +++------- sickbeard/providers/generic.py | 2 +- sickbeard/providers/rsstorrent.py | 16 +++++++++------- 6 files changed, 35 insertions(+), 20 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 91a84d6..b9dd457 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,13 @@ -### 0.22.3 (2020-10-14 15:00:00 UTC) +### 0.22.4 (2020-10-15 13:20:00 UTC) + +* Fix enable "Perform search tasks" at config/Media Providers/Options for custom RSS +* Fix remove enable_scheduled_backlog as it is not appropriate for custom RSS +* Fix if no anime release group parsed, provider id is used to prevent skipping result +* Fix if no anime season is parsed, assume season 1 to prevent skipping result +* Change add some anime quality recognition to assist search + + +### 0.22.3 (2020-10-14 15:00:00 UTC) * Fix use qualities saved as default during Add Show to set up qualities in Bulk Change * Fix add manual indents to Quality dropdown select that browsers removed from CSS styles diff --git a/sickbeard/common.py b/sickbeard/common.py index d671000..fd6ef50 100644 --- a/sickbeard/common.py +++ b/sickbeard/common.py @@ -279,6 +279,7 @@ class Quality(object): if anime: sd_options = name_has(['360p', '480p', '848x480', 'XviD'], any) + sd_options |= name_has([r'^SD\.|\.SD$'], any) # specific to a provider dvd_options = name_has(['dvd', 'dvdrip'], any) blue_ray_options = name_has(['bluray', 'blu-ray', 'BD'], any) @@ -288,7 +289,9 @@ class Quality(object): return Quality.SDDVD hd_options = name_has(['720p', r'\[720\]', '1280x720', '960x720'], any) + hd_options |= name_has([r'^HD\s*720\.|\.HD\s*720$'], any) # specific to a provider full_hd = name_has(['1080p', r'\[1080\]', '1920x1080'], any) + full_hd |= name_has([r'^HD(\s*1080)?\.|\.HD(\s*1080)?$'], any) # specific to a provider if not blue_ray_options: if hd_options and not full_hd: return Quality.HDTV diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index 06b6ee9..5ebfc29 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -548,15 +548,14 @@ class NameParser(object): return number - def parse(self, name, cache_result=True): + def parse(self, name, cache_result=True, release_group=None): + # type: (AnyStr, bool, AnyStr) -> ParseResult """ :param name: - :type name: AnyStr :param cache_result: - :type cache_result: bool + :param release_group: Name to use if anime and no group, otherwise pick_best_result will fail :return: - :rtype: ParseResult """ name = self._unicodify(name) @@ -629,6 +628,12 @@ class NameParser(object): and not final_result.ab_episode_numbers and not final_result.series_name: raise InvalidNameException('Unable to parse %s' % name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace')) + if final_result.show_obj and final_result.show_obj.is_anime: + if None is final_result.season_number: + final_result.season_number = 1 # assign season number or finish_find_search_results will fail + if not final_result.release_group: + final_result.release_group = release_group # use provider id or pick_best_result fails + if cache_result: name_parser_cache.add(name, final_result) diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index fa049fc..8c82dd0 100755 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -165,14 +165,10 @@ def makeTorrentRssProvider(config_string): search_fallback = 0 enable_recentsearch = 0 enable_backlog = 0 - enable_scheduled_backlog = 1 try: - values = config_string.split('|') - if 9 == len(values): - (name, url, cookies, enabled, search_mode, search_fallback, - enable_recentsearch, enable_backlog, enable_scheduled_backlog) = values - elif 8 == len(values): + values = config_string.split('|')[0:8] # deprecated: enable_scheduled_backlog by using `[0:8]` + if 8 == len(values): name, url, cookies, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog = values else: name = values[0] @@ -189,7 +185,7 @@ def makeTorrentRssProvider(config_string): return newProvider = torrentRss.TorrentRssProvider(name, url, cookies, search_mode, search_fallback, enable_recentsearch, - enable_backlog, enable_scheduled_backlog) + enable_backlog) newProvider.enabled = '1' == enabled return newProvider diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index eced786..45f1bcd 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -1107,7 +1107,7 @@ class GenericProvider(object): parser = NameParser(False, show_obj=self.get_show(item, **kwargs), convert=True, indexer_lookup=False) # parse the file name try: - parse_result = parser.parse(title) + parse_result = parser.parse(title, release_group=self.get_id()) except InvalidNameException: logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG) continue diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py index abc7105..df5b705 100644 --- a/sickbeard/providers/rsstorrent.py +++ b/sickbeard/providers/rsstorrent.py @@ -28,10 +28,11 @@ from _23 import make_btih class TorrentRssProvider(generic.TorrentProvider): def __init__(self, name, url, cookies='', search_mode='eponly', search_fallback=False, - enable_recentsearch=False, enable_backlog=False, enable_scheduled_backlog=False): + enable_recentsearch=True, enable_backlog=True): + generic.TorrentProvider.__init__(self, name, cache_update_freq=15) self.enable_backlog = bool(try_int(enable_backlog)) - self.enable_scheduled_backlog = bool(try_int(enable_scheduled_backlog)) - generic.TorrentProvider.__init__(self, name, supports_backlog=self.enable_backlog, cache_update_freq=15) + # no use for rss, so disable by removal after init uses it + delattr(self, 'enable_scheduled_backlog') self.url = url.rstrip('/') self.url_base = self.url @@ -47,13 +48,14 @@ class TorrentRssProvider(generic.TorrentProvider): def config_str(self): - return '%s|%s|%s|%d|%s|%d|%d|%d|%d' % ( + return '%s|%s|%s|%d|%s|%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.enable_scheduled_backlog) + self.search_mode or '', self.search_fallback, self.enable_recentsearch, self.enable_backlog) + # noinspection PyUnresolvedReferences def _title_and_url(self, item): - + # note: feedparser .util.FeedParserDict has its properties defined in a dict which is hidden from typing + # therefore, unresolved references are hidden for this entire function title, url = None, None if item.title: