Browse Source

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.
tags/release_0.22.4^2
JackDandy 5 years ago
parent
commit
5b14b6eac7
  1. 11
      CHANGES.md
  2. 3
      sickbeard/common.py
  3. 13
      sickbeard/name_parser/parser.py
  4. 10
      sickbeard/providers/__init__.py
  5. 2
      sickbeard/providers/generic.py
  6. 16
      sickbeard/providers/rsstorrent.py

11
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 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 * Fix add manual indents to Quality dropdown select that browsers removed from CSS styles

3
sickbeard/common.py

@ -279,6 +279,7 @@ class Quality(object):
if anime: if anime:
sd_options = name_has(['360p', '480p', '848x480', 'XviD'], any) 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) dvd_options = name_has(['dvd', 'dvdrip'], any)
blue_ray_options = name_has(['bluray', 'blu-ray', 'BD'], any) blue_ray_options = name_has(['bluray', 'blu-ray', 'BD'], any)
@ -288,7 +289,9 @@ class Quality(object):
return Quality.SDDVD return Quality.SDDVD
hd_options = name_has(['720p', r'\[720\]', '1280x720', '960x720'], any) 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(['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 not blue_ray_options:
if hd_options and not full_hd: if hd_options and not full_hd:
return Quality.HDTV return Quality.HDTV

13
sickbeard/name_parser/parser.py

@ -548,15 +548,14 @@ class NameParser(object):
return number 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: :param name:
:type name: AnyStr
:param cache_result: :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: :return:
:rtype: ParseResult
""" """
name = self._unicodify(name) name = self._unicodify(name)
@ -629,6 +628,12 @@ class NameParser(object):
and not final_result.ab_episode_numbers and not final_result.series_name: 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')) 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: if cache_result:
name_parser_cache.add(name, final_result) name_parser_cache.add(name, final_result)

10
sickbeard/providers/__init__.py

@ -165,14 +165,10 @@ def makeTorrentRssProvider(config_string):
search_fallback = 0 search_fallback = 0
enable_recentsearch = 0 enable_recentsearch = 0
enable_backlog = 0 enable_backlog = 0
enable_scheduled_backlog = 1
try: try:
values = config_string.split('|') values = config_string.split('|')[0:8] # deprecated: enable_scheduled_backlog by using `[0:8]`
if 9 == len(values): if 8 == len(values):
(name, url, cookies, enabled, search_mode, search_fallback,
enable_recentsearch, enable_backlog, enable_scheduled_backlog) = values
elif 8 == len(values):
name, url, cookies, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog = values name, url, cookies, enabled, search_mode, search_fallback, enable_recentsearch, enable_backlog = values
else: else:
name = values[0] name = values[0]
@ -189,7 +185,7 @@ def makeTorrentRssProvider(config_string):
return return
newProvider = torrentRss.TorrentRssProvider(name, url, cookies, search_mode, search_fallback, enable_recentsearch, newProvider = torrentRss.TorrentRssProvider(name, url, cookies, search_mode, search_fallback, enable_recentsearch,
enable_backlog, enable_scheduled_backlog) enable_backlog)
newProvider.enabled = '1' == enabled newProvider.enabled = '1' == enabled
return newProvider return newProvider

2
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) parser = NameParser(False, show_obj=self.get_show(item, **kwargs), convert=True, indexer_lookup=False)
# parse the file name # parse the file name
try: try:
parse_result = parser.parse(title) parse_result = parser.parse(title, release_group=self.get_id())
except InvalidNameException: except InvalidNameException:
logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG) logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG)
continue continue

16
sickbeard/providers/rsstorrent.py

@ -28,10 +28,11 @@ from _23 import make_btih
class TorrentRssProvider(generic.TorrentProvider): class TorrentRssProvider(generic.TorrentProvider):
def __init__(self, name, url, cookies='', search_mode='eponly', search_fallback=False, 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_backlog = bool(try_int(enable_backlog))
self.enable_scheduled_backlog = bool(try_int(enable_scheduled_backlog)) # no use for rss, so disable by removal after init uses it
generic.TorrentProvider.__init__(self, name, supports_backlog=self.enable_backlog, cache_update_freq=15) delattr(self, 'enable_scheduled_backlog')
self.url = url.rstrip('/') self.url = url.rstrip('/')
self.url_base = self.url self.url_base = self.url
@ -47,13 +48,14 @@ class TorrentRssProvider(generic.TorrentProvider):
def config_str(self): 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.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)
# noinspection PyUnresolvedReferences
def _title_and_url(self, item): 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 title, url = None, None
if item.title: if item.title:

Loading…
Cancel
Save