我们从Python开源项目中,提取了以下46个代码示例,用于说明如何使用xbmc.abortRequested()。
def geoip(self): retry = 0 query = '' while (retry < 6) and (not xbmc.abortRequested): query = self.call('geolookup', 'lang:EN', 'autoip', self.FORMAT) if query != '': retry = 6 else: retry += 1 xbmc.sleep(10000) commons.debug('GeoIP download failed') commons.debug('GeoIP data: %s' % query) data = self._parse(query) if data is not None and data.has_key('location'): location = data['location']['city'] locationid = data['location']['l'][3:] xbmcaddon.Addon().setSetting('Location1', location) xbmcaddon.Addon().setSetting('Location1id', locationid) commons.debug('Detected GeoIP location: %s' % location) else: location = '' locationid = '' return location, locationid
def forecast(self, loc, locid): try: lang = LANG[self.LANG] except: lang = 'EN' opt = 'lang:' + lang commons.debug('Weather location: %s' % locid) retry = 0 query = '' while (retry < 6) and (not xbmc.abortRequested): query = self.call(self.WEATHER_FEATURES, opt, locid, self.FORMAT) if query != '': retry = 6 else: retry += 1 xbmc.sleep(10000) commons.debug('Weather download failed') commons.trace('Forecast data: %s' % query) data = self._parse(query) if data is not None and data.has_key('response') and not data['response'].has_key('error'): self.properties(data, loc, locid) else: self.clear()
def _player(self): try: if not xbmc.abortRequested and sctop.player.isPlayingVideo() and sctop.player.scid > 0: notificationtime = 30 playTime = sctop.player.getTime() totalTime = sctop.player.getTotalTime() sctop.player.watchedTime = playTime self.timer += 1 if self.timer >= 600: sctop.player.waitForChange() self.timer = 0 data = {'scid': sctop.player.scid, 'action': 'ping', 'prog': sctop.player.timeRatio()} sctop.player.action(data) util.debug("[SC] upNext [%s] " % str((totalTime - playTime) <= int(notificationtime))) showupnext = sctop.getSettingAsBool("show_up_next") if showupnext and (totalTime - playTime) <= int(notificationtime): sctop.player.upNext() except Exception, e: bug.onExceptionRaised(e) util.debug("[SC] _player e: %s" % str(e)) pass
def get_album_json_thread(self): try: while not xbmc.abortRequested and not self.abortAlbumThreads: try: album_id = self.albumQueue.get_nowait() except: break try: self.get_album(album_id, withCache=False) except requests.HTTPError as e: r = e.response msg = _T(30505) try: msg = r.reason msg = r.json().get('userMessage') except: pass log('Error getting Album ID %s' % album_id, xbmc.LOGERROR) if r.status_code == 429 and not self.abortAlbumThreads: self.abortAlbumThreads = True log('Too many requests. Aborting Workers ...', xbmc.LOGERROR) self.albumQueue._init(9999) xbmcgui.Dialog().notification(plugin.name, msg, xbmcgui.NOTIFICATION_ERROR) except Exception, e: traceback.print_exc()
def onSourceProgressUpdate(self, percentageComplete): control = self.getControl(self.C_MAIN_LOADING_PROGRESS) if percentageComplete < 1: if control: control.setPercent(1) self.progressStartTime = datetime.datetime.now() self.progressPreviousPercentage = percentageComplete elif percentageComplete != self.progressPreviousPercentage: if control: control.setPercent(percentageComplete) self.progressPreviousPercentage = percentageComplete delta = datetime.datetime.now() - self.progressStartTime if percentageComplete < 20: self.setControlLabel(self.C_MAIN_LOADING_TIME_LEFT, strings(CALCULATING_REMAINING_TIME)) else: secondsLeft = int(delta.seconds) / float(percentageComplete) * (100.0 - percentageComplete) if secondsLeft > 30: secondsLeft -= secondsLeft % 10 self.setControlLabel(self.C_MAIN_LOADING_TIME_LEFT, strings(TIME_LEFT) % secondsLeft) return not xbmc.abortRequested and not self.isClosing
def updateTimebar(self, scheduleTimer=True): # move timebar to current time timeDelta = datetime.datetime.today() - self.viewStartDate control = self.getControl(self.C_MAIN_TIMEBAR) if control: (x, y) = control.getPosition() try: # Sometimes raises: # exceptions.RuntimeError: Unknown exception thrown from the call "setVisible" self.setControlVisible(self.C_MAIN_TIMEBAR,timeDelta.days == 0) control.setPosition(self._secondsToXposition(timeDelta.seconds), y) self.timebar.setPosition(self._secondsToXposition(timeDelta.seconds), y) except: pass if scheduleTimer and not xbmc.abortRequested and not self.isClosing: threading.Timer(1, self.updateTimebar).start()
def updateQuickTimebar(self, scheduleTimer=True): # move timebar to current time timeDelta = datetime.datetime.today() - self.quickViewStartDate control = self.getControl(self.C_QUICK_EPG_TIMEBAR) if control: (x, y) = control.getPosition() try: # Sometimes raises: # exceptions.RuntimeError: Unknown exception thrown from the call "setVisible" self.setControlVisible(self.C_QUICK_EPG_TIMEBAR,timeDelta.days == 0) except: pass control.setPosition(self._secondsToXposition(timeDelta.seconds), y) self.quicktimebar.setPosition(self._secondsToXposition(timeDelta.seconds), self.quickEpgView.top) #TODO use marker if scheduleTimer and not xbmc.abortRequested and not self.isClosing: threading.Timer(1, self.updateQuickTimebar).start()
def range(self, url): control.idle() yes = control.yesnoDialog(control.lang(32555).encode('utf-8'), '', '') if not yes: return if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(32552).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import movies items = movies.movies().get(url, idx=False) if items == None: items = [] for i in items: try: if xbmc.abortRequested == True: return sys.exit() self.add('%s (%s)' % (i['title'], i['year']), i['title'], i['year'], i['imdb'], i['tmdb'], range=True) except: pass if self.infoDialog == True: control.infoDialog(control.lang(32554).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'): control.execute('UpdateLibrary(video)')
def range(self, url): control.idle() yes = control.yesnoDialog(control.lang(32555).encode('utf-8'), '', '') if not yes: return if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(32552).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import tvshows items = tvshows.tvshows().get(url, idx=False) if items == None: items = [] for i in items: try: if xbmc.abortRequested == True: return sys.exit() self.add(i['title'], i['year'], i['imdb'], i['tvdb'], range=True) except: pass if self.infoDialog == True: control.infoDialog(control.lang(32554).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'): control.execute('UpdateLibrary(video)')
def updateWindow(name, gui): time.sleep(0.5) track_old = {'item': '', 'is_playing': False, 'shuffle_state': 'off'} while windowopen and (not xbmc.abortRequested): track = sp.get_player() if track['item'] != track_old['item'] or track['is_playing'] != track_old['is_playing'] or track['shuffle_state'] != track_old['shuffle_state'] or track['repeat_state'] != track_old['repeat_state']: # insert update functions here gui.onUpdate(track) track_old = track gui.setProgress(track['progress_ms'], track['item']['duration_ms']) time.sleep(1) # Define the GUI
def wait_if_xbmc_not_closing(espera): logger.info("tvalacarta.service_subscription.wait_if_xbmc_not_closing "+repr(espera)) while not xbmc.abortRequested and espera > 0: #logger.info("tvalacarta.service_subscription xbmc.abortRequested="+repr(xbmc.abortRequested)+" espera="+repr(espera)) # Cada segundo se comprueba si XBMC esta cerrándose, hasta que ha pasado el tiempo xbmc.sleep(1000) espera = espera - 1 if espera==0: logger.info("tvalacarta.service_subscription Wait finished")
def service(self): util.info("SC Service Started") #dialog = sctop.dialog.textviewer('heading', 'Prosim podporte vyvoj pluginu na adrese: http://stream-cinema.online/') if sctop.player is None: sctop.player = myPlayer.MyPlayer(parent=self) try: sleep_time = int(self.getSetting("start_sleep_time")) * 1000 * 60 except: sleep_time = self.sleep_time pass util.debug("[SC] start delay: %s" % str(sleep_time)) start = 0 while not xbmc.abortRequested and start < sleep_time: self._player() start += 1000 sctop.sleep(1000) del start util.debug("[SC] start sleep end") try: self.last_run = float(self.cache.get("subscription.last_run")) except: self.last_run = time.time() self.cache.set("subscription.last_run", str(self.last_run)) pass util.debug("[SC] last_rum: %s" % str(self.last_run)) if not xbmc.abortRequested and time.time() > self.last_run: self.evalSchedules() self.sleep_time = 1000 while not xbmc.abortRequested: self._player() self._sheduler() sctop.sleep(self.sleep_time) del sctop.player util.info("[SC] Shutdown")
def waitForChange(self): scutils.KODISCLib.sleep(200) while True: if xbmc.abortRequested or not self.isPlayingVideo(): return pom = xbmc.getInfoLabel('Player.FinishTime(hh:mm:ss)') if pom != self.estimateFinishTime: self.estimateFinishTime = pom break scutils.KODISCLib.sleep(100)
def sleep(sleep_time): while not xbmc.abortRequested and sleep_time > 0: sleep_time -= 100 xbmc.sleep(99)
def save_album_cache(self): numAlbums = 0 if self._config.cache_albums: album_ids = self.albumJsonBuffer.keys() for album_id in album_ids: if xbmc.abortRequested: break json_obj = self.albumJsonBuffer.get(album_id, None) if json_obj != None and 'id' in json_obj and not json_obj.get('_cached', False): numAlbums += 1 self.metaCache.insertAlbumJson(json_obj) if numAlbums > 0: log('Wrote %s from %s Albums into the MetaCache' % (numAlbums, len(album_ids))) return numAlbums
def range(self, url): control.idle() yes = control.yesnoDialog(control.lang(30425).encode('utf-8'), '', '') if not yes: return if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(30421).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import movies items = movies.movies().get(url, idx=False) if items == None: items = [] for i in items: control.log('## ITEMS %s' % i['title']) for i in items: try: if xbmc.abortRequested == True: return sys.exit() self.add('%s (%s)' % (i['title'], i['year']), i['title'], i['year'], i['imdb'], i['tmdb'], range=True) except: pass if self.infoDialog == True: control.infoDialog(control.lang(30423).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'): control.execute('UpdateLibrary(video)')
def range(self, url): control.idle() yes = control.yesnoDialog(control.lang(30425).encode('utf-8'), '', '') if not yes: return if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(30421).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import tvshows items = tvshows.tvshows().get(url, idx=False) if items == None: items = [] for i in items: try: if xbmc.abortRequested == True: return sys.exit() self.add(i['title'], i['year'], i['imdb'], i['tmdb'], i['tvdb'], i['tvrage'], range=True) except: pass if self.infoDialog == True: control.infoDialog(control.lang(30423).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'): control.execute('UpdateLibrary(video)')
def isSourceInitializationCancelled(self): return xbmc.abortRequested or self.isClosing
def checkCallStatus( name, skypeWindow ): time.sleep(10) filePath = __addon__.getSetting( 'skypexmlcontroller_var_path') + "skype2kodi\\call.xml" while __windowopen__ and (not xbmc.abortRequested): if os.path.isfile(filePath): from xml.dom import minidom xmldoc = minidom.parse(filePath) friendName = xmldoc.getElementsByTagName('name')[0].childNodes[0].nodeValue friendAvatar = xmldoc.getElementsByTagName('avatar')[0].childNodes[0].nodeValue callStatus = xmldoc.getElementsByTagName('status')[0].childNodes[0].nodeValue xbmc.log("Skype : call status is " + callStatus + " with " + friendName) if (callStatus == 'incoming'): wRinging.ringing(friendName, friendAvatar, 'incoming') #xbmc.executebuiltin('Notification(Skype,' + friendName + ' is calling !, 1000, ' + friendAvatar + ')') if (callStatus == 'outgoing'): wRinging.ringing(friendName, friendAvatar, 'outgoing') #xbmc.executebuiltin('Notification(Skype, Calling ' + friendName + ', 1000, ' + friendAvatar + ')') #if (callStatus == 'active'): # xbmc.executebuiltin('Notification(Skype, Call active with ' + friendName + ', 1000, ' + friendAvatar + ')') if (callStatus == 'finished'): wRinging.close() os.remove(filePath) xbmc.executebuiltin('Notification(Skype, Call finished with ' + friendName + ', 3000, ' + friendAvatar + ')') time.sleep(2) #--------------------------------------------------------------------------------------------------------------------- #
def _thread_tracker(self): log("in tracker thread") total_time = self.getTotalTime() total_time_min = int(get_setting("min-length")) perc_mark = int(get_setting("scr-pct")) self._is_detected = True timeout = 1000 # if total_time set and is lower than total_time_min then we do not start the loop at all and stop the thread, if total_time <= 0 or total_time > total_time_min: while self._playback_lock.isSet() and not xbmc.abortRequested: try: # The max() assures that the total time is over two minutes # preventing it from scrobbling while buffering and solving #31 if min(99, 100 * self.getTime() / max(120, total_time)) >= perc_mark: success = self._api.mark_as_watched(self._item) if not success: if timeout == 1000: log("Failed to scrobble") notify(get_str(32080)) timeout = 30000 elif (self.getTime() / total_time) > 0.95: log("Stopped scrobbling") notify(get_str(32081)) break else: log("Retrying") elif success and bool(get_setting("bubble")): self._show_bubble(self._item) break except: pass xbmc.sleep(timeout) log('track stop')
def showMessage(self, msg): #global _CALLBACK #if _CALLBACK: # try: # return _CALLBACK(msg) # except: #util.ERROR('Error in callback. Removing.') # _CALLBACK = None #else: # if xbmc.abortRequested: # raise Exception('abortRequested') # print msg.encode('ascii','replace') return True
def _delayedSeek(self): try: while not util.MONITOR.waitForAbort(0.1): if time.time() > self._delayedSeekTimeout: break if not xbmc.abortRequested: self.handler.seek(self.selectedOffset) finally: self.setProperty('button.seek', '')
def _open(self): while not xbmc.abortRequested and not self._allClosed: self._setupCurrent(self._next) self._current.modal() self._current.doClose() del self._current del self._next del self._currentOnAction
def _wait(self): while not xbmc.abortRequested and time.time() < self._endTime: xbmc.sleep(100) if xbmc.abortRequested: return if self._endTime == 0: return self._onTimeout()
def abortFlag(): return util.MONITOR.abortRequested()
def _wait(self): ct = 0 while ct < self.interval: xbmc.sleep(100) ct += 0.1 if self.force.isSet(): self.force.clear() return True if xbmc.abortRequested or self.stopped.isSet(): return False return True
def _preplayMonitor(self): self.onPrePlayStarted() while self.isPlaying() and not self.isPlayingVideo() and not self.isPlayingAudio() and not xbmc.abortRequested and not self._closed: util.MONITOR.waitForAbort(0.1) if not self.isPlayingVideo() and not self.isPlayingAudio(): self.onPlayBackFailed()
def _videoMonitor(self): hasFullScreened = False ct = 0 while self.isPlayingVideo() and not xbmc.abortRequested and not self._closed: self.currentTime = self.getTime() util.MONITOR.waitForAbort(0.1) if xbmc.getCondVisibility('Window.IsActive(videoosd) | Player.ShowInfo'): if not self.hasOSD: self.hasOSD = True self.onVideoOSD() else: self.hasOSD = False if xbmc.getCondVisibility('Window.IsActive(seekbar)'): if not self.hasSeekOSD: self.hasSeekOSD = True self.onSeekOSD() else: self.hasSeekOSD = False if xbmc.getCondVisibility('VideoPlayer.IsFullscreen'): if not hasFullScreened: hasFullScreened = True self.onVideoWindowOpened() elif hasFullScreened and not xbmc.getCondVisibility('Window.IsVisible(busydialog)'): hasFullScreened = False self.onVideoWindowClosed() ct += 1 if ct > 9: ct = 0 self.handler.tick() if hasFullScreened: self.onVideoWindowClosed()
def _audioMonitor(self): self.started = True self.handler.onMonitorInit() ct = 0 while self.isPlayingAudio() and not xbmc.abortRequested and not self._closed: self.currentTime = self.getTime() util.MONITOR.waitForAbort(0.1) ct += 1 if ct > 9: ct = 0 self.handler.tick()
def add(self, tvshowtitle, year, imdb, tvdb, range=False): if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(32552).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import episodes items = episodes.episodes().get(tvshowtitle, year, imdb, tvdb, idx=False) try: items = [{'title': i['title'], 'year': i['year'], 'imdb': i['imdb'], 'tvdb': i['tvdb'], 'season': i['season'], 'episode': i['episode'], 'tvshowtitle': i['tvshowtitle'], 'premiered': i['premiered']} for i in items] except: items = [] try: if not self.dupe_setting == 'true': raise Exception() if items == []: raise Exception() id = [items[0]['imdb'], items[0]['tvdb']] lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}') lib = unicode(lib, 'utf-8', errors='ignore') lib = json.loads(lib)['result']['tvshows'] lib = [i['title'].encode('utf-8') for i in lib if str(i['imdbnumber']) in id or (i['title'].encode('utf-8') == items[0]['tvshowtitle'] and str(i['year']) == items[0]['year'])][0] lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "tvshow", "operator": "is", "value": "%s"}]}, "properties": ["season", "episode"]}, "id": 1}' % lib) lib = unicode(lib, 'utf-8', errors='ignore') lib = json.loads(lib)['result']['episodes'] lib = ['S%02dE%02d' % (int(i['season']), int(i['episode'])) for i in lib] items = [i for i in items if not 'S%02dE%02d' % (int(i['season']), int(i['episode'])) in lib] except: pass files_added = 0 for i in items: try: if xbmc.abortRequested == True: return sys.exit() if self.check_setting == 'true': if i['episode'] == '1': self.block = True src = lib_tools.check_sources(i['title'], i['year'], i['imdb'], i['tvdb'], i['season'], i['episode'], i['tvshowtitle'], i['premiered']) if src: self.block = False if self.block == True: raise Exception() premiered = i.get('premiered', '0') if (premiered != '0' and int(re.sub('[^0-9]', '', str(premiered))) > int(self.date)) or (premiered == '0' and not self.include_unknown): continue self.strmFile(i) files_added += 1 except: pass if range == True: return if self.infoDialog == True: control.infoDialog(control.lang(32554).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo') and files_added > 0: control.execute('UpdateLibrary(video)')
def tvshows(tvshowtitle, imdb, tvdb, season, watched): control.busy() try: import sys,xbmc if not trakt.getTraktIndicatorsInfo() == False: raise Exception() from metahandler import metahandlers from resources.lib.indexers import episodes metaget = metahandlers.MetaData(preparezip=False) name = control.addonInfo('name') dialog = control.progressDialogBG dialog.create(str(name), str(tvshowtitle)) dialog.update(0, str(name), str(tvshowtitle)) metaget.get_meta('tvshow', name='', imdb_id=imdb) items = episodes.episodes().get(tvshowtitle, '0', imdb, tvdb, '0', idx=False) try: items = [i for i in items if int('%01d' % int(season)) == int('%01d' % int(i['season']))] except: pass items = [{'label': '%s S%02dE%02d' % (tvshowtitle, int(i['season']), int(i['episode'])), 'season': int('%01d' % int(i['season'])), 'episode': int('%01d' % int(i['episode']))} for i in items] for i in range(len(items)): if xbmc.abortRequested == True: return sys.exit() dialog.update(int((100 / float(len(items))) * i), str(name), str(items[i]['label'])) season, episode = items[i]['season'], items[i]['episode'] metaget.get_episode_meta('', imdb_id=imdb, season=season, episode=episode) metaget.change_watched('episode', '', imdb_id=imdb, season=season, episode=episode, watched=int(watched)) try: dialog.close() except: pass except: try: dialog.close() except: pass try: if trakt.getTraktIndicatorsInfo() == False: raise Exception() if season: from resources.lib.indexers import episodes items = episodes.episodes().get(tvshowtitle, '0', imdb, tvdb, season, idx=False) items = [(int(i['season']), int(i['episode'])) for i in items] items = [i[1] for i in items if int('%01d' % int(season)) == int('%01d' % i[0])] for i in items: if int(watched) == 7: trakt.markEpisodeAsWatched(tvdb, season, i) else: trakt.markEpisodeAsNotWatched(tvdb, season, i) else: if int(watched) == 7: trakt.markTVShowAsWatched(tvdb) else: trakt.markTVShowAsNotWatched(tvdb) trakt.cachesyncTVShows() except: pass control.refresh()
def play_video(roomid): """ Play a video by the provided path. :param path: str :return: None """ cdnindex=__addon__.getSetting("cdn") player=xbmc.Player() if cdnindex != "0": cdndict={"1":"ws","2":"ws2","3":"lx","4":"dl","5":"tct","6":""} cdn=cdndict[cdnindex] room=get_room(roomid,cdn) path,play_item=get_play_item(room) # Pass the item to the Kodi player. xbmcplugin.setResolvedUrl(_handle, True, listitem=play_item) # directly play the item. player.play(path, play_item) else: cdnlist=["ws","ws2","lx","dl","tct"] itemlist=[get_play_item(get_room(roomid,x)) for x in cdnlist] if __addon__.getSetting("excludeRTMP") == 'true': newitemlist=[] for path,x in itemlist: if 'rtmp' not in path: newitemlist.append((path,x)) itemlist=newitemlist playlist=xbmc.PlayList(xbmc.PLAYLIST_VIDEO) playlist.clear() for path,x in itemlist: playlist.add(path,x) player.play(playlist) with closing(OverlayText(alignment=0)) as overlay: #print "starting",i while not player.isPlaying(): xbmc.sleep(100) overlay.show() overlay.text=u'????????' textlist=[u'??????????'] danmu=douyudanmu(roomid) print danmu.roominfo,roomid if danmu.roominfo==None: return while not xbmc.abortRequested and player.isPlaying(): #while not xbmc.abortRequested: s=danmu.get_danmu() if len(s)!=0: textlist.append(s) if(len(textlist)>20): textlist.pop(0) overlay.text=u'\n'.join(textlist) #print "looping",i danmu.exit()
def tvshows(tvshowtitle, imdb, tvdb, season, watched): try: import sys,xbmc if not trakt.getTraktIndicatorsInfo() == False: raise Exception() from metahandler import metahandlers from resources.lib.indexers import episodes metaget = metahandlers.MetaData(preparezip=False) dialog = control.progressDialog dialog.create(control.addonInfo('name'), str(tvshowtitle)) dialog.update(0, str(tvshowtitle), control.lang(30451).encode('utf-8') + '...') metaget.get_meta('tvshow', name='', imdb_id=imdb) items = episodes.episodes().get(tvshowtitle, '0', imdb, tvdb, '0', idx=False) try: items = [i for i in items if int('%01d' % int(season)) == int('%01d' % int(i['season']))] except: pass items = [{'label': '%s S%02dE%02d' % (tvshowtitle, int(i['season']), int(i['episode'])), 'season': int('%01d' % int(i['season'])), 'episode': int('%01d' % int(i['episode']))} for i in items] for i in range(len(items)): if xbmc.abortRequested == True: return sys.exit() if dialog.iscanceled(): return dialog.close() dialog.update(int((100 / float(len(items))) * i), str(tvshowtitle), str(items[i]['label'])) season, episode = items[i]['season'], items[i]['episode'] metaget.get_episode_meta('', imdb_id=imdb, season=season, episode=episode) metaget.change_watched('episode', '', imdb_id=imdb, season=season, episode=episode, watched=int(watched)) try: dialog.close() except: pass except: try: dialog.close() except: pass try: if trakt.getTraktIndicatorsInfo() == False: raise Exception() if int(watched) == 7: trakt.markTVShowAsWatched(tvdb) else: trakt.markTVShowAsNotWatched(tvdb) trakt.cachesyncTVShows() except: pass control.refresh()
def add(self, tvshowtitle, year, imdb, tmdb, tvdb, tvrage, range=False): if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.infoDialog(control.lang(30421).encode('utf-8'), time=10000000) self.infoDialog = True from resources.lib.indexers import episodes items = episodes.episodes().get(tvshowtitle, year, imdb, tmdb, tvdb, tvrage, idx=False) try: items = [{'name': i['name'], 'title': i['title'], 'year': i['year'], 'imdb': i['imdb'], 'tmdb': i['tmdb'], 'tvdb': i['tvdb'], 'tvrage': i['tvrage'], 'season': i['season'], 'episode': i['episode'], 'tvshowtitle': i['tvshowtitle'], 'alter': i['alter'], 'date': i['premiered']} for i in items] except: items = [] try: if not self.dupe_setting == 'true': raise Exception() if items == []: raise Exception() id = [items[0]['imdb'], items[0]['tvdb']] if not items[0]['tmdb'] == '0': id += [items[0]['tmdb']] lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties" : ["imdbnumber", "title", "year"]}, "id": 1}') lib = unicode(lib, 'utf-8', errors='ignore') lib = json.loads(lib)['result']['tvshows'] lib = [i['title'].encode('utf-8') for i in lib if str(i['imdbnumber']) in id or (i['title'].encode('utf-8') == items[0]['tvshowtitle'] and str(i['year']) == items[0]['year'])][0] lib = control.jsonrpc('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "tvshow", "operator": "is", "value": "%s"}]}, "properties": ["season", "episode"]}, "id": 1}' % lib) lib = unicode(lib, 'utf-8', errors='ignore') lib = json.loads(lib)['result']['episodes'] lib = ['S%02dE%02d' % (int(i['season']), int(i['episode'])) for i in lib] items = [i for i in items if not 'S%02dE%02d' % (int(i['season']), int(i['episode'])) in lib] except: pass for i in items: try: if xbmc.abortRequested == True: return sys.exit() if self.check_setting == 'true': if i['episode'] == '1': self.block = True from resources.lib.sources import sources src = sources().checkSources(i['name'], i['title'], i['year'], i['imdb'], i['tmdb'], i['tvdb'], i['tvrage'], i['season'], i['episode'], i['tvshowtitle'], i['alter'], i['date']) if src == True: self.block = False if self.block == True: raise Exception() if int(self.date) <= int(re.sub('[^0-9]', '', str(i['date']))): from resources.lib.sources import sources src = sources().checkSources(i['name'], i['title'], i['year'], i['imdb'], i['tmdb'], i['tvdb'], i['tvrage'], i['season'], i['episode'], i['tvshowtitle'], i['alter'], i['date']) if src == False: raise Exception() self.strmFile(i) except: pass if range == True: return if self.infoDialog == True: control.infoDialog(control.lang(30423).encode('utf-8'), time=1) if self.library_setting == 'true' and not control.condVisibility('Library.IsScanningVideo'): control.execute('UpdateLibrary(video)')
def service(self): try: control.fix_metahandler() except: pass try: control.makeFile(control.dataPath) dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS service (""setting TEXT, ""value TEXT, ""UNIQUE(setting)"");") dbcur.execute("SELECT * FROM service WHERE setting = 'last_run'") fetch = dbcur.fetchone() if fetch == None: serviceProperty = "1970-01-01 23:59:00.000000" dbcur.execute("INSERT INTO service Values (?, ?)", ('last_run', serviceProperty)) dbcon.commit() else: serviceProperty = str(fetch[1]) dbcon.close() except: try: return dbcon.close() except: return try: control.window.setProperty(self.property, serviceProperty) except: return while not xbmc.abortRequested: try: serviceProperty = control.window.getProperty(self.property) t1 = datetime.timedelta(hours=6) t2 = datetime.datetime.strptime(serviceProperty, '%Y-%m-%d %H:%M:%S.%f') t3 = datetime.datetime.now() check = abs(t3 - t2) > t1 if check == False: raise Exception() if (control.player.isPlaying() or control.condVisibility('Library.IsScanningVideo')): raise Exception() serviceProperty = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') control.window.setProperty(self.property, serviceProperty) try: dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS service (""setting TEXT, ""value TEXT, ""UNIQUE(setting)"");") dbcur.execute("DELETE FROM service WHERE setting = 'last_run'") dbcur.execute("INSERT INTO service Values (?, ?)", ('last_run', serviceProperty)) dbcon.commit() dbcon.close() except: try: dbcon.close() except: pass if not control.setting('service_update') == 'true': raise Exception() info = control.setting('service_notification') or 'true' self.update(None, info=info) except: pass control.sleep(10000)
def tvshows(tvshowtitle, imdb, tvdb, season, watched): try: import sys,xbmc if not trakt.getTraktIndicatorsInfo() == False: raise Exception() from metahandler import metahandlers from resources.lib.indexers import episodes metaget = metahandlers.MetaData(preparezip=False) name = control.addonInfo('name') dialog = control.progressDialogBG dialog.create(str(name), str(tvshowtitle)) dialog.update(0, str(name), str(tvshowtitle)) metaget.get_meta('tvshow', name='', imdb_id=imdb) items = episodes.episodes().get(tvshowtitle, '0', imdb, tvdb, '0','0', idx=False) try: items = [i for i in items if int('%01d' % int(season)) == int('%01d' % int(i['season']))] except: pass items = [{'label': '%s S%02dE%02d' % (tvshowtitle, int(i['season']), int(i['episode'])), 'season': int('%01d' % int(i['season'])), 'episode': int('%01d' % int(i['episode']))} for i in items] for i in range(len(items)): if xbmc.abortRequested == True: return sys.exit() dialog.update(int((100 / float(len(items))) * i), str(name), str(items[i]['label'])) season, episode = items[i]['season'], items[i]['episode'] metaget.get_episode_meta('', imdb_id=imdb, season=season, episode=episode) metaget.change_watched('episode', '', imdb_id=imdb, season=season, episode=episode, watched=int(watched)) try: dialog.close() except: pass except Exception as e: control.log('playcount %s' % e) try: dialog.close() except: pass try: if trakt.getTraktIndicatorsInfo() == False: raise Exception() if int(watched) == 7: trakt.markTVShowAsWatched(tvdb) else: trakt.markTVShowAsNotWatched(tvdb) trakt.cachesyncTVShows() except: pass control.refresh()
def progressCallback(self, info): global _DOWNLOAD_CANCEL if xbmc.abortRequested or _DOWNLOAD_CANCEL: _DOWNLOAD_CANCEL = False raise DownloadCanceledException('abortRequested') if _DOWNLOAD_DURATION: if time.time() - _DOWNLOAD_START > _DOWNLOAD_DURATION: raise DownloadCanceledException('duration_reached') #if not _CALLBACK: # return # 'downloaded_bytes': byte_counter, # 'total_bytes': data_len, # 'tmpfilename': tmpfilename, # 'filename': filename, # 'status': 'downloading', # 'eta': eta, # 'speed': speed sofar = info.get('downloaded_bytes') total = info.get('total_bytes') if info.get('filename'): self._lastDownloadedFilePath = info.get('filename') pct = '' pct_val = 0 eta = None if sofar is not None and total: pct_val = int((float(sofar) / total) * 100) pct = ' (%s%%)' % pct_val elif _DOWNLOAD_DURATION: sofar = time.time() - _DOWNLOAD_START eta = _DOWNLOAD_DURATION - sofar pct_val = int((float(sofar) / _DOWNLOAD_DURATION) * 100) eta = eta or info.get('eta') or '' eta_str = '' if eta: eta_str = durationToShortText(eta) eta = ' ETA: ' + eta_str speed = info.get('speed') or '' speed_str = '' if speed: speed_str = simpleSize(speed) + 's' speed = ' ' + speed_str status = '%s%s:' % (info.get('status', '?').title(), pct) text = CallbackMessage(status + eta + speed, pct_val, eta_str, speed_str, info) ok = self.showMessage(text) if not ok: #util.LOG('Download canceled') raise DownloadCanceledException()
def authenticate(): addon = xbmcaddon.Addon() access_token = addon.getSetting("TRAKT_ACCESS_TOKEN") if access_token: expires = addon.getSetting("TRAKT_EXPIRES_AT") if time.time() > expires: return trakt_refresh_token() return access_token values = {"client_id": TRAKT_API_KEY} device_codes = requests.post( 'https://api.trakt.tv/oauth/device/code', data=values).json() data = { "code": device_codes["device_code"], "client_id": TRAKT_API_KEY, "client_secret": TRAKT_SECRET } start = time.time() expires_in = device_codes["expires_in"] progress_dialog = xbmcgui.DialogProgress() progress_dialog.create( "Authenticate Trakt", "Please go to https://trakt.tv/activate and enter the code", str(device_codes["user_code"])) try: time_passed = 0 while not xbmc.abortRequested and not progress_dialog.iscanceled( ) and time_passed < expires_in: try: response = requests.post( 'https://api.trakt.tv/oauth/device/token', data=data).json() except Exception, e: progress = int(100 * time_passed / expires_in) progress_dialog.update(progress) xbmc.sleep(max(device_codes["interval"], 1) * 1000) else: response = response expires_at = time.time() + 60 * 60 * 24 * 30 addon.setSetting("TRAKT_EXPIRES_AT", str(expires_at)) addon.setSetting("TRAKT_ACCESS_TOKEN", response["access_token"]) addon.setSetting("TRAKT_REFRESH_TOKEN", response["refresh_token"]) return response["access_token"] time_passed = time.time() - start finally: progress_dialog.close() del progress_dialog return None