Browse Source

[TV] Fixed xem episode updates and finished adding "update_extras" events

pull/3730/merge
Dean Gardiner 11 years ago
parent
commit
72cb53bcc0
  1. 2
      couchpotato/core/media/show/_base/main.py
  2. 22
      couchpotato/core/media/show/episode.py
  3. 38
      couchpotato/core/media/show/providers/info/xem.py
  4. 38
      couchpotato/core/media/show/season.py

2
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):

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

38
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

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

Loading…
Cancel
Save