Searching for a show now triggers searching for all the seasons, Season searches that fail to find anything now trigger individual episode searches.

This commit is contained in:
Dean Gardiner
2013-12-07 21:23:10 +13:00
parent 69d58663ef
commit 1e39d643a8
+26 -9
View File
@@ -1,8 +1,9 @@
from couchpotato import Env, get_session from couchpotato import Env, get_session
from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.variable import getTitle, tryInt, toIterable from couchpotato.core.helpers.variable import getTitle, toIterable
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.media._base.searcher.main import SearchSetupError from couchpotato.core.media._base.searcher.main import SearchSetupError
from couchpotato.core.media.show._base import ShowBase
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from couchpotato.core.settings.model import Media from couchpotato.core.settings.model import Media
from qcond import QueryCondenser from qcond import QueryCondenser
@@ -52,8 +53,15 @@ class ShowSearcher(Plugin):
def single(self, media, search_protocols = None, manual = False): def single(self, media, search_protocols = None, manual = False):
show, season, episode = self.getLibraries(media['library']) show, season, episode = self.getLibraries(media['library'])
db = get_session()
if media['type'] == 'show': if media['type'] == 'show':
# TODO handle show searches (scan all seasons) for library in season:
# TODO ideally we shouldn't need to fetch the media for each season library here
m = db.query(Media).filter_by(library_id = library['library_id']).first()
fireEvent('season.searcher.single', m.to_dict(ShowBase.search_dict))
return return
# Find out search type # Find out search type
@@ -69,8 +77,6 @@ class ShowSearcher(Plugin):
log.debug('Episode doesn\'t have a profile or already done, assuming in manage tab.') log.debug('Episode doesn\'t have a profile or already done, assuming in manage tab.')
return return
db = get_session()
#pre_releases = fireEvent('quality.pre_releases', single = True) #pre_releases = fireEvent('quality.pre_releases', single = True)
found_releases = [] found_releases = []
@@ -143,6 +149,16 @@ class ShowSearcher(Plugin):
if len(too_early_to_search) > 0: if len(too_early_to_search) > 0:
log.info2('Too early to search for %s, %s', (too_early_to_search, default_title)) log.info2('Too early to search for %s, %s', (too_early_to_search, default_title))
elif media['type'] == 'season' and not ret:
# If nothing was found, start searching for episodes individually
log.info('No season pack found, starting individual episode search')
for library in episode:
# TODO ideally we shouldn't need to fetch the media for each episode library here
m = db.query(Media).filter_by(library_id = library['library_id']).first()
fireEvent('episode.searcher.single', m.to_dict(ShowBase.search_dict))
fireEvent('notify.frontend', type = 'show.searcher.ended.%s' % media['id'], data = True) fireEvent('notify.frontend', type = 'show.searcher.ended.%s' % media['id'], data = True)
@@ -249,17 +265,18 @@ class ShowSearcher(Plugin):
libraries = library['related_libraries'] libraries = library['related_libraries']
# Get libraries and return lists only if there is multiple items # Show always collapses as there can never be any multiples
show = libraries.get('show', []) show = libraries.get('show', [])
if len(show) <= 1: show = show[0] if len(show) else None
show = show[0] if len(show) else None
# Season collapses if the subject is a season or episode
season = libraries.get('season', []) season = libraries.get('season', [])
if len(season) <= 1: if library['type'] in ['season', 'episode']:
season = season[0] if len(season) else None season = season[0] if len(season) else None
# Episode collapses if the subject is a episode
episode = libraries.get('episode', []) episode = libraries.get('episode', [])
if len(episode) <= 1: if library['type'] == 'episode':
episode = episode[0] if len(episode) else None episode = episode[0] if len(episode) else None
return show, season, episode return show, season, episode