diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index 4348f41..68efcfa 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_year', self.correctYear) addEvent('searcher.correct_name', self.correctName) addEvent('searcher.correct_words', self.correctWords) + addEvent('searcher.try_download_result', self.tryDownloadResult) addEvent('searcher.download', self.download) addEvent('searcher.search', self.search) addEvent('searcher.create_releases', self.createReleases) @@ -53,6 +54,30 @@ class Searcher(SearcherBase): progress = fireEvent('searcher.progress', merge = True) return progress + def tryDownloadResult(self, results, media, quality_type, manual = False): + available_status, ignored_status, failed_status = fireEvent('status.get', ['available', 'ignored', 'failed'], single = True) + + for rel in results: + if not quality_type.get('finish', False) and quality_type.get('wait_for', 0) > 0 and rel.get('age') <= quality_type.get('wait_for', 0): + log.info('Ignored, waiting %s days: %s', (quality_type.get('wait_for'), rel['name'])) + continue + + if rel['status_id'] in [ignored_status.get('id'), failed_status.get('id')]: + log.info('Ignored: %s', rel['name']) + continue + + if rel['score'] <= 0: + log.info('Ignored, score to low: %s', rel['name']) + continue + + downloaded = fireEvent('searcher.download', data = rel, movie = media, manual = manual, single = True) + if downloaded is True: + return True + elif downloaded != 'try_next': + break + + return False + def download(self, data, movie, manual = False): if not data.get('protocol'): diff --git a/couchpotato/core/media/movie/searcher/main.py b/couchpotato/core/media/movie/searcher/main.py index d6c3367..0f90941 100644 --- a/couchpotato/core/media/movie/searcher/main.py +++ b/couchpotato/core/media/movie/searcher/main.py @@ -177,25 +177,9 @@ class MovieSearcher(SearcherBase, MovieTypeBase): # Add them to this movie releases list found_releases += fireEvent('searcher.create_releases', results, movie, quality_type, single = True) - 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 - - if nzb['status_id'] in [ignored_status.get('id'), failed_status.get('id')]: - log.info('Ignored: %s', nzb['name']) - continue - - if nzb['score'] <= 0: - log.info('Ignored, score to low: %s', nzb['name']) - continue - - downloaded = fireEvent('searcher.download', data = nzb, movie = movie, manual = manual, single = True) - if downloaded is True: - ret = True - break - elif downloaded != 'try_next': - break + # Try find a valid result and download it + if fireEvent('searcher.try_download_result', results, movie, quality_type, manual, single = True): + ret = True # Remove releases that aren't found anymore for release in movie.get('releases', []):