[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
|
# Trigger update info
|
||||||
if added and update_after:
|
if added and update_after:
|
||||||
# Do full update to get images etc
|
# 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
|
# Remove releases
|
||||||
for rel in fireEvent('release.for_media', m['_id'], single = True):
|
for rel in fireEvent('release.for_media', m['_id'], single = True):
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class Episode(MediaBase):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
addEvent('show.episode.add', self.add)
|
addEvent('show.episode.add', self.add)
|
||||||
addEvent('show.episode.update', self.update)
|
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):
|
def add(self, parent_id, info = None, update_after = True, status = None):
|
||||||
if not info: info = {}
|
if not info: info = {}
|
||||||
@@ -43,6 +44,7 @@ class Episode(MediaBase):
|
|||||||
if existing_episode:
|
if existing_episode:
|
||||||
s = existing_episode['doc']
|
s = existing_episode['doc']
|
||||||
s.update(episode_info)
|
s.update(episode_info)
|
||||||
|
|
||||||
episode = db.update(s)
|
episode = db.update(s)
|
||||||
else:
|
else:
|
||||||
episode = db.insert(episode_info)
|
episode = db.insert(episode_info)
|
||||||
@@ -50,17 +52,13 @@ class Episode(MediaBase):
|
|||||||
# Update library info
|
# Update library info
|
||||||
if update_after is not False:
|
if update_after is not False:
|
||||||
handle = fireEventAsync if update_after is 'async' else fireEvent
|
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
|
return episode
|
||||||
|
|
||||||
def update(self, media_id = None, identifiers = None, info = None):
|
def update(self, media_id = None, identifiers = None, info = None):
|
||||||
if not info: info = {}
|
if not info: info = {}
|
||||||
|
|
||||||
identifiers = info.get('identifiers') or identifiers
|
|
||||||
try: del info['identifiers']
|
|
||||||
except: pass
|
|
||||||
|
|
||||||
if self.shuttingDown():
|
if self.shuttingDown():
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -86,14 +84,24 @@ class Episode(MediaBase):
|
|||||||
merge = True
|
merge = True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
identifiers = info.pop('identifiers', None) or identifiers
|
||||||
|
|
||||||
# Update/create media
|
# Update/create media
|
||||||
episode['identifiers'].update(identifiers)
|
episode['identifiers'].update(identifiers)
|
||||||
episode.update({'info': info})
|
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
|
# Get images
|
||||||
image_urls = info.get('images', [])
|
image_urls = info.get('images', [])
|
||||||
existing_files = episode.get('files', {})
|
existing_files = episode.get('files', {})
|
||||||
self.getPoster(image_urls, existing_files)
|
self.getPoster(image_urls, existing_files)
|
||||||
|
|
||||||
db.update(episode)
|
if store:
|
||||||
return episode
|
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_names'] = u"%(base_url)s/map/names?" % self.config
|
||||||
self.config['url_all_names'] = u"%(base_url)s/map/allNames?" % 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):
|
def getShowInfo(self, identifiers = None):
|
||||||
if self.isDisabled():
|
if self.isDisabled():
|
||||||
return {}
|
return {}
|
||||||
@@ -115,39 +114,30 @@ class Xem(ShowProvider):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def getEpisodeInfo(self, identifiers = None, params = {}):
|
def getEpisodeInfo(self, identifiers = None, params = {}):
|
||||||
episode_number = params.get('episode_number', None)
|
episode_num = params.get('episode_number', None)
|
||||||
if episode_number is None:
|
if episode_num is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
season_number = params.get('season_number', None)
|
season_num = params.get('season_number', None)
|
||||||
if season_number is None:
|
if season_num is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
absolute_number = params.get('absolute_number', None)
|
|
||||||
episode_identifier = params.get('episode_identifiers', {}).get('thetvdb')
|
|
||||||
|
|
||||||
result = self.getShowInfo(identifiers)
|
result = self.getShowInfo(identifiers)
|
||||||
map = {}
|
|
||||||
|
|
||||||
if result:
|
if not result:
|
||||||
map_episode = result.get('map_episode', {}).get(season_number, {}).get(episode_number, {})
|
return False
|
||||||
|
|
||||||
if map_episode:
|
# Find season
|
||||||
map.update({'map_episode': map_episode})
|
if season_num not in result['seasons']:
|
||||||
|
return False
|
||||||
|
|
||||||
if absolute_number:
|
season = result['seasons'][season_num]
|
||||||
map_absolute = result.get('map_absolute', {}).get(absolute_number, {})
|
|
||||||
|
|
||||||
if map_absolute:
|
# Find episode
|
||||||
map.update({'map_absolute': map_absolute})
|
if episode_num not in season['episodes']:
|
||||||
|
return False
|
||||||
map_names = result.get('map_names', {}).get(toUnicode(season_number), {})
|
|
||||||
|
|
||||||
if map_names:
|
|
||||||
map.update({'map_names': map_names})
|
|
||||||
|
|
||||||
return map
|
|
||||||
|
|
||||||
|
return season['episodes'][episode_num]
|
||||||
|
|
||||||
def parseMaps(self, result, data, master = 'tvdb'):
|
def parseMaps(self, result, data, master = 'tvdb'):
|
||||||
'''parses xem map and returns a custom formatted dict map
|
'''parses xem map and returns a custom formatted dict map
|
||||||
|
|||||||
@@ -15,15 +15,13 @@ class Season(MediaBase):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
addEvent('show.season.add', self.add)
|
addEvent('show.season.add', self.add)
|
||||||
addEvent('show.season.update', self.update)
|
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):
|
def add(self, parent_id, info = None, update_after = True, status = None):
|
||||||
if not info: info = {}
|
if not info: info = {}
|
||||||
|
|
||||||
identifiers = info.get('identifiers')
|
identifiers = info.pop('identifiers', None)
|
||||||
try: del info['identifiers']
|
info.pop('episodes', None)
|
||||||
except: pass
|
|
||||||
try: del info['episodes']
|
|
||||||
except: pass
|
|
||||||
|
|
||||||
# Add Season
|
# Add Season
|
||||||
season_info = {
|
season_info = {
|
||||||
@@ -43,6 +41,7 @@ class Season(MediaBase):
|
|||||||
if existing_season:
|
if existing_season:
|
||||||
s = existing_season['doc']
|
s = existing_season['doc']
|
||||||
s.update(season_info)
|
s.update(season_info)
|
||||||
|
|
||||||
season = db.update(s)
|
season = db.update(s)
|
||||||
else:
|
else:
|
||||||
season = db.insert(season_info)
|
season = db.insert(season_info)
|
||||||
@@ -50,29 +49,19 @@ class Season(MediaBase):
|
|||||||
# Update library info
|
# Update library info
|
||||||
if update_after is not False:
|
if update_after is not False:
|
||||||
handle = fireEventAsync if update_after is 'async' else fireEvent
|
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
|
return season
|
||||||
|
|
||||||
def update(self, media_id = None, identifiers = None, info = None):
|
def update(self, media_id = None, identifiers = None, info = None):
|
||||||
if not info: info = {}
|
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():
|
if self.shuttingDown():
|
||||||
return
|
return
|
||||||
|
|
||||||
db = get_db()
|
db = get_db()
|
||||||
|
|
||||||
if media_id:
|
season = db.get('id', media_id)
|
||||||
season = db.get('id', media_id)
|
|
||||||
else:
|
|
||||||
season = db.get('media', identifiers, with_doc = True)['doc']
|
|
||||||
|
|
||||||
show = db.get('id', season['parent_id'])
|
show = db.get('id', season['parent_id'])
|
||||||
|
|
||||||
# Get new info
|
# Get new info
|
||||||
@@ -81,14 +70,25 @@ class Season(MediaBase):
|
|||||||
'season_number': season.get('info', {}).get('number', 0)
|
'season_number': season.get('info', {}).get('number', 0)
|
||||||
}, merge = True)
|
}, merge = True)
|
||||||
|
|
||||||
|
identifiers = info.pop('identifiers', None) or identifiers
|
||||||
|
info.pop('episodes', None)
|
||||||
|
|
||||||
# Update/create media
|
# Update/create media
|
||||||
season['identifiers'].update(identifiers)
|
season['identifiers'].update(identifiers)
|
||||||
season.update({'info': info})
|
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
|
# Get images
|
||||||
image_urls = info.get('images', [])
|
image_urls = info.get('images', [])
|
||||||
existing_files = season.get('files', {})
|
existing_files = season.get('files', {})
|
||||||
self.getPoster(image_urls, existing_files)
|
self.getPoster(image_urls, existing_files)
|
||||||
|
|
||||||
db.update(season)
|
if store:
|
||||||
return season
|
db.update(season)
|
||||||
|
|||||||
Reference in New Issue
Block a user