diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index 810f754..621de7c 100644 --- a/couchpotato/core/media/_base/searcher/main.py +++ b/couchpotato/core/media/_base/searcher/main.py @@ -25,6 +25,7 @@ class Searcher(SearcherBase): addEvent('searcher.correct_name', self.correctName) addEvent('searcher.correct_words', self.correctWords) addEvent('searcher.download', self.download) + addEvent('searcher.search', self.search) addApiView('searcher.full_search', self.searchAllView, docs = { 'desc': 'Starts a full search for all media', @@ -131,6 +132,28 @@ class Searcher(SearcherBase): return False + def search(self, protocols, media, quality): + results = [] + + search_type = None + if media['type'] == 'movie': + search_type = 'movie' + elif media['type'] in ['show', 'season', 'episode']: + search_type = 'show' + + for search_protocol in protocols: + protocol_results = fireEvent('provider.search.%s.%s' % (search_protocol, search_type), media, quality, merge = True) + if protocol_results: + results += protocol_results + + sorted_results = sorted(results, key = lambda k: k['score'], reverse = True) + + download_preference = self.conf('preferred_method', section = 'searcher') + if download_preference != 'both': + sorted_results = sorted(sorted_results, key = lambda k: k['protocol'][:3], reverse = (download_preference == 'torrent')) + + return sorted_results + def getSearchProtocols(self): download_protocols = fireEvent('download.enabled_protocols', merge = True) diff --git a/couchpotato/core/media/movie/searcher/main.py b/couchpotato/core/media/movie/searcher/main.py index a79781c..2bd349d 100644 --- a/couchpotato/core/media/movie/searcher/main.py +++ b/couchpotato/core/media/movie/searcher/main.py @@ -168,26 +168,16 @@ class MovieSearcher(SearcherBase, MovieTypeBase): log.info('Search for %s in %s', (default_title, quality_type['quality']['label'])) quality = fireEvent('quality.single', identifier = quality_type['quality']['identifier'], single = True) - results = [] - for search_protocol in search_protocols: - protocol_results = fireEvent('provider.search.%s.movie' % search_protocol, movie, quality, merge = True) - if protocol_results: - results += protocol_results - - sorted_results = sorted(results, key = lambda k: k['score'], reverse = True) - if len(sorted_results) == 0: + results = fireEvent('searcher.search', search_protocols, movie, quality, single = True) + if len(results) == 0: log.debug('Nothing found for %s in %s', (default_title, quality_type['quality']['label'])) - download_preference = self.conf('preferred_method', section = 'searcher') - if download_preference != 'both': - sorted_results = sorted(sorted_results, key = lambda k: k['protocol'][:3], reverse = (download_preference == 'torrent')) - # Check if movie isn't deleted while searching if not db.query(Media).filter_by(id = movie.get('id')).first(): break # Add them to this movie releases list - for nzb in sorted_results: + for nzb in results: nzb_identifier = md5(nzb['url']) found_releases.append(nzb_identifier) @@ -196,7 +186,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase): if not rls: rls = Release( identifier = nzb_identifier, - movie_id = movie.get('id'), + media_id = movie.get('id'), quality_id = quality_type.get('quality_id'), status_id = available_status.get('id') ) @@ -225,7 +215,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase): nzb['status_id'] = rls.status_id - for nzb in sorted_results: + for nzb in results: if not quality_type.get('finish', False) and quality_type.get('wait_for', 0) > 0 and nzb.get('age') <= quality_type.get('wait_for', 0): log.info('Ignored, waiting %s days: %s', (quality_type.get('wait_for'), nzb['name'])) continue diff --git a/couchpotato/core/media/show/searcher/main.py b/couchpotato/core/media/show/searcher/main.py index ae4316f..4c46f8b 100644 --- a/couchpotato/core/media/show/searcher/main.py +++ b/couchpotato/core/media/show/searcher/main.py @@ -119,11 +119,13 @@ class ShowSearcher(Plugin): log.info('Search for %s S%02d%s in %s', (getTitle(show), season.season_number, "E%02d" % episode.episode_number if episode else "", quality_type['quality']['label'])) quality = fireEvent('quality.single', identifier = quality_type['quality']['identifier'], single = True) - results = [] - for search_protocol in search_protocols: - protocol_results = fireEvent('provider.search.%s.show' % search_protocol, media, quality, merge = True) - if protocol_results: - results += protocol_results + results = fireEvent('searcher.search', search_protocols, media, quality, single = True) + if len(results) == 0: + log.debug('Nothing found for %s in %s', (default_title, quality_type['quality']['label'])) + + # Check if movie isn't deleted while searching + if not db.query(Media).filter_by(id = media.get('id')).first(): + break log.info('%d results found' % len(results)) @@ -131,7 +133,6 @@ class ShowSearcher(Plugin): if media.get('type') not in ['season', 'episode']: return - imdb_results = kwargs.get('imdb_results', False) retention = Env.setting('retention', section = 'nzb') if release.get('seeders') is None and 0 < retention < release.get('age', 0): @@ -142,8 +143,6 @@ class ShowSearcher(Plugin): if not fireEvent('searcher.correct_words', release['name'], media, single = True): return False - #pprint.pprint(release) - show, season, episode = self._lookupMedia(media) if show is None or season is None: log.error('Unable to find show or season library in database, missing required data for searching') @@ -165,9 +164,6 @@ class ShowSearcher(Plugin): log.info('Wrong: %s, identifier does not match', release['name']) return False - #print chain.weight - #pprint.pprint(chain.info) - if 'show_name' not in chain.info or not len(chain.info['show_name']): log.info('Wrong: %s, missing show name in parsed result', release['name']) return False diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index f314afd..6cb91c3 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -190,7 +190,7 @@ class Release(Plugin): if item.get('protocol') != 'torrent_magnet': item['download'] = provider.loginDownload if provider.urls.get('login') else provider.download - success = fireEvent('searcher.download', data = item, movie = rel.movie.to_dict({ + success = fireEvent('searcher.download', data = item, movie = rel.media.to_dict({ 'profile': {'types': {'quality': {}}}, 'releases': {'status': {}, 'quality': {}}, 'library': {'titles': {}, 'files':{}},