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()
python类abortRequested()的实例源码
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 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 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