diff --git a/couchpotato/core/media/show/searcher/main.py b/couchpotato/core/media/show/searcher/main.py index 80de59c5..1ce30341 100644 --- a/couchpotato/core/media/show/searcher/main.py +++ b/couchpotato/core/media/show/searcher/main.py @@ -1,8 +1,9 @@ from couchpotato import Env, get_session 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.media._base.searcher.main import SearchSetupError +from couchpotato.core.media.show._base import ShowBase from couchpotato.core.plugins.base import Plugin from couchpotato.core.settings.model import Media from qcond import QueryCondenser @@ -52,8 +53,15 @@ class ShowSearcher(Plugin): def single(self, media, search_protocols = None, manual = False): show, season, episode = self.getLibraries(media['library']) + db = get_session() + 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 # 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.') return - db = get_session() - #pre_releases = fireEvent('quality.pre_releases', single = True) found_releases = [] @@ -143,6 +149,16 @@ class ShowSearcher(Plugin): if len(too_early_to_search) > 0: 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) @@ -249,17 +265,18 @@ class ShowSearcher(Plugin): 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', []) - 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', []) - if len(season) <= 1: + if library['type'] in ['season', 'episode']: season = season[0] if len(season) else None + # Episode collapses if the subject is a episode episode = libraries.get('episode', []) - if len(episode) <= 1: + if library['type'] == 'episode': episode = episode[0] if len(episode) else None return show, season, episode