def _fill_movie_details(f, properties): """ Helper function to provide episode details """ info = { 'movieid': f._beacon_id[1], 'label': f.get('title') } # it kind of sucks, but we have to ask kaa.(web)metadata again for # each movie to get the details. metadata = kaa.metadata.parse(f.url[7:]) webmetadata = kaa.webmetadata.parse(f.url[7:], metadata) for prop in properties: if prop == 'title': info[prop] = f.get('title') elif prop == 'thumbnail': info[prop] = utils.register_image(f.get('poster'), f) elif prop in ('rating',): info[prop] = 0.0 elif prop == 'file': info[prop] = f.url elif prop == 'plot': info[prop] = f.get('description') elif prop in ('playcount', 'setid'): info[prop] = 0 elif prop == 'resume': info[prop] = { 'position': 0, 'total': 0 } elif prop == 'set': info[prop] = '' elif prop == 'fanart': info[prop] = utils.register_image((webmetadata and webmetadata.image) or '') elif prop == 'imdbnumber': info[prop] = (webmetadata and webmetadata.imdb) or '' elif prop == 'genre': info[prop] = (webmetadata and webmetadata.genre) or [] elif prop == 'year': info[prop] = (webmetadata and webmetadata.year) or 0 elif prop == 'runtime': info[prop] = f.get('length') elif prop in ('firstaired', 'dateadded', 'originaltitle', 'sorttitle', 'trailer'): info[prop] = '' elif prop in ('cast', 'mpaa', 'studio', 'director', 'tag'): info[prop] = [] elif prop == 'streamdetails': info[prop] = { 'audio': [], 'subtitle': [], 'video': [] } if metadata: for v in metadata.video: info[prop]['video'].append(utils.fill_video_details(v, metadata)) for a in metadata.audio: info[prop]['audio'].append(utils.fill_audio_details(a)) for s in metadata.subtitles: info[prop]['subtitle'].append(utils.fill_subtitle_details(s)) else: log.error('no support for %s' % prop) info[prop] = '' return info
def _fill_movie_details(f, properties): """ Helper function to provide episode details """ info = {'movieid': f._beacon_id[1], 'label': f.get('title')} # it kind of sucks, but we have to ask kaa.(web)metadata again for # each movie to get the details. metadata = kaa.metadata.parse(f.url[7:]) webmetadata = kaa.webmetadata.parse(f.url[7:], metadata) for prop in properties: if prop == 'title': info[prop] = f.get('title') elif prop == 'thumbnail': info[prop] = utils.register_image(f.get('poster'), f) elif prop in ('rating', ): info[prop] = 0.0 elif prop == 'file': info[prop] = f.url elif prop == 'plot': info[prop] = f.get('description') elif prop in ('playcount', 'setid'): info[prop] = 0 elif prop == 'resume': info[prop] = {'position': 0, 'total': 0} elif prop == 'set': info[prop] = '' elif prop == 'fanart': info[prop] = utils.register_image( (webmetadata and webmetadata.image) or '') elif prop == 'imdbnumber': info[prop] = (webmetadata and webmetadata.imdb) or '' elif prop == 'genre': info[prop] = (webmetadata and webmetadata.genre) or [] elif prop == 'year': info[prop] = (webmetadata and webmetadata.year) or 0 elif prop == 'runtime': info[prop] = f.get('length') elif prop in ('firstaired', 'dateadded', 'originaltitle', 'sorttitle', 'trailer'): info[prop] = '' elif prop in ('cast', 'mpaa', 'studio', 'director', 'tag'): info[prop] = [] elif prop == 'streamdetails': info[prop] = {'audio': [], 'subtitle': [], 'video': []} if metadata: for v in metadata.video: info[prop]['video'].append( utils.fill_video_details(v, metadata)) for a in metadata.audio: info[prop]['audio'].append(utils.fill_audio_details(a)) for s in metadata.subtitles: info[prop]['subtitle'].append( utils.fill_subtitle_details(s)) else: log.error('no support for %s' % prop) info[prop] = '' return info
def GetTVShows(properties, limits): """ JsonRPC Callback VideoLibrary.GetTVShows """ tvshows = [] for name in sorted((yield kaa.beacon.query(attr='series', type='video'))): series = kaa.webmetadata.tv.series(name) if not series: continue info = {} for prop in properties: if prop == 'art': info[prop] = {} if series.banner: info[prop]['banner'] = utils.register_image(series.banner) if series.image: info[prop]['fanart'] = utils.register_image(series.image) if series.poster: info[prop]['poster'] = utils.register_image(series.poster) elif prop in ('watchedepisodes', 'playcount'): info[prop] = 0 elif prop in ('season', ): info[prop] = -1 elif prop in ('year', ): info[prop] = series.year elif prop in ('rating', ): info[prop] = 0.0 elif prop == 'plot': info[prop] = series.overview elif prop in ('genre', 'studio', 'cast', 'tag'): info[prop] = [] elif prop in ('title', 'originaltitle', 'sorttitle'): info[prop] = name elif prop in ('mpaa', 'lastplayed', 'dateadded', 'imdbnumber', 'premiered', 'votes'): info[prop] = '' elif prop in ('episode'): info[prop] = len((yield kaa.beacon.query(series=series.name, type='video'))) else: log.error('no support for %s' % prop) info[prop] = '' info['tvshowid'] = series.id tvshows.append(info) start = limits['start'] end = min(limits['end'], len(tvshows)) yield { 'limits': { 'start': start, 'end': end, 'total': len(tvshows) }, 'tvshows': tvshows[start:end + 1] } yield None
def GetTVShows(properties, limits): """ JsonRPC Callback VideoLibrary.GetTVShows """ tvshows = [] for name in sorted((yield kaa.beacon.query(attr='series', type='video'))): series = kaa.webmetadata.tv.series(name) if not series: continue info = {} for prop in properties: if prop == 'art': info[prop] = {} if series.banner: info[prop]['banner'] = utils.register_image(series.banner) if series.image: info[prop]['fanart'] = utils.register_image(series.image) if series.poster: info[prop]['poster'] = utils.register_image(series.poster) elif prop in ('watchedepisodes', 'playcount'): info[prop] = 0 elif prop in ('season',): info[prop] = -1 elif prop in ('year',): info[prop] = series.year elif prop in ('rating',): info[prop] = 0.0 elif prop == 'plot': info[prop] = series.overview elif prop in ('genre', 'studio', 'cast', 'tag'): info[prop] = [] elif prop in ('title', 'originaltitle', 'sorttitle'): info[prop] = name elif prop in ('mpaa', 'lastplayed', 'dateadded', 'imdbnumber', 'premiered', 'votes'): info[prop] = '' elif prop in ('episode'): info[prop] = len((yield kaa.beacon.query(series=series.name, type='video'))) else: log.error('no support for %s' % prop) info[prop] = '' info['tvshowid'] = series.id tvshows.append(info) start = limits['start'] end = min(limits['end'], len(tvshows)) yield { 'limits': {'start': start, 'end': end, 'total': len(tvshows)}, 'tvshows': tvshows[start:end+1] } yield None
def GetSeasons(tvshowid, properties, limits=None): """ JsonRPC Callback VideoLibrary.GetSeasons """ seasons = [] result = {'seasons': [] } for series in tvdb.series: if series.id == tvshowid: for season in sorted((yield kaa.beacon.query(attr='season', series=series.name, type='video'))): season = series.seasons[season-1] info = { 'label': 'Season %s' % season.number, 'tvshowid': tvshowid, 'seasonid': season.number } for prop in properties: if prop == 'season': info[prop] = season.number elif prop == 'tvshowid': info[prop] = tvshowid elif prop == 'showtitle': info[prop] = season.series.name elif prop in ('watchedepisodes', 'playcount'): info[prop] = 0 elif prop == 'thumbnail': if season.poster: info[prop] = utils.register_image(season.poster) elif prop in ('episode'): info[prop] = len((yield kaa.beacon.query(series=season.series.name, season=season.number, type='video'))) else: log.error('no support for %s' % prop) info[prop] = '' seasons.append(info) yield subset(limits, 'seasons', seasons)
def GetItem(playerid, properties): """ JsonRPC Callback Player.GetItem """ app = freevo.taskmanager.applications[-1] if not 'type' in properties: properties.append('type') result = utils.fill_basic_item_properties(app.item, properties) result['id'] = 0 for prop in properties: if prop == 'streamdetails': value = { 'audio': [], 'subtitle': [], 'video': [] } if app.name == 'videoplayer': for a in app.item.metadata.audio: value['audio'].append(utils.fill_audio_details(a)) for s in app.item.metadata.subtitles: value['subtitle'].append(utils.fill_subtitle_details(s)) for v in app.item.metadata.video: value['video'].append({'aspect': v.aspect, 'duration': int(app.item.metadata.length), 'height': v.height, 'width': v.width, 'stereomode': '', 'codec': v.codec.lower().replace('h.264 avc', 'h264')}) elif prop == 'playcount': value = 0 # FIXME elif prop == 'art': value = {} if app.item.get('series') and app.item.get('episode'): series = app.item.get('series') series = kaa.webmetadata.tv.series(series) if series: if series.banner: value['tvshow.banner'] = utils.register_image(series.banner) if series.image: value['tvshow.fanart'] = utils.register_image(series.image) if series.poster: value['tvshow.poster'] = utils.register_image(series.poster) thumb = app.item.get('image') if thumb: value['thumb'] = utils.register_image(thumb, app.item) print value else: log.error('no support for %s' % prop) value = '' result[prop] = value return {'item': result }
def _fill_episode_details(f, properties): """ Helper function to provide episode details """ info = { 'episodeid': f._beacon_id[1], 'label': '%s %sx%02d - %s' % (f.get('series'), f.get('season'), f.get('episode'), f.get('title')) } for prop in properties: if prop == 'season': info[prop] = f.get('season') elif prop == 'episode': info[prop] = f.get('episode') elif prop == 'showtitle': info[prop] = f.get('series') elif prop == 'title': info[prop] = f.get('title') elif prop == 'thumbnail': info[prop] = utils.register_image(f.thumbnail, f) elif prop in ('rating',): info[prop] = 0.0 elif prop == 'file': info[prop] = f.url elif prop == 'plot': info[prop] = f.get('description') elif prop == 'playcount': info[prop] = 0 elif prop == 'resume': info[prop] = False elif prop in ('firstaired', 'dateadded', 'originaltitle'): info[prop] = '' elif prop in ('cast', ): info[prop] = [] elif prop == 'streamdetails': # Filled correctly later for on episode details info[prop] = { 'audio': [], 'subtitle': [], 'video': [] } elif prop == 'tvshowid': info[prop] = -1 else: log.error('no support for %s' % prop) info[prop] = '' return info
def _fill_episode_details(f, properties): """ Helper function to provide episode details """ info = { 'episodeid': f._beacon_id[1], 'label': '%s %sx%02d - %s' % (f.get('series'), f.get('season'), f.get('episode'), f.get('title')) } for prop in properties: if prop == 'season': info[prop] = f.get('season') elif prop == 'episode': info[prop] = f.get('episode') elif prop == 'showtitle': info[prop] = f.get('series') elif prop == 'title': info[prop] = f.get('title') elif prop == 'thumbnail': info[prop] = utils.register_image(f.thumbnail, f) elif prop in ('rating', ): info[prop] = 0.0 elif prop == 'file': info[prop] = f.url elif prop == 'plot': info[prop] = f.get('description') elif prop == 'playcount': info[prop] = 0 elif prop == 'resume': info[prop] = False elif prop in ('firstaired', 'dateadded', 'originaltitle'): info[prop] = '' elif prop in ('cast', ): info[prop] = [] elif prop == 'streamdetails': # Filled correctly later for on episode details info[prop] = {'audio': [], 'subtitle': [], 'video': []} elif prop == 'tvshowid': info[prop] = -1 else: log.error('no support for %s' % prop) info[prop] = '' return info
def _fill_episode_details(f, properties, metadata=None): """ Helper function to provide episode details """ info = { 'episodeid': f._beacon_id[1], 'label': '%s %sx%02d - %s' % (f.get('series'), f.get('season'), f.get('episode'), f.get('title')) } for prop in properties: if prop == 'season': info[prop] = f.get('season') or 0 elif prop == 'episode': info[prop] = f.get('episode') or 0 elif prop == 'showtitle': info[prop] = f.get('series') or '' elif prop == 'title': info[prop] = f.get('title') or '' elif prop == 'thumbnail': info[prop] = utils.register_image(f.thumbnail, f) elif prop in ('rating',): info[prop] = 0.0 elif prop == 'file': info[prop] = f.url elif prop == 'plot': info[prop] = f.get('description') or '' elif prop == 'playcount': info[prop] = 0 elif prop == 'resume': info[prop] = { 'position': 0.0, 'total': 0.0 } elif prop in ('firstaired', 'dateadded', 'originaltitle', 'lastplayed'): info[prop] = '' elif prop in ('cast', ): info[prop] = [] elif prop == 'streamdetails': info[prop] = { 'audio': [], 'subtitle': [], 'video': [] } if metadata and 0: for v in metadata.video: info[prop]['video'].append(utils.fill_video_details(v, metadata)) for a in metadata.audio: info[prop]['audio'].append(utils.fill_audio_details(a)) for s in metadata.subtitles: info[prop]['subtitle'].append(utils.fill_subtitle_details(s)) else: info[prop]['video'].append({ 'height': 720, 'width': 1280, 'aspect': 16.0/9, 'codec': 'h264', 'duration': 1290, 'stereomode': '', }) info[prop]['audio'].append({ 'channels': 6, 'codec': 'ac3', 'language': '', }) elif prop in ('tvshowid', 'specialsortepisode', 'specialsortseason'): info[prop] = -1 else: log.error('no support for %s' % prop) info[prop] = '' return info