Ejemplo n.º 1
0
def plugin_process_playdata(playdata):
    creds = get_credentials()
    profile_settings = load_profile(profile_id=1)

    CDMHEADERS = {
        'User-Agent': DEFAULT_USER_AGENT,
        #'X-Client-Id': CONST_DEFAULT_CLIENTID + '||' + DEFAULT_USER_AGENT,
        'X-OESP-License-Token-Type': 'velocix',
        'X-OESP-Token': profile_settings['access_token'],
        'X-OESP-Username': creds['username'],
        'X-OESP-License-Token': profile_settings['drm_token'],
        'X-OESP-DRM-SchemeIdUri':
        'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed',
        'X-OESP-Content-Locator': playdata['locator'],
    }

    params = []

    try:
        params.append(('_', 'renew_token'))
        params.append(('path', str(playdata['path']).encode('utf-8')))
        params.append(('locator', str(playdata['locator']).encode('utf-8')))
    except:
        params.append(('_', 'renew_token'))
        params.append(('path', playdata['path']))
        params.append(('locator', playdata['locator']))

    write_file(file='token_renew',
               data='plugin://{0}/?{1}'.format(ADDON_ID,
                                               urlencode(encode_obj(params))),
               isJSON=False)

    item_inputstream = inputstream.Widevine(license_key=playdata['license'], )

    return item_inputstream, CDMHEADERS
Ejemplo n.º 2
0
def create_strm_file(filename, id, label, data):
    if not os.path.isfile(filename + '.strm'):
        params = []
        params.append(('_', 'play_video'))
        params.append(('type', 'vod'))
        params.append(('channel', None))

        params.append(('id', id))
        params.append(('title', label))
        path = 'plugin://{0}/?{1}'.format(ADDON_ID,
                                          urlencode(encode_obj(params)))
        write_file(file=filename + '.strm', data=path, ext=True, isJSON=False)
        return True
    else:
        return False
Ejemplo n.º 3
0
def build_url(url, addon_id=ADDON_ID, **kwargs):
    kwargs['_'] = url
    is_live = kwargs.pop('_is_live', False)

    params = []
    for k in sorted(kwargs):
        if kwargs[k] == None:
            continue

        try:
            params.append((k, str(kwargs[k]).encode('utf-8')))
        except:
            params.append((k, kwargs[k]))

    #if is_live:
    #    params.append(('_l', '.pvr'))

    return 'plugin://{0}/?{1}'.format(addon_id, urlencode(encode_obj(params)))
Ejemplo n.º 4
0
def plugin_process_watchlist(data, type='watchlist'):
    items = {}

    if check_key(data, 'details'):
        for row in data['details']:
            currow = data['details'][row]

            info = plugin_process_info({'info': currow})

            context = []

            params = []
            params.append(('_', 'remove_from_watchlist'))
            params.append(('type', type))

            progress = 0
            remove_txt = CONST_WATCHLIST_CAPABILITY[type]['removelist']

            if type == 'continuewatch':
                if currow['type'] == 'episode':
                    params.append(('id', str(currow['id']) + '?series=' +
                                   str(currow['series_ref'])))
                else:
                    params.append(('id', str(currow['id']) + '?series='))

                if not currow['type'] == 'series':
                    progress = data['progress'][row]
            else:
                params.append(('id', currow['ref']))

            if CONST_WATCHLIST_CAPABILITY[type]['remove'] == 1:
                context.append((
                    remove_txt,
                    'RunPlugin({context_url})'.format(
                        context_url='plugin://{0}/?{1}'.format(
                            ADDON_ID, urlencode(encode_obj(params)))),
                ))

            type2 = 'vod'

            if currow['type'] == 'episode':
                params = []
                params.append(('_', 'play_video'))
                params.append(('type', type2))
                params.append(('channel', None))

                params.append(
                    ('id', 'E' + str(currow['series_ref'][1:]) + '###' +
                     str(currow['season_id']) + '###' + str(currow['id'])))
                params.append(('title', None))

                path = 'plugin://{0}/?{1}'.format(
                    ADDON_ID, urlencode(encode_obj(params)))
                playable = True
                mediatype = 'video'
            elif currow['type'] == 'series' and not type == 'continuewatch':
                params = []
                params.append(('_', 'vod_series'))
                params.append(('type', 'series'))
                params.append(('label', currow['title']))
                params.append(('id', currow['ref']))

                path = 'plugin://{0}/?{1}'.format(
                    ADDON_ID, urlencode(encode_obj(params)))
                playable = False
                mediatype = ''
            elif currow['type'] == 'movie':
                params = []
                params.append(('_', 'play_video'))
                params.append(('type', type2))
                params.append(('channel', None))
                params.append(('id', currow['ref']))
                params.append(('title', None))

                path = 'plugin://{0}/?{1}'.format(
                    ADDON_ID, urlencode(encode_obj(params)))
                playable = True
                mediatype = 'video'
            else:
                continue

            items[str(currow['ref'])] = {
                'label1': info['label1'],
                'description': info['description'],
                'duration': info['duration'],
                'mediatype': mediatype,
                'image': info['image'],
                'image_large': info['image_large'],
                'path': path,
                'playable': playable,
                'progress': progress,
                'context': context,
                'type': currow['type']
            }

    return items
Ejemplo n.º 5
0
    def play(self):
        try:
            if 'seekTime' in self.properties or sys.argv[3] == 'resume:true':
                self.properties.pop('ResumeTime', None)
                self.properties.pop('TotalTime', None)
        except:
            pass

        device_id = plugin_get_device_id

        if not device_id:
            method = 'settings.GetSettingValue'
            cursetting = {}
            cursetting['debug.extralogging'] = json_rpc(
                method, {"setting": "debug.extralogging"})['value']
            cursetting['debug.showloginfo'] = json_rpc(
                method, {"setting": "debug.showloginfo"})['value']
            cursetting['debug.setextraloglevel'] = json_rpc(
                method, {"setting": "debug.setextraloglevel"})['value']

            method = 'settings.SetSettingValue'
            json_rpc(method, {
                "setting": "debug.extralogging",
                "value": "true"
            })
            json_rpc(method, {"setting": "debug.showloginfo", "value": "true"})
            json_rpc(method, {
                "setting": "debug.setextraloglevel",
                "value": [64]
            })

        if settings.getBool(key='disable_subtitle'):
            self.properties['disable_subtitle'] = 1

        li = self.get_li()
        handle = _handle()

        #if 'seekTime' in self.properties:
        #li.setProperty('ResumeTime', str(self.properties['seekTime']))

        #if 'totalTime' in self.properties:
        #    li.setProperty('TotalTime', str(self.properties['totalTime']))
        #else:
        #    li.setProperty('TotalTime', '999999')

        player = MyPlayer()

        playbackStarted = False
        seekTime = False
        replay_pvr = False

        if handle > 0:
            if 'Replay' in self.properties or 'PVR' in self.properties:
                replay_pvr = True
                self.properties.pop('Replay', None)
                self.properties.pop('PVR', None)
                xbmcplugin.setResolvedUrl(handle, True, li)
            else:
                xbmcplugin.setResolvedUrl(handle, False, li)
                player.play(self.path, li)
        else:
            player.play(self.path, li)

        currentTime = 0
        upnext = settings.getBool('upnext_enabled')

        while player.is_active:
            if xbmc.getCondVisibility("Player.HasMedia") and player.is_started:
                if playbackStarted == False:
                    playbackStarted = True

                if upnext:
                    upnext = False
                    result = json_rpc("XBMC.GetInfoLabels", {
                        "labels":
                        ["VideoPlayer.DBID", "VideoPlayer.TvShowDBID"]
                    })

                    if result and len(str(
                            result['VideoPlayer.DBID'])) > 0 and len(
                                str(result['VideoPlayer.TvShowDBID'])) > 0:
                        result2 = json_rpc(
                            "VideoLibrary.GetEpisodes", {
                                "tvshowid":
                                int(result['VideoPlayer.TvShowDBID']),
                                "properties": [
                                    "title", "plot", "rating", "firstaired",
                                    "playcount", "runtime", "season",
                                    "episode", "showtitle", "fanart",
                                    "thumbnail", "art"
                                ]
                            })
                        nextep = 0
                        current_episode = dict()
                        next_episode = dict()

                        if result2:
                            for result3 in result2['episodes']:
                                if nextep == 0 and int(
                                        result3['episodeid']) == int(
                                            result['VideoPlayer.DBID']):
                                    current_episode = dict(
                                        episodeid=result3['episodeid'],
                                        tvshowid=int(
                                            result['VideoPlayer.TvShowDBID']),
                                        title=result3["title"],
                                        art=result3["art"],
                                        season=result3["season"],
                                        episode=result3["episode"],
                                        showtitle=result3["showtitle"],
                                        plot=result3["plot"],
                                        playcount=result3["playcount"],
                                        rating=result3["rating"],
                                        firstaired=result3["firstaired"],
                                        runtime=result3["runtime"])

                                    nextep = 1
                                elif nextep == 1:
                                    params = []
                                    params.append(('_', 'play_dbitem'))
                                    params.append(('id', result3['episodeid']))

                                    path = 'plugin://{0}/?{1}'.format(
                                        ADDON_ID,
                                        urlencode(encode_obj(params)))

                                    next_info = dict(
                                        current_episode=current_episode,
                                        next_episode=dict(
                                            episodeid=result3['episodeid'],
                                            tvshowid=int(result[
                                                'VideoPlayer.TvShowDBID']),
                                            title=result3["title"],
                                            art=result3["art"],
                                            season=result3["season"],
                                            episode=result3["episode"],
                                            showtitle=result3["showtitle"],
                                            plot=result3["plot"],
                                            playcount=result3["playcount"],
                                            rating=result3["rating"],
                                            firstaired=result3["firstaired"],
                                            runtime=result3["runtime"]),
                                        play_url=path,
                                        #notification_time=60,
                                        #notification_offset=notification_offset,
                                    )

                                    upnext_signal(sender=ADDON_ID,
                                                  next_info=next_info)
                                    #upnext_signal(sender=ADDON_ID)
                                    break

                if not device_id:
                    player.stop()

                if 'disable_subtitle' in self.properties:
                    player.showSubtitles(False)
                    self.properties.pop('disable_subtitle', None)

                if 'seekTime' in self.properties:
                    seekTime = True
                    xbmc.Monitor().waitForAbort(1)
                    player.seekTime(int(self.properties['seekTime']))
                    self.properties.pop('seekTime', None)

                if not replay_pvr and not seekTime and 'Live' in self.properties and 'Live_ID' in self.properties and 'Live_Channel' in self.properties:
                    id = self.properties['Live_ID']
                    channel = self.properties['Live_Channel']

                    self.properties.pop('Live', None)
                    self.properties.pop('Live_ID', None)
                    self.properties.pop('Live_Channel', None)

                    wait = 60

                    end = load_file(file='stream_end', isJSON=False)

                    if end:
                        calc_wait = int(end) - int(time.time()) + 30

                        if calc_wait > 60:
                            wait = calc_wait

                    while not xbmc.Monitor().waitForAbort(
                            wait) and xbmc.getCondVisibility(
                                "Player.HasMedia") and player.is_started:
                        info = None

                        try:
                            info = api_get_info(id=id, channel=channel)
                        except:
                            pass

                        if info:
                            info2 = {
                                'plot': str(info['description']),
                                'title': str(info['label1']),
                                'tagline': str(info['label2']),
                                'duration': info['duration'],
                                'credits': info['credits'],
                                'cast': info['cast'],
                                'director': info['director'],
                                'writer': info['writer'],
                                'genre': info['genres'],
                                'year': info['year'],
                            }

                            li.setInfo('video', info2)

                            li.setArt({
                                'thumb': info['image'],
                                'icon': info['image'],
                                'fanart': info['image_large']
                            })

                            try:
                                player.updateInfoTag(li)
                            except:
                                pass

                            wait = 60
                            end = load_file(file='stream_end', isJSON=False)

                            if end:
                                calc_wait = int(end) - int(time.time()) + 30

                                if calc_wait > 60:
                                    wait = calc_wait

            xbmc.Monitor().waitForAbort(1)

            try:
                currentTime = player.getTime()
            except:
                pass

        if playbackStarted == True:
            api_clean_after_playback(int(currentTime))

            try:
                if settings.getInt(key='max_bandwidth') > 0:
                    _restore_network_bandwidth()
            except:
                pass

        if not device_id:
            json_rpc(
                method, {
                    "setting": "debug.showloginfo",
                    "value": cursetting['debug.showloginfo']
                })
            json_rpc(
                method, {
                    "setting":
                    "debug.setextraloglevel",
                    "value":
                    str(', '.join([
                        str(elem)
                        for elem in cursetting['debug.setextraloglevel']
                    ]))
                })
            json_rpc(
                method, {
                    "setting": "debug.extralogging",
                    "value": cursetting['debug.setextraloglevel']
                })
Ejemplo n.º 6
0
def plugin_process_watchlist(data, type='watchlist'):
    items = {}
    items2 = plugin_process_vod(data, 0)

    for id in items2:
        currow = items2[id]

        context = []

        params = []
        params.append(('_', 'remove_from_watchlist'))
        params.append(('type', type))

        progress = 0
        remove_txt = CONST_WATCHLIST_CAPABILITY[type]['removelist']

        params.append(('id', id))

        if CONST_WATCHLIST_CAPABILITY[type]['remove'] == 1:
            context.append((
                remove_txt,
                'RunPlugin({context_url})'.format(
                    context_url='plugin://{0}/?{1}'.format(
                        ADDON_ID, urlencode(encode_obj(params)))),
            ))

        if currow['type'] == 'Serie' and not type == 'continuewatch':
            params = []
            params.append(('_', 'vod_series'))
            params.append(('type', 'series'))
            params.append(('label', currow['title']))
            params.append(('id', id))

            path = 'plugin://{0}/?{1}'.format(ADDON_ID,
                                              urlencode(encode_obj(params)))
            playable = False
            mediatype = ''
        else:
            params = []
            params.append(('_', 'play_video'))
            params.append(('type', 'movie'))
            params.append(('channel', None))
            params.append(('id', id))
            params.append(('title', None))

            path = 'plugin://{0}/?{1}'.format(ADDON_ID,
                                              urlencode(encode_obj(params)))
            playable = True
            mediatype = 'video'

        items[str(id)] = {
            'label1': currow['title'],
            'description': currow['description'],
            'duration': currow['duration'],
            'mediatype': mediatype,
            'image': currow['icon'],
            'image_large': currow['icon'],
            'path': path,
            'playable': playable,
            'progress': progress,
            'context': context,
            'type': currow['type']
        }

    return items