[TV] Fixed xem episode updates and finished adding "update_extras" events
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 not result:
|
||||
return False
|
||||
|
||||
if map_episode:
|
||||
map.update({'map_episode': map_episode})
|
||||
# Find season
|
||||
if season_num not in result['seasons']:
|
||||
return False
|
||||
|
||||
if absolute_number:
|
||||
map_absolute = result.get('map_absolute', {}).get(absolute_number, {})
|
||||
season = result['seasons'][season_num]
|
||||
|
||||
if map_absolute:
|
||||
map.update({'map_absolute': map_absolute})
|
||||
|
||||
map_names = result.get('map_names', {}).get(toUnicode(season_number), {})
|
||||
|
||||
if map_names:
|
||||
map.update({'map_names': map_names})
|
||||
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user