Browse Source

Implemented basic usage of QueryCondenser

pull/2356/head
Dean Gardiner 12 years ago
parent
commit
da87e68fad
  1. 51
      couchpotato/core/media/show/searcher/main.py

51
couchpotato/core/media/show/searcher/main.py

@ -1,10 +1,12 @@
from couchpotato import get_session, Env from couchpotato import get_session, Env
from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.variable import getTitle, tryInt, possibleTitles from couchpotato.core.helpers.variable import getTitle, tryInt
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.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from couchpotato.core.settings.model import Media, Library from couchpotato.core.settings.model import Media, Library
from qcond import QueryCondenser
from qcond.helpers import simplify
log = CPLog(__name__) log = CPLog(__name__)
@ -25,6 +27,8 @@ class ShowSearcher(Plugin):
def __init__(self): def __init__(self):
super(ShowSearcher, self).__init__() super(ShowSearcher, self).__init__()
self.query_condenser = QueryCondenser()
addEvent('show.searcher.single', self.single) addEvent('show.searcher.single', self.single)
addEvent('searcher.get_search_title', self.getSearchTitle) addEvent('searcher.get_search_title', self.getSearchTitle)
@ -34,6 +38,7 @@ class ShowSearcher(Plugin):
addEvent('searcher.get_media_identifier', self.getMediaIdentifier) addEvent('searcher.get_media_identifier', self.getMediaIdentifier)
addEvent('searcher.get_media_root', self.getMediaRoot) addEvent('searcher.get_media_root', self.getMediaRoot)
addEvent('searcher.get_media_searcher_id', self.getMediaSearcherId) addEvent('searcher.get_media_searcher_id', self.getMediaSearcherId)
addEvent('searcher.get_media_titles', self.getMediaTitles)
def single(self, media, search_protocols = None, manual = False): def single(self, media, search_protocols = None, manual = False):
if media['type'] == 'show': if media['type'] == 'show':
@ -129,26 +134,54 @@ class ShowSearcher(Plugin):
return ret return ret
def getSearchTitle(self, media): def getSearchTitle(self, media):
if media['type'] not in ['show', 'season', 'episode']:
return
show, season, episode = self.getMedia(media) show, season, episode = self.getMedia(media)
if show is None: if show is None:
return None return None
# TODO this misses alternative titles from the database titles = []
show_title = getTitle(show)
if not show_title: # Add season map_names if they exist
if season is not None and 'map_names' in show.info:
season_names = show.info['map_names'].get(str(season.season_number), {})
# Add titles from all locations
# TODO only add name maps from a specific location
for location, names in season_names.items():
titles += [name for name in names if name not in titles]
# Add show titles
titles += [title.title for title in show.titles if title.title not in titles]
# Use QueryCondenser to build a list of optimal search titles
condensed_titles = self.query_condenser.distinct(titles)
title = None
# TODO try other titles if searching doesn't return results
if len(condensed_titles):
# Return the first condensed title if one exists
title = condensed_titles[0]
elif len(titles):
# Fallback to first raw title
title = simplify(titles[0])
else:
return None return None
# Add the identifier to search title
# TODO supporting other identifier formats
identifier = fireEvent('searcher.get_media_identifier', media['library'], single = True) identifier = fireEvent('searcher.get_media_identifier', media['library'], single = True)
name = show_title
if identifier['season']: if identifier['season']:
name += ' S%02d' % identifier['season'] title += ' S%02d' % identifier['season']
if identifier['episode']: if identifier['episode']:
name += 'E%02d' % identifier['episode'] title += 'E%02d' % identifier['episode']
return name return title
def correctRelease(self, release = None, media = None, quality = None, **kwargs): def correctRelease(self, release = None, media = None, quality = None, **kwargs):

Loading…
Cancel
Save