Change improve multi episode release search.

This commit is contained in:
JackDandy 2017-12-12 02:46:28 +00:00
parent d26aa3a21f
commit ad63608cad
6 changed files with 42 additions and 26 deletions

View file

@ -1,4 +1,9 @@
### 0.13.5 (2017-12-11 21:45:00 UTC)
### 0.13.6 (2017-12-13 01:50:00 UTC)
* Change improve multi episode release search
### 0.13.5 (2017-12-11 21:45:00 UTC)
* Change delete unused html5lib files that can cause issue with search providers

View file

@ -462,7 +462,7 @@ countryList = {'Australia': 'AU',
'USA': 'US'}
class neededQualities:
class neededQualities(object):
def __init__(self, need_anime=False, need_sports=False, need_sd=False, need_hd=False, need_uhd=False,
need_webdl=False, need_all_qualities=False, need_all_types=False, need_all=False):
self.need_anime = need_anime or need_all_types or need_all
@ -489,21 +489,27 @@ class neededQualities:
def all_qualities_needed(self):
return self.need_sd and self.need_hd and self.need_uhd and self.need_webdl
@all_qualities_needed.setter
def all_qualities_needed(self, v):
if isinstance(v, bool) and True is v:
self.need_sd = self.need_hd = self.need_uhd = self.need_webdl = True
def check_needed_types(self, show):
if show.is_anime:
if getattr(show, 'is_anime', False):
self.need_anime = True
if show.is_sports:
if getattr(show, 'is_sports', False):
self.need_sports = True
def check_needed_qualities(self, wantedQualities):
if Quality.UNKNOWN in wantedQualities:
self.need_sd = self.need_hd = self.need_uhd = self.need_webdl = True
else:
if not self.need_sd and min(wantedQualities) <= neededQualities.max_sd:
self.need_sd = True
if not self.need_hd and any(i in neededQualities.hd_qualities for i in wantedQualities):
self.need_hd = True
if not self.need_webdl and any(i in neededQualities.webdl_qualities for i in wantedQualities):
self.need_webdl = True
if not self.need_uhd and max(wantedQualities) > neededQualities.max_hd:
self.need_uhd = True
def check_needed_qualities(self, wanted_qualities):
if wanted_qualities:
if Quality.UNKNOWN in wanted_qualities:
self.need_sd = self.need_hd = self.need_uhd = self.need_webdl = True
else:
if not self.need_sd and min(wanted_qualities) <= neededQualities.max_sd:
self.need_sd = True
if not self.need_hd and any(i in neededQualities.hd_qualities for i in wanted_qualities):
self.need_hd = True
if not self.need_webdl and any(i in neededQualities.webdl_qualities for i in wanted_qualities):
self.need_webdl = True
if not self.need_uhd and max(wanted_qualities) > neededQualities.max_hd:
self.need_uhd = True

View file

@ -562,10 +562,13 @@ class GenericProvider:
# make sure we want the episode
want_ep = True
multi_ep = False
for epNo in actual_episodes:
if not show_obj.wantEpisode(actual_season, epNo, quality, manual_search):
want_ep = False
want_ep = show_obj.wantEpisode(actual_season, epNo, quality, manual_search, multi_ep)
if not want_ep:
break
# after initial single ep perspective, prepare multi ep for subsequent iterations
multi_ep = 1 < actual_episodes
if not want_ep:
logger.log(u'Ignoring result %s because we don\'t want an episode that is %s'

View file

@ -652,7 +652,8 @@ class NewznabProvider(generic.NZBProvider):
base_params['cat'] = ','.join(sorted(set((self.cat_ids.split(',') if self.cat_ids else []) + cat)))
request_params = base_params.copy()
if 'Propers' == mode and 'q' in params and not (any(x in params for x in ['season', 'ep'])):
if ('Propers' == mode or 'nzbs_org' == self.get_id()) \
and 'q' in params and not (any(x in params for x in ['season', 'ep'])):
request_params['t'] = 'search'
request_params.update(params)

View file

@ -171,7 +171,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
return super(ThePirateBayProvider, self)._episode_strings(
ep_obj, date_or=True,
ep_detail=lambda x: '%s|%s' % (config.naming_ep_type[2] % x, config.naming_ep_type[0] % x),
ep_detail=lambda x: '%s*|%s*' % (config.naming_ep_type[2] % x, config.naming_ep_type[0] % x),
ep_detail_anime=lambda x: '%02i' % x, **kwargs)
def _search_provider(self, search_params, search_mode='eponly', epcount=0, **kwargs):

View file

@ -1446,10 +1446,10 @@ class TVShow(object):
+ 'sports: %s\n' % self.is_sports \
+ 'anime: %s\n' % self.is_anime
def wantEpisode(self, season, episode, quality, manualSearch=False):
def wantEpisode(self, season, episode, quality, manualSearch=False, multi_ep=False):
logger.log('Checking if found episode %sx%s is wanted at quality %s' %
(season, episode, Quality.qualityStrings[quality]), logger.DEBUG)
logger.log('Checking if found %sepisode %sx%s is wanted at quality %s' %
(('', 'multi-part ')[multi_ep], season, episode, Quality.qualityStrings[quality]), logger.DEBUG)
# if the quality isn't one we want under any circumstances then just say no
initialQualities, archiveQualities = Quality.splitQuality(self.quality)
@ -1479,13 +1479,14 @@ class TVShow(object):
logger.log('Existing episode status: %s (%s)' % (statusStrings[curStatus], epStatus_text), logger.DEBUG)
# if we know we don't want it then just say no
if curStatus in (SKIPPED, IGNORED, ARCHIVED) and not manualSearch:
logger.log('Existing episode status is skipped/ignored/archived, ignoring found episode', logger.DEBUG)
if curStatus in [IGNORED, ARCHIVED] + ([SKIPPED], [])[multi_ep] and not manualSearch:
logger.log('Existing episode status is %signored/archived, ignoring found episode' %
('skipped/', '')[multi_ep], logger.DEBUG)
return False
# if it's one of these then we want it as long as it's in our allowed initial qualities
if quality in allQualities:
if curStatus in (WANTED, UNAIRED, SKIPPED, FAILED):
if curStatus in [WANTED, UNAIRED, SKIPPED, FAILED] + ([], SNATCHED_ANY)[multi_ep]:
logger.log('Existing episode status is wanted/unaired/skipped/failed, getting found episode', logger.DEBUG)
return True
elif manualSearch: