Пример #1
0
def episode(eid):

    episode = session.get_cms(cms_url + 'episodes/' + eid)
    if episode.available_date:
        try:
            #title = "{} [TBA on {}]".format(title, time.strftime("%m/%d/%y %I:%M:%S %P", a_date))
            a_date = time.strptime(episode.available_date,
                                   '%Y-%m-%dT%H:%M:%SZ')
            #for some odd reason, the statement comes back with 'NoneType' callable
            #exception on datetime, I believe. handling this so it doesn't throw
            #'spurious' exceptions
        except:
            a_date = ""
    else:
        a_date = ""
    if episode.streams:
        setup_player(episode)
    else:
        dialog = Dialog()
        dialog.notification("VRV",
                            "No streams available.",
                            time=1000,
                            sound=False)
        if a_date:
            dialog.notification("VRV",
                                "TBA on {}".format(
                                    time.strftime("%m/%d/%y %I:%M:%S %P",
                                                  a_date)),
                                time=1000,
                                sound=False)
Пример #2
0
def delete_from_watchlist():
    wl_id = plugin.args.get('wlid', [None])[0]
    if wl_id:
        dialog = Dialog()
        session.delete_from_watchlist(wl_id)
        dialog.notification("VRV",
                            "Removed from watchlist. Please refresh.",
                            time=1000,
                            sound=False)
Пример #3
0
def add_to_watchlist():
    ref_id = plugin.args.get('rid', [None])[0]
    if ref_id:
        dialog = Dialog()
        session.add_to_watchlist(ref_id)
        dialog.notification("VRV",
                            "Added to watchlist.",
                            time=1000,
                            sound=False)
 def type_filtering(self, query, separator='%20'):
     from xbmcgui import Dialog
     from urllib import quote
     if '#MOVIE&FILTER' in query:
         self.use_movie()
         query = query.replace('#MOVIE&FILTER', '')
     elif '#TV&FILTER' in query:
         self.use_TV()
         query = query.replace('#TV&FILTER', '')
         query = exception(query)  # CSI series problem
     self.title = query  # to do filtering by name
     if self.time_noti > 0:
         dialog = Dialog()
         dialog.notification(self.name_provider, query.title(), self.icon, self.time_noti)
         del Dialog
     query = quote(query.rstrip()).replace('%20', separator)
     return query
Пример #5
0
 def type_filtering(self, query, separator='%20'):
     from xbmcgui import Dialog
     from urllib import quote
     if '#MOVIE&FILTER' in query:
         self.use_movie()
         query = query.replace('#MOVIE&FILTER', '')
     elif '#TV&FILTER' in query:
         self.use_TV()
         query = query.replace('#TV&FILTER', '')
         query = exception(query)  # CSI series problem
     self.title = query  # to do filtering by name
     if self.time_noti > 0:
         dialog = Dialog()
         dialog.notification(self.name_provider, query.title(), self.icon, self.time_noti)
         del Dialog
     query = quote(query.rstrip()).replace('%20', separator)
     return query
    def type_filtering(self, info, separator='%20'):
        from xbmcgui import Dialog
        from urllib import quote

        if 'movie' == info["type"]:
            self.use_movie()
        elif 'show' == info["type"]:
            self.use_TV()
            info["query"] = exception(info["query"])  # CSI series problem
        elif 'anime' == info["type"]:
            self.use_TV()
        self.title = info["query"] + ' ' + info["extra"]  # to do filtering by name
        self.info = info
        if self.time_noti > 0:
            dialog = Dialog()
            dialog.notification(self.name_provider, info["query"].title(), self.icon, self.time_noti)
            del Dialog
        return quote(info["query"].rstrip()).replace('%20', separator)
    def type_filtering(self, info, separator='%20'):
        from xbmcgui import Dialog
        from urllib import quote

        if 'movie' == info["type"]:
            self.use_movie()
        elif 'show' == info["type"]:
            self.use_TV()
            info["query"] = exception(info["query"])  # CSI series problem
        elif 'anime' == info["type"]:
            self.use_TV()
        self.title = info["query"] + ' ' + info["extra"]  # to do filtering by name
        self.info = info
        if self.time_noti > 0:
            dialog = Dialog()
            dialog.notification(self.name_provider, info["query"].title(), self.icon, self.time_noti)
            del Dialog
        return quote(info["query"].rstrip()).replace('%20', separator)
Пример #8
0
def setup_player(playable_obj):
    timeout = 30
    failure = False
    if hasattr(playable_obj, 'streams') and hasattr(playable_obj, 'get_play_head'):
        dialog = Dialog()
        stream = session.get_cms(playable_obj.streams)
        playhead = playable_obj.get_play_head(session)

        if playhead and not playhead.completion_status:
            timestamp = format_time(playhead.position)
            res = dialog.yesno('Resume Playback',
                               'Do you want to resume playback at {}?'.format(timestamp))
            if res:
                last_pos = playhead.position
            else:
                last_pos = -1
        else:
            last_pos = -1
        if not adaptive:
            # notify the user because the adaptive stream workaround takes a few seconds
            dialog.notification("VRV", "Starting stream...", time=1000, sound=False)
        li = ListItem(playable_obj.title)
        if playable_obj.media_type == "episode":
            li.setLabel2(str(playable_obj.episode_number))
        art_cache = cache_art(playable_obj.images.kodi_setart_dict())
        try:
            parent_ac = get_parent_art(playable_obj)
        except:
            parent_ac = None
        li.setArt(art_cache)
        if parent_ac:
            li.setArt({'fanart': parent_ac.get('fanart')})
        li.setInfo('video', playable_obj.kodi_info())
        if adaptive:  # set properties required for inputstream adaptive
            li.setProperty('inputstreamaddon', 'inputstream.adaptive')
            li.setProperty('inputstream.adaptive.manifest_type', 'hls')
            li.setMimeType('application/dash+xml')
            li.setContentLookup(False)

        player = xbmc.Player()

        my_log("Setting up player object. PlayHead position is %s." % (last_pos), xbmc.LOGDEBUG)
        if stream.en_subtitle:
            li.setSubtitles([stream.en_subtitle.url])
        player.play(prepstream(stream.hls), li, False, last_pos)
        tried_seek = False
        my_log("Told Kodi to play stream URL. Now we wait...", xbmc.LOGDEBUG)
        loops = 0
        # wait for kodi to start playing
        while not player.isPlaying():
            xbmc.sleep(1000)
            loops += 1
            if loops > timeout:
                dialog.notification("VRV", "Failed to play stream. Check config?", icon=xbmcgui.NOTIFICATION_ERROR,
                                    time=5000)
                failure = True
                break
        current_pos = 0
        # main polling loop. it's probably not the most elegant/efficient way, but it works
        while player.isPlaying():
            """ if user chose to resume, tell the player to seek
                it's supposed to, per the docs, to do this in the player.play call, but due to a bug or
                my ignorance, it doesn't. so we force its hand here
                TODO: this seems to break sync with subtitles.
            """
            if not tried_seek and last_pos > 0:
                my_log("Trying to get Kodi to seek to %s." % (last_pos), xbmc.LOGDEBUG)
                player.seekTime(float(last_pos))
                xbmc.sleep(1000)  # wait for kodi to response
                current_pos = int(player.getTime())
                tried_seek = (current_pos >= last_pos)

            current_pos = int(player.getTime())
            # just get the current playback position and sleep
            xbmc.sleep(2000)
        # stopped playback (hopefully), so update our position on the server
        if not failure:
            playable_obj.post_play_head(session, current_pos)
            my_log("Done playing.", xbmc.LOGDEBUG)
        else:
            my_log("Error(s) encountered while trying to play stream.", xbmc.LOGERROR)
            if adaptive:
                my_log("InputStream Adaptive is possibly not installed or configured?", xbmc.LOGERROR)
Пример #9
0
            xbmcgui.Dialog().ok('Magnetic', 'The %s settings were copied to \n%s' % (addonid, '\n'.join(list_copy)))


elif mode == 'check':
    speed_providers[addonid] = utils.check_provider(addonid)
    speed_providers.sync()
    xbmc.executebuiltin("Container.Refresh")

elif mode == 'check_all':
    from xbmcgui import Dialog

    dialog = Dialog()
    for provider in utils.get_list_providers():
        if provider['enabled']:
            dialog.notification(provider['name'],
                                "Checking speed",
                                provider['thumbnail'], 10000)
            speed_providers[provider['addonid']] = utils.check_provider(provider['addonid'])
            speed_providers.sync()
    dialog.notification('Magnetic', 'Done!', time=50)
    del dialog
    xbmc.executebuiltin("Container.Refresh")

elif mode == 'check_group':
    erase()
    message = utils.check_group_provider()
    xbmcgui.Dialog().ok('Magnetic', 'The enabled providers got %s' % message)

elif mode == 'enable':
    erase()
    utils.enable_provider(addonid)
Пример #10
0
def notification(msg, description, icon=NOTIFICATION_ERROR):
    dialog = Dialog()
    dialog.notification(msg, description, icon)
Пример #11
0
                     __settings__.getSetting('vrv_password')
adaptive = (__settings__.getSetting('adaptive_mode') == 'true')
set_res = int(__settings__.getSetting('resolution'))
do_cache = (__settings__.getSetting('do_cache') == 'true')

vtt_font_name = __settings__.getSetting('font_name')
vtt_font_size = __settings__.getSetting('font_size')
vtt_borrow_subs = (__settings__.getSetting('borrow_subs') == 'true')
vtt_strip_dialogue = (__settings__.getSetting('strip_dialogue') == 'true')
vtt_sub_offset = int(__settings__.getSetting('sub_offset'))

if not (username and password):
    dialog = Dialog()
    dialog.notification(
        "VRV",
        "Username(email) and password not set. Check login under settings.",
        time=1000,
        sound=False)

session = VRV(__settings__.getSetting('vrv_username'),
              __settings__.getSetting('vrv_password'),
              __settings__.getSetting('oauth_key'),
              __settings__.getSetting('oauth_secret'))

if not session.logged_in:
    dialog = Dialog()
    dialog.notification("VRV",
                        "Login failed. Check login under settings.",
                        time=1000,
                        sound=False)