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)
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)
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
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)
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)
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)
def notification(msg, description, icon=NOTIFICATION_ERROR): dialog = Dialog() dialog.notification(msg, description, icon)
__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)