def addView(content): try: skin = control.skin skinPath = control.skinPath xml = os.path.join(skinPath,'addon.xml') file = control.openFile(xml) read = file.read().replace('\n','') file.close() try: src = re.compile('defaultresolution="(.+?)"').findall(read)[0] except: src = re.compile('<res.+?folder="(.+?)"').findall(read)[0] src = os.path.join(skinPath, src) src = os.path.join(src, 'MyVideoNav.xml') file = control.openFile(src) read = file.read().replace('\n','') file.close() views = re.compile('<views>(.+?)</views>').findall(read)[0] views = [int(x) for x in views.split(',')] for view in views: label = control.infoLabel('Control.GetLabel(%s)' % (view)) if not (label == '' or label == None): break record = (skin, content, str(view)) control.makeFile(control.dataPath) dbcon = database.connect(control.databaseFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS views (""skin TEXT, ""view_type TEXT, ""view_id TEXT, ""UNIQUE(skin, view_type)"");") dbcur.execute("DELETE FROM views WHERE skin = '%s' AND view_type = '%s'" % (record[0], record[1])) dbcur.execute("INSERT INTO views Values (?, ?, ?)", record) dbcon.commit() viewName = control.infoLabel('Container.Viewmode') control.infoDialog(control.lang(30491).encode('utf-8'), heading=viewName) except: return
def play(self, name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date, meta, url): control.log('############# PLAY # %s' % url) try: if not control.infoLabel('Container.FolderPath').startswith( 'plugin://'): control.playlist.clear() control.resolve(int(sys.argv[1]), True, control.item(path='')) control.execute('Dialog.Close(okdialog)') if imdb == '0': imdb = '0000000' imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) content = 'movie' if tvshowtitle == None else 'episode' self.sources = self.getSources(name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date) if self.sources == []: raise Exception() self.sources = self.sourcesFilter() if control.window.getProperty('PseudoTVRunning') == 'True': url = self.sourcesDirect() elif url == 'dialog://': url = self.sourcesDialog() elif url == 'direct://': url = self.sourcesDirect() elif not control.infoLabel('Container.FolderPath').startswith( 'plugin://') and control.setting( 'autoplay_library') == 'false': url = self.sourcesDialog() elif control.infoLabel('Container.FolderPath').startswith( 'plugin://') and control.setting('autoplay') == 'false': url = self.sourcesDialog() else: url = self.sourcesDirect() if url == None: raise Exception() if url == 'close://': return if control.setting('playback_info') == 'true': control.infoDialog(self.selectedSource, heading=name) control.sleep(200) from resources.lib.libraries.player import player player().run(content, name, url, year, imdb, tvdb, meta) return url except: control.infoDialog(control.lang(30501).encode('utf-8'))
def run(self, url): title = control.infoLabel('ListItem.Label') image = control.infoLabel('ListItem.Icon') item = control.item(path=url, iconImage=image, thumbnailImage=image) item.setInfo(type='Video', infoLabels={'title': title}) control.player.play(url, item) for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000)
def run(self, url): title = control.infoLabel('ListItem.Label') image = control.infoLabel('ListItem.Icon') item = control.item(path=url, iconImage=image, thumbnailImage=image) item.setInfo(type='Video', infoLabels = {'title': title}) control.player.play(url, item) for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000)
def play(self, name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date, url): try: if imdb == "0": imdb = "0000000" imdb = "tt" + re.sub("[^0-9]", "", str(imdb)) content = "movie" if tvshowtitle == None else "episode" self.sources = self.getSources( name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date ) if self.sources == []: raise Exception() self.sources = self.sourcesFilter() if control.window.getProperty("PseudoTVRunning") == "True": url = self.sourcesDirect() elif url == "dialog://": url = self.sourcesDialog() elif url == "direct://": url = self.sourcesDirect() elif ( not control.infoLabel("Container.FolderPath").startswith("plugin://") and control.setting("autoplay_library") == "false" ): url = self.sourcesDialog() elif ( control.infoLabel("Container.FolderPath").startswith("plugin://") and control.setting("autoplay") == "false" ): url = self.sourcesDialog() else: url = self.sourcesDirect() if url == None: raise Exception() if url == "close://": return if control.setting("playback_info") == "true": control.infoDialog(self.selectedSource, heading=name) from resources.lib.libraries.player import player player().run(content, name, url, imdb, tvdb) return url except: control.infoDialog(control.lang(30501).encode("utf-8")) pass
def playItem(self, content, name, imdb, tvdb, source): try: next = [] prev = [] for i in range(1,1000000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) u = json.loads(dict(urlparse.parse_qsl(u.replace('?','')))['source'])[0] next.append(u) except: break for i in range(-1000000,0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) u = json.loads(dict(urlparse.parse_qsl(u.replace('?','')))['source'])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]['source'], items[0]['quality'] items = [i for i in items+next+prev if i['quality'] == quality and i['source'] == source][:15] items += [i for i in next+prev if i['quality'] == quality and not i['source'] == source][:35] block = None for i in items: try: if i['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, i['url'], i['provider']) w.start() ; time.sleep(20) if w.is_alive() == True: block = i['source'] if self.url == None: raise Exception() if control.setting('playback_info') == 'true': control.infoDialog(i['label'], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, imdb, tvdb) return self.url except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def play(self, name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date, meta, url): try: if not control.infoLabel('Container.FolderPath').startswith('plugin://'): control.playlist.clear() control.resolve(int(sys.argv[1]), True, control.item(path=None)) control.execute('Dialog.Close(okdialog)') if imdb == '0': imdb = '0000000' imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) content = 'movie' if tvshowtitle == None else 'episode' self.sources = self.getSources(name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date) if self.sources == []: raise Exception() self.sources = self.sourcesFilter() if control.window.getProperty('PseudoTVRunning') == 'True': url = self.sourcesDirect() elif url == 'dialog://': url = self.sourcesDialog() elif url == 'direct://': url = self.sourcesDirect() elif not control.infoLabel('Container.FolderPath').startswith('plugin://') and control.setting('autoplay_library') == 'false': url = self.sourcesDialog() elif control.infoLabel('Container.FolderPath').startswith('plugin://') and control.setting('autoplay') == 'false': url = self.sourcesDialog() else: url = self.sourcesDirect() if url == None: raise Exception() if url == 'close://': return if control.setting('playback_info') == 'true': control.infoDialog(self.selectedSource, heading=name) try: self.progressDialog.close() except: pass control.sleep(200) from resources.lib.libraries.player import player player().run(content, name, url, year, imdb, tvdb, meta) return url except: control.infoDialog(control.lang(30501).encode('utf-8'))
def addView(content): try: # import pydevd # pydevd.settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True) skin = control.skin record = (skin, content, str(control.getCurrentViewId())) control.makeFile(control.dataPath) dbcon = database.connect(control.viewsFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS views (" "skin TEXT, " "view_type TEXT, " "view_id TEXT, " "UNIQUE(skin, view_type)" ");") dbcur.execute( "DELETE FROM views WHERE skin = '%s' AND view_type = '%s'" % (record[0], record[1])) dbcur.execute("INSERT INTO views Values (?, ?, ?)", record) dbcon.commit() viewName = control.infoLabel('Container.Viewmode') skinName = control.addon(skin).getAddonInfo('name') skinIcon = control.addon(skin).getAddonInfo('icon') control.infoDialog(viewName, heading=skinName, sound=True, icon=skinIcon) except: return
def NBANFL_Stream(url, image, fanart): try: title = control.infoLabel('ListItem.Label') html = client.request(url) html = html.split('>english<')[-1] link = client.parseDOM(html, "iframe", ret="src")[0] link = link.replace('https://videoapi.my.mail.ru/videos/embed/mail/', 'http://videoapi.my.mail.ru/videos/mail/') link = link.replace('html', 'json') cookieJar = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar), urllib2.HTTPHandler()) conn = urllib2.Request(link) connection = opener.open(conn) f = connection.read() connection.close() js = json.loads(f) for cookie in cookieJar: token = cookie.value js = js['videos'] for el in js: addDirectoryItem(title, 'Play_Main', image, image, fanart, url=el['url'] + '|Cookie=video_key=' + token) endDirectory() except: pass
def getVideoInfo(self, content, name, year, imdb, tvdb): try: self.loadingTime = time.time() self.totalTime = 0 self.currentTime = 0 self.folderPath = control.infoLabel('Container.FolderPath') self.name = name self.year = year self.content = content self.file = self.name + '.strm' self.file = self.file.translate(None, '\/:*?"<>|').strip('.') self.imdb = 'tt' + imdb if imdb.isdigit() else imdb self.tvdb = tvdb if not tvdb == None else '0' except: pass try: if self.content == 'movie': self.title = re.compile('(.+?) [(]\d{4}[)]$').findall( self.name)[0] elif self.content == 'episode': self.tvshowtitle, self.season, self.episode = re.compile( '(.+?) S(\d*)E(\d*)$').findall(self.name)[0] self.season, self.episode = '%01d' % int( self.season), '%01d' % int(self.episode) self.file2 = '%s (%s) S%02dE%02d.strm' % ( self.tvshowtitle.translate(None, '\/:*?"<>|'), self.year, int(self.season), int(self.episode)) elif self.content == 'live': self.title = self.name except: pass try: if control.setting('resume_playback') == 'true': self.offset = bookmarks.getBookmark(self.name, self.imdb) if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) hours, minutes = divmod(minutes, 60) yes = control.yesnoDialog( '%s %02d:%02d:%02d' % (control.lang(30461).encode('utf-8'), hours, minutes, seconds), '', '', self.name, control.lang(30463).encode('utf-8'), control.lang(30462).encode('utf-8')) if yes: self.offset = '0' except: pass try: if self.content == 'movie': control.window.setProperty('script.trakt.ids', json.dumps({'imdb': self.imdb})) elif self.content == 'episode': control.window.setProperty('script.trakt.ids', json.dumps({'tvdb': self.tvdb})) except: pass
def play(self, name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date, url): try: imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) content = 'movie' if tvshowtitle == None else 'episode' self.sources = self.getSources(name, title, year, imdb, tmdb, tvdb, tvrage, season, episode, tvshowtitle, alter, date) if self.sources == []: raise Exception() self.sources = self.sourcesFilter() if control.window.getProperty('PseudoTVRunning') == 'True': url = self.sourcesDirect() elif url == 'dialog://': url = self.sourcesDialog() elif url == 'direct://': url = self.sourcesDirect() elif not control.infoLabel('Container.FolderPath').startswith( 'plugin://') and control.setting( 'autoplay_library') == 'false': url = self.sourcesDialog() elif control.infoLabel('Container.FolderPath').startswith( 'plugin://') and control.setting('autoplay') == 'false': url = self.sourcesDialog() else: url = self.sourcesDirect() if url == None: raise Exception() if url == 'close://': return if control.setting('playback_info') == 'true': control.infoDialog(self.selectedSource, heading=name) from resources.lib.libraries.player import player player().run(content, name, url, imdb, tvdb) return url except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def run(self, title, year, season, episode, imdb, tvdb, url, meta): try: control.sleep(200) self.totalTime = 0 self.currentTime = 0 self.content = 'movie' if season == None or episode == None else 'episode' self.title = title self.year = year self.name = urllib.quote_plus(title) + urllib.quote_plus( ' (%s)' % year) if self.content == 'movie' else urllib.quote_plus( title) + urllib.quote_plus(' S%02dE%02d' % (int(season), int(episode))) self.name = urllib.unquote_plus(self.name) self.season = '%01d' % int( season) if self.content == 'episode' else None self.episode = '%01d' % int( episode) if self.content == 'episode' else None self.DBID = None self.imdb = imdb if not imdb == None else '0' self.tvdb = tvdb if not tvdb == None else '0' self.ids = {'imdb': self.imdb, 'tvdb': self.tvdb} self.ids = dict( (k, v) for k, v in self.ids.iteritems() if not v == '0') self.offset = bookmarks().get(self.name, self.year) poster, thumb, meta = self.getMeta(meta) self.meta = meta item = control.item(path=url) item.setArt({ 'icon': thumb, 'thumb': thumb, 'poster': poster, 'tvshow.poster': poster, 'season.poster': poster }) item.setInfo(type='Video', infoLabels=meta) if 'plugin' in control.infoLabel('Container.PluginName'): control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) control.window.setProperty('script.trakt.ids', json.dumps(self.ids)) self.keepPlaybackAlive(meta) control.window.clearProperty('script.trakt.ids') except: return
def anime(self, url): try: if url == self.animesearch_link: k = control.keyboard('', '') ; k.setHeading(control.infoLabel('ListItem.Label')) ; k.doModal() if k.getText() == '' or not k.isConfirmed(): return url = self.animesearch_link % urllib.quote_plus(k.getText()) self.list = cache.get(self.anime_list, 0, url) for i in self.list: i.update({'action': 'phtoons.animestreams'}) for i in self.list: i.update({'fanart': self.anime_fanart}) self.addDirectory(self.list) return self.list except: pass
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [(control.lang(32516).encode('utf-8'), '/sync/collection')] items += [(control.lang(32517).encode('utf-8'), '/sync/collection/remove')] items += [(control.lang(32518).encode('utf-8'), '/sync/watchlist')] items += [(control.lang(32519).encode('utf-8'), '/sync/watchlist/remove')] items += [(control.lang(32520).encode('utf-8'), '/users/me/lists/%s/items')] result = getTraktAsJson('/users/me/lists') lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i // 2] for i in range(len(lists) * 2)] for i in range(0, len(lists), 2): lists[i] = ((control.lang(32521) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = ( (control.lang(32522) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], control.lang(32515).encode('utf-8')) if select == -1: return elif select == 4: t = control.lang(32520).encode('utf-8') k = control.keyboard('', t); k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return result = __getTrakt('/users/me/lists', post={"name": new, "privacy": "private"})[0] try: slug = utils.json_loads_as_str(result)['ids']['slug'] except: return control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon='ERROR') result = __getTrakt(items[select][1] % slug, post=post)[0] else: result = __getTrakt(items[select][1], post=post)[0] icon = control.infoLabel('ListItem.Icon') if not result == None else 'ERROR' control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon=icon) except: return
def cartoons(self, url): try: if url == self.cartoonsearch_link: k = control.keyboard('', '') ; k.setHeading(control.infoLabel('ListItem.Label')) ; k.doModal() if k.getText() == '' or not k.isConfirmed(): return url = self.cartoonsearch_link % urllib.quote_plus(k.getText().split()[0]) self.list = cache.get(self.cartoon_list, 0, url) for i in self.list: i.update({'nextaction': 'phtoons.cartoons', 'nexticon': self.cartoons_image % (random.randint(1,10)), 'nextfanart': self.cartoons_fanart}) for i in self.list: i.update({'action': 'phtoons.cartoonstreams'}) for i in self.list: i.update({'fanart': self.cartoons_fanart}) self.addDirectory(self.list) return self.list except: pass
def getVideoInfo(self, content, name, year, imdb, tvdb): try: self.loadingTime = time.time() self.totalTime = 0 ; self.currentTime = 0 self.folderPath = control.infoLabel('Container.FolderPath') self.name = name ; self.year = year ; self.content = content self.file = self.name + '.strm' self.file = self.file.translate(None, '\/:*?"<>|').strip('.') self.imdb = 'tt' + imdb if imdb.isdigit() else imdb self.tvdb = tvdb if not tvdb == None else '0' except: pass try: if self.content == 'movie': self.title = re.compile('(.+?) [(]\d{4}[)]$').findall(self.name)[0] elif self.content == 'episode': self.tvshowtitle, self.season, self.episode = re.compile('(.+?) S(\d*)E(\d*)$').findall(self.name)[0] self.season, self.episode = '%01d' % int(self.season), '%01d' % int(self.episode) self.file2 = '%s (%s) S%02dE%02d.strm' % (self.tvshowtitle.translate(None, '\/:*?"<>|'), self.year, int(self.season), int(self.episode)) elif self.content == 'live': self.title = self.name except: pass try: if control.setting('resume_playback') == 'true': self.offset = bookmarks.getBookmark(self.name, self.imdb) if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) ; hours, minutes = divmod(minutes, 60) yes = control.yesnoDialog('%s %02d:%02d:%02d' % (control.lang(30461).encode('utf-8'), hours, minutes, seconds), '', '', self.name, control.lang(30463).encode('utf-8'), control.lang(30462).encode('utf-8')) if yes: self.offset = '0' except: pass try: if self.content == 'movie': control.window.setProperty('script.trakt.ids', json.dumps({'imdb': self.imdb})) elif self.content == 'episode': control.window.setProperty('script.trakt.ids', json.dumps({'tvdb': self.tvdb})) except: pass
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [(control.lang(32516).encode('utf-8'), '/sync/collection')] items += [(control.lang(32517).encode('utf-8'), '/sync/collection/remove')] items += [(control.lang(32518).encode('utf-8'), '/sync/watchlist')] items += [(control.lang(32519).encode('utf-8'), '/sync/watchlist/remove')] items += [(control.lang(32520).encode('utf-8'), '/users/me/lists/%s/items')] result = getTrakt('/users/me/lists') result = json.loads(result) lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in range(len(lists)*2)] for i in range(0, len(lists), 2): lists[i] = ((control.lang(32521) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = ((control.lang(32522) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], control.lang(32515).encode('utf-8')) if select == -1: return elif select == 4: t = control.lang(32520).encode('utf-8') k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return result = getTrakt('/users/me/lists', post={"name": new, "privacy": "private"}) try: slug = json.loads(result)['ids']['slug'] except: return control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon='ERROR') result = getTrakt(items[select][1] % slug, post=post) else: result = getTrakt(items[select][1], post=post) icon = control.infoLabel('ListItem.Icon') if not result == None else 'ERROR' control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon=icon) except: return
def NBANFL_Stream(url, image, fanart): try: title = control.infoLabel("ListItem.Label") html = client.request(url) html = html.split(">english<")[-1] link = client.parseDOM(html, "iframe", ret="src")[0] link = link.replace("https://videoapi.my.mail.ru/videos/embed/mail/", "http://videoapi.my.mail.ru/videos/mail/") link = link.replace("html", "json") cookieJar = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar), urllib2.HTTPHandler()) conn = urllib2.Request(link) connection = opener.open(conn) f = connection.read() connection.close() js = json.loads(f) for cookie in cookieJar: token = cookie.value js = js["videos"] for el in js: addDirectoryItem(title, "Play_Main", image, image, fanart, url=el["url"] + "|Cookie=video_key=" + token) endDirectory() except: pass
def playItem(self, content, name, imdb, tvdb, source): try: next = [] prev = [] total = [] for i in range(1, 10000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = json.loads( dict(urlparse.parse_qsl(u.replace('?', '')))['source'])[0] next.append(u) except: break for i in range(-10000, 0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = json.loads( dict(urlparse.parse_qsl(u.replace('?', '')))['source'])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]['source'], items[0]['quality'] items = [ i for i in items + next + prev if i['quality'] == quality and i['source'] == source ][:10] items += [ i for i in next + prev if i['quality'] == quality and not i['source'] == source ][:10] import xbmc dialog = control.progressDialog dialog.create(control.addonInfo('name'), '') dialog.update(0) block = None for i in range(len(items)): try: dialog.update(int((100 / float(len(items))) * i), str(items[i]['label'])) if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]['url'], items[i]['provider']) w.start() for x in range(0, 15 * 2): if dialog.iscanceled(): return dialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(0.5) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() try: dialog.close() except: pass if control.setting('playback_info') == 'true': control.infoDialog(items[i]['label'], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, imdb, tvdb) return self.url except: pass try: dialog.close() except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def playItem(self, content, name, year, imdb, tvdb, source): try: control.resolve(int(sys.argv[1]), True, control.item(path='')) control.execute('Dialog.Close(okdialog)') next = [] prev = [] total = [] meta = None for i in range(1, 10000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?', ''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] next.append(u) except: break for i in range(-10000, 0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?', ''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]['source'], items[0]['quality'] items = [ i for i in items + next + prev if i['quality'] == quality and i['source'] == source ][:10] items += [ i for i in next + prev if i['quality'] == quality and not i['source'] == source ][:10] self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0) block = None for i in range(len(items)): try: self.progressDialog.update( int((100 / float(len(items))) * i), str(items[i]['label']), str(' ')) if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]['url'], items[i]['provider']) w.start() m = '' for x in range(3600): if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() k = control.condVisibility( 'Window.IsActive(virtualkeyboard)') if k: m += '1' m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(1) for x in range(30): if m == '': break if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(1) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() try: self.progressDialog.close() except: pass control.sleep(200) if control.setting('playback_info') == 'true': control.infoDialog(items[i]['label'], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, year, imdb, tvdb, meta) return self.url except: pass try: self.progressDialog.close() except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def getMeta(self, meta): try: poster = meta['poster'] if 'poster' in meta else '0' thumb = meta['thumb'] if 'thumb' in meta else poster if poster == '0': poster = control.addonPoster() return (poster, thumb, meta) except: pass try: if not self.content == 'movie': raise Exception() meta = control.jsonrpc( '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"filter":{"or": [{"field": "year", "operator": "is", "value": "%s"}, {"field": "year", "operator": "is", "value": "%s"}, {"field": "year", "operator": "is", "value": "%s"}]}, "properties" : ["title", "originaltitle", "year", "genre", "studio", "country", "runtime", "rating", "votes", "mpaa", "director", "writer", "plot", "plotoutline", "tagline", "thumbnail", "file"]}, "id": 1}' % (self.year, str(int(self.year) + 1), str(int(self.year) - 1))) meta = unicode(meta, 'utf-8', errors='ignore') meta = json.loads(meta)['result']['movies'] t = cleantitle.get(self.title) meta = [ i for i in meta if self.year == str(i['year']) and (t == cleantitle.get( i['title']) or t == cleantitle.get(i['originaltitle'])) ][0] for k, v in meta.iteritems(): if type(v) == list: try: meta[k] = str(' / '.join( [i.encode('utf-8') for i in v])) except: meta[k] = '' else: try: meta[k] = str(v.encode('utf-8')) except: meta[k] = str(v) if not 'plugin' in control.infoLabel('Container.PluginName'): self.DBID = meta['movieid'] poster = thumb = meta['thumbnail'] return (poster, thumb, meta) except: pass try: if not self.content == 'episode': raise Exception() meta = control.jsonrpc( '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"filter":{"or": [{"field": "year", "operator": "is", "value": "%s"}, {"field": "year", "operator": "is", "value": "%s"}, {"field": "year", "operator": "is", "value": "%s"}]}, "properties" : ["title", "year", "thumbnail", "file"]}, "id": 1}' % (self.year, str(int(self.year) + 1), str(int(self.year) - 1))) meta = unicode(meta, 'utf-8', errors='ignore') meta = json.loads(meta)['result']['tvshows'] t = cleantitle.get(self.title) meta = [ i for i in meta if self.year == str(i['year']) and t == cleantitle.get(i['title']) ][0] tvshowid = meta['tvshowid'] poster = meta['thumbnail'] meta = control.jsonrpc( '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params":{ "tvshowid": %d, "filter":{"and": [{"field": "season", "operator": "is", "value": "%s"}, {"field": "episode", "operator": "is", "value": "%s"}]}, "properties": ["title", "season", "episode", "showtitle", "firstaired", "runtime", "rating", "director", "writer", "plot", "thumbnail", "file"]}, "id": 1}' % (tvshowid, self.season, self.episode)) meta = unicode(meta, 'utf-8', errors='ignore') meta = json.loads(meta)['result']['episodes'][0] for k, v in meta.iteritems(): if type(v) == list: try: meta[k] = str(' / '.join( [i.encode('utf-8') for i in v])) except: meta[k] = '' else: try: meta[k] = str(v.encode('utf-8')) except: meta[k] = str(v) if not 'plugin' in control.infoLabel('Container.PluginName'): self.DBID = meta['episodeid'] thumb = meta['thumbnail'] return (poster, thumb, meta) except: pass poster, thumb, meta = '', '', {'title': self.name} return (poster, thumb, meta)
def playItem(self, content, name, year, imdb, tvdb, source): try: control.resolve(int(sys.argv[1]), True, control.item(path='')) control.execute('Dialog.Close(okdialog)') next = [] ; prev = [] ; total = [] meta = None for i in range(1,10000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?',''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] next.append(u) except: break for i in range(-10000,0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) if u in total: raise Exception() total.append(u) u = dict(urlparse.parse_qsl(u.replace('?',''))) if 'meta' in u: meta = u['meta'] u = json.loads(u['source'])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]['source'], items[0]['quality'] items = [i for i in items+next+prev if i['quality'] == quality and i['source'] == source][:10] items += [i for i in next+prev if i['quality'] == quality and not i['source'] == source][:10] self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0) block = None for i in range(len(items)): try: self.progressDialog.update(int((100 / float(len(items))) * i), str(items[i]['label']), str(' ')) if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]['url'], items[i]['provider']) w.start() m = '' for x in range(3600): if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() k = control.condVisibility('Window.IsActive(virtualkeyboard)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(1) for x in range(30): if m == '': break if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(1) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() try: self.progressDialog.close() except: pass control.sleep(200) if control.setting('playback_info') == 'true': control.infoDialog(items[i]['label'], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, year, imdb, tvdb, meta) return self.url except: pass try: self.progressDialog.close() except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def playItem(self, content, name, imdb, tvdb, source): try: next = [] prev = [] total = [] for i in range(1, 10000): try: u = control.infoLabel("ListItem(%s).FolderPath" % str(i)) if u in total: raise Exception() total.append(u) u = json.loads(dict(urlparse.parse_qsl(u.replace("?", "")))["source"])[0] next.append(u) except: break for i in range(-10000, 0)[::-1]: try: u = control.infoLabel("ListItem(%s).FolderPath" % str(i)) if u in total: raise Exception() total.append(u) u = json.loads(dict(urlparse.parse_qsl(u.replace("?", "")))["source"])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]["source"], items[0]["quality"] items = [i for i in items + next + prev if i["quality"] == quality and i["source"] == source][:10] items += [i for i in next + prev if i["quality"] == quality and not i["source"] == source][:10] import xbmc dialog = control.progressDialog dialog.create(control.addonInfo("name"), "") dialog.update(0) block = None for i in range(len(items)): try: dialog.update(int((100 / float(len(items))) * i), str(items[i]["label"])) if items[i]["source"] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]["url"], items[i]["provider"]) w.start() for x in range(0, 15 * 2): if dialog.iscanceled(): return dialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(0.5) if w.is_alive() == True: block = items[i]["source"] if self.url == None: raise Exception() try: dialog.close() except: pass if control.setting("playback_info") == "true": control.infoDialog(items[i]["label"], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, imdb, tvdb) return self.url except: pass try: dialog.close() except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode("utf-8")) pass
def playItem(self, content, name, imdb, tvdb, source): try: next = [] prev = [] for i in range(1, 1000000): try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) u = json.loads( dict(urlparse.parse_qsl(u.replace('?', '')))['source'])[0] next.append(u) except: break for i in range(-1000000, 0)[::-1]: try: u = control.infoLabel('ListItem(%s).FolderPath' % str(i)) u = json.loads( dict(urlparse.parse_qsl(u.replace('?', '')))['source'])[0] prev.append(u) except: break items = json.loads(source) source, quality = items[0]['source'], items[0]['quality'] items = [ i for i in items + next + prev if i['quality'] == quality and i['source'] == source ][:15] items += [ i for i in next + prev if i['quality'] == quality and not i['source'] == source ][:35] block = None for i in items: try: if i['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, i['url'], i['provider']) w.start() time.sleep(20) if w.is_alive() == True: block = i['source'] if self.url == None: raise Exception() if control.setting('playback_info') == 'true': control.infoDialog(i['label'], heading=name) from resources.lib.libraries.player import player player().run(content, name, self.url, imdb, tvdb) return self.url except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass