Browse Source

Created 'searcher.search' event to replace some shared functionality, Fixed an issue in Release.download when snatching movies.

pull/2284/head
Dean Gardiner 12 years ago
parent
commit
8fbf050510
  1. 23
      couchpotato/core/media/_base/searcher/main.py
  2. 20
      couchpotato/core/media/movie/searcher/main.py
  3. 18
      couchpotato/core/media/show/searcher/main.py
  4. 2
      couchpotato/core/plugins/release/main.py

23
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)

20
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

18
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

2
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':{}},

Loading…
Cancel
Save