You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.6 KiB

11 years ago
from couchpotato import get_db
from couchpotato.core.event import addEvent, fireEvent, fireEventAsync
11 years ago
from couchpotato.core.logger import CPLog
from couchpotato.core.helpers.variable import tryInt
11 years ago
from couchpotato.core.media import MediaBase
11 years ago
log = CPLog(__name__)
11 years ago
autoload = 'Episode'
11 years ago
11 years ago
class Episode(MediaBase):
11 years ago
def __init__(self):
addEvent('show.episode.add', self.add)
11 years ago
addEvent('show.episode.update_info', self.updateInfo)
11 years ago
def add(self, parent_id, info = None, update_after = True):
if not info: info = {}
identifiers = info.get('identifiers')
try: del info['identifiers']
except: pass
11 years ago
# Add Season
11 years ago
episode_info = {
11 years ago
'_t': 'media',
'type': 'show.episode',
11 years ago
'identifiers': identifiers,
'parent_id': parent_id,
11 years ago
'info': info, # Returned dict by providers
11 years ago
}
11 years ago
# Check if season already exists
existing_episode = fireEvent('media.with_identifiers', identifiers, with_doc = True, single = True)
11 years ago
11 years ago
db = get_db()
11 years ago
11 years ago
if existing_episode:
s = existing_episode['doc']
s.update(episode_info)
episode = db.update(s)
else:
episode = db.insert(episode_info)
11 years ago
# Update library info
if update_after is not False:
handle = fireEventAsync if update_after is 'async' else fireEvent
11 years ago
handle('show.season.update_info', episode.get('_id'), info = info, single = True)
11 years ago
11 years ago
return episode
11 years ago
def updateInfo(self, media_id = None, info = None, force = False):
11 years ago
if not info: info = {}
11 years ago
if self.shuttingDown():
return
11 years ago
db = get_db()
episode = db.get('id', media_id)
11 years ago
# Get new info
11 years ago
if not info:
season = db.get('id', episode['parent_id'])
show = db.get('id', season['parent_id'])
info = fireEvent(
'episode.info', show.get('identifiers'), {
'season_identifier': season.get('info', {}).get('number'),
'episode_identifier': episode.get('identifiers')
},
merge = True
)
11 years ago
# Update/create media
11 years ago
if force:
11 years ago
11 years ago
episode['identifiers'].update(info['identifiers'])
if 'identifiers' in info:
del info['identifiers']
11 years ago
11 years ago
episode.update({'info': info})
e = db.update(episode)
episode.update(e)
11 years ago
11 years ago
# Get images
image_urls = info.get('images', [])
existing_files = episode.get('files', {})
self.getPoster(image_urls, existing_files)
11 years ago
11 years ago
return episode