コード例 #1
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #2
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #3
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #4
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #5
0
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)
コード例 #6
0
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 }
コード例 #7
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #8
0
ファイル: videolibrary.py プロジェクト: pacificIT/freevo2
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
コード例 #9
0
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