From 72cb53bcc0fa9f3354c79c50c8edc7e84cef0fd6 Mon Sep 17 00:00:00 2001 From: Dean Gardiner Date: Mon, 28 Jul 2014 20:19:51 +1200 Subject: [PATCH] [TV] Fixed xem episode updates and finished adding "update_extras" events --- couchpotato/core/media/show/_base/main.py | 2 +- couchpotato/core/media/show/episode.py | 22 ++++++++----- couchpotato/core/media/show/providers/info/xem.py | 38 +++++++++-------------- couchpotato/core/media/show/season.py | 38 +++++++++++------------ 4 files changed, 49 insertions(+), 51 deletions(-) diff --git a/couchpotato/core/media/show/_base/main.py b/couchpotato/core/media/show/_base/main.py index f883cb1..29af63a 100755 --- a/couchpotato/core/media/show/_base/main.py +++ b/couchpotato/core/media/show/_base/main.py @@ -155,7 +155,7 @@ class ShowBase(MediaBase): # Trigger update info if added and update_after: # Do full update to get images etc - fireEventAsync('show.update_extras', m, info = info, store = True, on_complete = onComplete) + fireEventAsync('show.update_extras', m, info, store = True, on_complete = onComplete) # Remove releases for rel in fireEvent('release.for_media', m['_id'], single = True): diff --git a/couchpotato/core/media/show/episode.py b/couchpotato/core/media/show/episode.py index 4b07b38..0557bb4 100755 --- a/couchpotato/core/media/show/episode.py +++ b/couchpotato/core/media/show/episode.py @@ -15,6 +15,7 @@ class Episode(MediaBase): def __init__(self): addEvent('show.episode.add', self.add) addEvent('show.episode.update', self.update) + addEvent('show.episode.update_extras', self.updateExtras) def add(self, parent_id, info = None, update_after = True, status = None): if not info: info = {} @@ -43,6 +44,7 @@ class Episode(MediaBase): if existing_episode: s = existing_episode['doc'] s.update(episode_info) + episode = db.update(s) else: episode = db.insert(episode_info) @@ -50,17 +52,13 @@ class Episode(MediaBase): # Update library info if update_after is not False: handle = fireEventAsync if update_after is 'async' else fireEvent - handle('show.season.update', episode.get('_id'), identifiers, info, single = True) + handle('show.episode.update_extras', episode, info, store = True, single = True) return episode def update(self, media_id = None, identifiers = None, info = None): if not info: info = {} - identifiers = info.get('identifiers') or identifiers - try: del info['identifiers'] - except: pass - if self.shuttingDown(): return @@ -86,14 +84,24 @@ class Episode(MediaBase): merge = True ) + identifiers = info.pop('identifiers', None) or identifiers + # Update/create media episode['identifiers'].update(identifiers) episode.update({'info': info}) + self.updateExtras(episode, info) + + db.update(episode) + return episode + + def updateExtras(self, episode, info, store=False): + db = get_db() + # Get images image_urls = info.get('images', []) existing_files = episode.get('files', {}) self.getPoster(image_urls, existing_files) - db.update(episode) - return episode + if store: + db.update(episode) diff --git a/couchpotato/core/media/show/providers/info/xem.py b/couchpotato/core/media/show/providers/info/xem.py index 807184d..f8c003c 100755 --- a/couchpotato/core/media/show/providers/info/xem.py +++ b/couchpotato/core/media/show/providers/info/xem.py @@ -77,7 +77,6 @@ class Xem(ShowProvider): self.config['url_names'] = u"%(base_url)s/map/names?" % self.config self.config['url_all_names'] = u"%(base_url)s/map/allNames?" % self.config - # TODO: Also get show aliases (store as titles) def getShowInfo(self, identifiers = None): if self.isDisabled(): return {} @@ -115,39 +114,30 @@ class Xem(ShowProvider): return result def getEpisodeInfo(self, identifiers = None, params = {}): - episode_number = params.get('episode_number', None) - if episode_number is None: + episode_num = params.get('episode_number', None) + if episode_num is None: return False - season_number = params.get('season_number', None) - if season_number is None: + season_num = params.get('season_number', None) + if season_num is None: return False - absolute_number = params.get('absolute_number', None) - episode_identifier = params.get('episode_identifiers', {}).get('thetvdb') - result = self.getShowInfo(identifiers) - map = {} - - if result: - map_episode = result.get('map_episode', {}).get(season_number, {}).get(episode_number, {}) - - if map_episode: - map.update({'map_episode': map_episode}) - if absolute_number: - map_absolute = result.get('map_absolute', {}).get(absolute_number, {}) - - if map_absolute: - map.update({'map_absolute': map_absolute}) + if not result: + return False - map_names = result.get('map_names', {}).get(toUnicode(season_number), {}) + # Find season + if season_num not in result['seasons']: + return False - if map_names: - map.update({'map_names': map_names}) + season = result['seasons'][season_num] - return map + # Find episode + if episode_num not in season['episodes']: + return False + return season['episodes'][episode_num] def parseMaps(self, result, data, master = 'tvdb'): '''parses xem map and returns a custom formatted dict map diff --git a/couchpotato/core/media/show/season.py b/couchpotato/core/media/show/season.py index e85720c..e41e460 100755 --- a/couchpotato/core/media/show/season.py +++ b/couchpotato/core/media/show/season.py @@ -15,15 +15,13 @@ class Season(MediaBase): def __init__(self): addEvent('show.season.add', self.add) addEvent('show.season.update', self.update) + addEvent('show.season.update_extras', self.updateExtras) def add(self, parent_id, info = None, update_after = True, status = None): if not info: info = {} - identifiers = info.get('identifiers') - try: del info['identifiers'] - except: pass - try: del info['episodes'] - except: pass + identifiers = info.pop('identifiers', None) + info.pop('episodes', None) # Add Season season_info = { @@ -43,6 +41,7 @@ class Season(MediaBase): if existing_season: s = existing_season['doc'] s.update(season_info) + season = db.update(s) else: season = db.insert(season_info) @@ -50,29 +49,19 @@ class Season(MediaBase): # Update library info if update_after is not False: handle = fireEventAsync if update_after is 'async' else fireEvent - handle('show.season.update', season.get('_id'), identifiers, info, single = True) + handle('show.season.update_extras', season, info, store = True, single = True) return season def update(self, media_id = None, identifiers = None, info = None): if not info: info = {} - identifiers = info.get('identifiers') or identifiers - try: del info['identifiers'] - except: pass - try: del info['episodes'] - except: pass - if self.shuttingDown(): return db = get_db() - if media_id: - season = db.get('id', media_id) - else: - season = db.get('media', identifiers, with_doc = True)['doc'] - + season = db.get('id', media_id) show = db.get('id', season['parent_id']) # Get new info @@ -81,14 +70,25 @@ class Season(MediaBase): 'season_number': season.get('info', {}).get('number', 0) }, merge = True) + identifiers = info.pop('identifiers', None) or identifiers + info.pop('episodes', None) + # Update/create media season['identifiers'].update(identifiers) season.update({'info': info}) + self.updateExtras(season, info) + + db.update(season) + return season + + def updateExtras(self, season, info, store=False): + db = get_db() + # Get images image_urls = info.get('images', []) existing_files = season.get('files', {}) self.getPoster(image_urls, existing_files) - db.update(season) - return season + if store: + db.update(season)