def playItem(url, dialog=None): try: url = resolveUrl(url) if url == None: return control.infoDialog(control.lang(30705).encode('utf-8')) meta = {} for i in ['title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline']: try: meta[i] = control.infoLabel('listitem.%s' % i) except: pass meta['title'] = cleantitle(meta['title']) meta = dict((k,v) for k, v in meta.iteritems() if not v == '') if not 'title' in meta: meta['title'] = cleantitle(control.infoLabel('listitem.label')) icon = control.infoLabel('listitem.icon') title = meta['title'] try: if not '.f4m'in url: raise Exception() ext = url.split('?')[0].split('&')[0].split('|')[0].rsplit('.')[-1].replace('/', '').lower() if not ext == 'f4m': raise Exception() from resources.lib.modules.f4mproxy.F4mProxy import f4mProxyHelper return f4mProxyHelper().playF4mLink(url, title, None, None, '', icon) except: pass item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels = meta) control.player.play(url, item) except: pass
def play(self, name, url=None, windowedtrailer=0): try: url = self.worker(name, url) if not url: return title = control.infoLabel('listitem.title') if not title: title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels={'title': title}) control.player.play(url, item, windowedtrailer) if windowedtrailer == 1: # The call to the play() method is non-blocking. So we delay further script execution to keep the script alive at this spot. # Otherwise this script will continue and probably already be garbage collected by the time the trailer has ended. control.sleep(1000) # Wait until playback starts. Less than 900ms is too short (on my box). Make it one second. while control.player.isPlayingVideo(): control.sleep(1000) # Close the dialog. # Same behaviour as the fullscreenvideo window when : # the media plays to the end, # or the user pressed one of X, ESC, or Backspace keys on the keyboard/remote to stop playback. control.execute("Dialog.Close(%s, true)" % control.getCurrentDialogId) except: pass
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.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') control.infoDialog(control.lang(30491).encode('utf-8'), heading=viewName) except: return
def search(self, query=None): try: if control.infoLabel('Container.PluginName') == '': return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty('%s.movie.search' % control.addonInfo('id')) elif query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) ; k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty('%s.movie.search' % control.addonInfo('id'), self.query) url = self.search_link % urllib.quote_plus(self.query) self.list = cache.get(self.trakt_list, 0, url) self.worker() self.movieDirectory(self.list) return self.list except: return
def play(self, url, content=None): try: base = url url = resolver().get(url) if url == False: return control.execute('ActivateWindow(busydialog)') url = resolver().process(url) control.execute('Dialog.Close(busydialog)') if url == None: return control.infoDialog(control.lang(30705).encode('utf-8')) if url == False: return meta = {} for i in ['title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline']: try: meta[i] = control.infoLabel('listitem.%s' % i) except: pass meta = dict((k,v) for k, v in meta.iteritems() if not v == '') if not 'title' in meta: meta['title'] = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') self.name = meta['title'] ; self.year = meta['year'] if 'year' in meta else '0' self.getbookmark = True if (content == 'movies' or content == 'episodes') else False self.offset = bookmarks().get(self.name, self.year) if not 'tvplayer' in url: if not 'itv' in url: f4m = resolver().f4m(url, self.name) if not f4m == None: return item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels = meta) control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.totalTime = 0 ; self.currentTime = 0 for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000) while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() except: pass control.sleep(2000) control.sleep(5000) except: pass
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 radioResolve(url): url = radio1fmResolve(url) title = control.infoLabel('ListItem.Label') image = control.infoLabel('ListItem.Icon') meta = {'title': title, 'album': title, 'artist': title, 'comment': title} item = control.item(path=url, iconImage=image, thumbnailImage=image) try: item.setArt({'icon': image}) except: pass item.setInfo(type='Music', infoLabels = meta) control.player.play(url, item)
def radioResolve(url): url = radio1fmResolve(url) url = client.request(url, output='geturl') title = control.infoLabel('ListItem.Label') image = control.infoLabel('ListItem.Icon') meta = {'title': title, 'album': title, 'artist': title, 'comment': title} item = control.item(path=url, iconImage=image, thumbnailImage=image) item.setArt({'icon': image}) item.setInfo(type='Music', infoLabels = meta) control.player.play(url, item)
def play(self, title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select): try: sysloc = [urlparse.urlparse(sys.argv[0]).netloc, '', 'plugin.video.live.streamspro', 'plugin.video.tinklepad'] sysplg = True if control.infoLabel('Container.PluginName') in sysloc else False syslib = False #True if '.strm' in str(control.infoLabel('ListItem.FileName')) else False items = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered) select = control.setting('hosts.mode') if select == None else select title = tvshowtitle if not tvshowtitle == None else title url = None if syslib == True or sysplg == False: items = [] if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve(int(sys.argv[1]), True, control.item(path=str(self.sourcesDirect(items)))) if len(items) > 0: if select == '1' and 'plugin' in control.infoLabel('Container.PluginName'): control.window.clearProperty(self.itemProperty) control.window.setProperty(self.itemProperty, json.dumps(items)) control.window.clearProperty(self.metaProperty) control.window.setProperty(self.metaProperty, meta) control.sleep(200) return control.execute('Container.Update(%s?action=addItem&title=%s)' % (sys.argv[0], urllib.quote_plus(title.encode('utf-8')))) elif select == '0' or select == '1': url = self.sourcesDialog(items) else: url = self.sourcesDirect(items) if url == None: return self.errorForSources() meta = json.loads(meta) from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tvdb, url, meta) except: pass
def run(self, title, url, meta): try: control.sleep(200) self.totalTime = 0 ; self.currentTime = 0 self.name = '%s' % title poster = meta['poster'].encode('utf-8') if 'poster' in meta else '0' title = meta['title'].encode('utf-8') if 'title' in meta else self.name print ("PLAYER ITEMS", title, url, poster) if url.startswith('http') and '.m3u8' in url:url = url elif "|directplay" in url:url = url.split('|')[0] else: hmf = urlresolver.HostedMediaFile(url=url, include_disabled=True, include_universal=True) url = hmf.resolve() #control.do_block_check(False) item = control.item(path=url) item.setArt({'icon': poster, 'thumb': poster, 'poster': poster, 'tvshow.poster': poster, 'season.poster': poster}) item.setInfo(type='Video', infoLabels={ "Title": title} ) print ("PLAYER ITEMS 2", title, url, meta) if 'plugin' in control.infoLabel('Container.PluginName'): control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) except: return
def search(self, query=None): try: if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty('%s.movie.search' % control.addonInfo('id')) elif query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) ; k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty('%s.movie.search' % control.addonInfo('id'), self.query) url = self.search_link % urllib.quote_plus(self.query) self.list = cache.get(self.trakt_list, 0, url) self.worker() self.movieDirectory(self.list) return self.list except: return
def set_reuselanguageinvoker(): try: addon_xml = control.joinPath(control.addonPath('plugin.video.dg'), 'addon.xml') tree = ET.parse(addon_xml) root = tree.getroot() for item in root.iter('reuselanguageinvoker'): current_value = str(item.text) if current_value: new_value = 'true' if current_value == 'false' else 'false' if not control.yesnoDialog( control.lang(33018) % (current_value, new_value), '', ''): return control.openSettings(query='12.6') if new_value == 'true': if not control.yesnoDialog(control.lang(33019), '', ''): return item.text = new_value hash_start = gen_file_hash(addon_xml) tree.write(addon_xml) hash_end = gen_file_hash(addon_xml) if hash_start != hash_end: control.setSetting('reuse.languageinvoker', new_value) control.okDialog( message='%s\n%s' % (control.lang(33017) % new_value, control.lang(33020))) else: return control.okDialog(message=33021) current_profile = control.infoLabel('system.profilename') control.execute('LoadProfile(%s)' % current_profile) except: from resources.lib.modules import log_utils log_utils.error()
def removefromwatchlist(name, imdb, tvdb, content): try: post = { "movies": [{ "ids": { "imdb": imdb } }] } if content == 'movie' else { "shows": [{ "ids": { "tvdb": tvdb } }] } items = '/sync/watchlist/remove' result = __getTrakt(items, post=post)[0] icon = control.infoLabel( 'ListItem.Icon') if not result == None else 'ERROR' control.infoDialog('Removed from watchlist', heading=str(name), sound=True, icon=icon) except: return
def addtocollection(name, imdb, tvdb, content): try: post = { "movies": [{ "ids": { "imdb": imdb } }] } if content == 'movie' else { "shows": [{ "ids": { "tvdb": tvdb } }] } items = '/sync/collection' result = __getTrakt(items, post=post)[0] icon = control.infoLabel( 'ListItem.Icon') if not result == None else 'ERROR' control.infoDialog('Added to collection', heading=str(name), sound=True, icon=icon) except: return
def play(self, name, url=None): try: url = self.worker(name, url) if url == None: return title = control.infoLabel('listitem.title') if title == '': title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels = {'title': title}) control.player.play(url, item) except: pass
def addView(content): try: 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 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 play(self, url, content=None): try: base = url url = resolver().get(url) if not url: return control.execute('ActivateWindow(busydialog)') url = resolver().process(url) control.execute('Dialog.Close(busydialog)') if not url: return control.notification(message=30705) meta = {} for i in ['title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline']: try: meta[i] = control.infoLabel('listitem.%s' % i) except: pass meta = dict((k, v) for k, v in meta.iteritems() if v != '') if not 'title' in meta: meta['title'] = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') self.name = meta['title'] ; self.year = meta['year'] if 'year' in meta else '0' self.getbookmark = True if (content == 'movies' or content == 'episodes') else False self.offset = bookmarks().get(self.name, self.year) f4m = resolver().f4m(url, self.name) if not f4m is None: return item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels = meta) control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.totalTime = 0 ; self.currentTime = 0 for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000) while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() except: pass control.sleep(2000) control.sleep(5000) except: pass
def channelDirectory(self, items): if items == None or len(items) == 0: control.idle() sys.exit() sysaddon = sys.argv[0] syshandle = int(sys.argv[1]) addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart = control.addonFanart() try: isOld = False control.item().getArt('type') except: isOld = True isPlayable = 'true' if not 'plugin' in control.infoLabel('Container.PluginName') else 'false' playbackMenu = control.lang(32063).encode('utf-8') if control.setting('hosts.mode') == '2' else control.lang(32064).encode('utf-8') queueMenu = control.lang(32065).encode('utf-8') refreshMenu = control.lang(32072).encode('utf-8') for i in items: try: label = '[B]%s[/B] : %s (%s)' % (i['channel'].upper(), i['title'], i['year']) sysname = urllib.quote_plus('%s (%s)' % (i['title'], i['year'])) systitle = urllib.quote_plus(i['title']) imdb, year = i['imdb'], i['year'] poster, banner = i['poster'], i['poster'] if poster == '0': poster = addonPoster if banner == '0' and poster == '0': banner = addonBanner elif banner == '0' : banner = poster meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'mediatype': 'movie'}) #meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) meta.update({'trailer': 'plugin://script.extendedinfo/?info=playtrailer&&id=%s' % imdb}) meta.update({'playcount': 0, 'overlay': 6}) try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=play&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (sysaddon, systitle, year, imdb, sysmeta, self.systime) sysurl = urllib.quote_plus(url) cm = [] cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append((refreshMenu, 'RunPlugin(%s?action=refresh)' % sysaddon)) cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) if isOld == True: cm.append((control.lang2(19033).encode('utf-8'), 'Action(Info)')) item = control.item(label=label) item.setArt({'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner}) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.addContextMenuItems(cm) item.setProperty('IsPlayable', isPlayable) item.setInfo(type='Video', infoLabels = meta) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: pass control.content(syshandle, 'movies') # control.do_block_check(False) control.directory(syshandle, cacheToDisc=True)
def play(self, url): try: url = self.get(url) if url == False: return url = self.process(url) if url == None: return control.infoDialog(control.lang(30705).encode('utf-8')) meta = {} for i in [ 'title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline' ]: try: meta[i] = control.infoLabel('listitem.%s' % i) except: pass meta = dict((k, v) for k, v in meta.iteritems() if not v == '') if not 'title' in meta: meta['title'] = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') title = meta['title'] try: if not any(i in url for i in ['.f4m', '.ts']): raise Exception() ext = url.split('?')[0].split('&')[0].split('|')[0].rsplit( '.')[-1].replace('/', '').lower() if not ext in ['f4m', 'ts']: raise Exception() from resources.lib.modules.f4mproxy.F4mProxy import f4mProxyHelper return f4mProxyHelper().playF4mLink(url, title, None, None, '', icon) except: pass item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except: pass item.setInfo(type='Video', infoLabels=meta) control.player.play(url, item) except: 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 is None or episode is 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 imdb is not None else '0' self.tvdb = tvdb if tvdb is not 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) 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() control.window.clearProperty('script.trakt.ids') except Exception: return
def play(self, title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select): try: url = None control.moderator() items = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered) select = control.setting( 'hosts.mode') if select == None else select title = tvshowtitle if not tvshowtitle == None else title if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve( int(sys.argv[1]), True, control.item(path=str(self.sourcesDirect(items)))) if len(items) > 0: if select == '1' and 'plugin' in control.infoLabel( 'Container.PluginName'): control.window.clearProperty(self.itemProperty) control.window.setProperty(self.itemProperty, json.dumps(items)) control.window.clearProperty(self.metaProperty) control.window.setProperty(self.metaProperty, meta) control.sleep(200) return control.execute( 'Container.Update(%s?action=addItem&title=%s)' % (sys.argv[0], urllib.quote_plus(title))) elif select == '0' or select == '1': url = self.sourcesDialog(items) else: url = self.sourcesDirect(items) if url == None: return self.errorForSources() try: meta = json.loads(meta) except: pass from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tvdb, url, meta) except: pass
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.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') control.infoDialog(control.lang(30491).encode('utf-8'), heading=viewName) except: return
def play(self, type='', name='', year='', url='', imdb='', windowedtrailer=0): try: url = self.worker(type, name, year, url, imdb) if not url: return title = control.infoLabel('ListItem.Title') if not title: title = control.infoLabel('ListItem.Label') icon = control.infoLabel('ListItem.Icon') item = control.item(label=title, iconImage=icon, thumbnailImage=icon, path=url) item.setInfo(type="video", infoLabels={'title': title}) item.setProperty('IsPlayable', 'true') control.refresh() control.resolve(handle=int(argv[1]), succeeded=True, listitem=item) if windowedtrailer == 1: control.sleep(1000) while control.player.isPlayingVideo(): control.sleep(1000) control.execute("Dialog.Close(%s, true)" % control.getCurrentDialogId) except: log_utils.error()
def playItem(url, dialog=None): try: try: dialog.close() except: pass meta = {} for i in ['title', 'originaltitle', 'tvshowtitle', 'year', 'season', 'episode', 'genre', 'rating', 'votes', 'director', 'writer', 'plot', 'tagline']: try: meta[i] = control.infoLabel('listitem.%s' % i) except: pass meta['title'] = cleantitle(meta['title']) meta = dict((k,v) for k, v in meta.iteritems() if not v == '') if not 'title' in meta: meta['title'] = cleantitle(control.infoLabel('listitem.label')) icon = control.infoLabel('listitem.icon') item = control.item(path=url, iconImage=icon, thumbnailImage=icon) item.setInfo(type='Video', infoLabels = meta) control.player.play(url, item) except: pass
def play(self, name, url=None, windowedtrailer=0): try: url = self.worker(name, url) if not url: return title = control.infoLabel('listitem.title') if not title: title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') item = control.item(path=url, iconImage=icon, thumbnailImage=icon) try: item.setArt({'icon': icon}) except Exception: pass item.setInfo(type='video', infoLabels={ 'title': title, 'trailer': url }) item.setProperty('IsPlayable', 'true') # Switching over to resolvedUrl like Documentary Indexers and other areas are being moved to control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=item) if windowedtrailer == 1: # The call to the play() method is non-blocking. So we delay further script execution to keep the script alive at this spot. # Otherwise this script will continue and probably already be garbage collected by the time the trailer has ended. # Wait until playback starts. Less than 900ms is too short (on my box). Make it one second. control.sleep(1000) while control.player.isPlayingVideo(): control.sleep(1000) # Close the dialog. # Same behaviour as the fullscreenvideo window when : # the media plays to the end, # or the user pressed one of X, ESC, or Backspace keys on the keyboard/remote to stop playback. control.execute("Dialog.Close(%s, true)" % control.getCurrentDialogId) except Exception: pass
def get(self, url): try: items = re.compile('<sublink(?:\s+name=|)(?:\'|\"|)(.*?)(?:\'|\"|)>(.+?)</sublink>').findall(url) if len(items) == 0: return url if len(items) == 1: return items[0][1] items = [('Link %s' % (int(items.index(i))+1) if i[0] == '' else i[0], i[1]) for i in items] select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: return items[select][1] except: log_utils.error()
def advancedSettings(): MEM = control.infoLabel("System.Memory(total)") FREEMEM = control.infoLabel("System.FreeMemory") BUFFER_F = re.sub('[^0-9]', '', FREEMEM) BUFFER_F = int(BUFFER_F) / 3 BUFFERSIZE = BUFFER_F * 1024 * 1024 try: KODIV = control.get_Kodi_Version() except: KODIV = 16 choice = dialog.yesno(AddonTitle, 'Free Memory: [B]' + str(FREEMEM) + '[/B]', 'Optimal BufferSize is: [B]' + str(BUFFER_F) + ' MB[/B]', 'Choose an Option below...', yeslabel='[COLOR lime][B]Use Optimal[/B][/COLOR]', nolabel='[COLOR red]Input a Value[/COLOR]') if choice == 1: with open(AdvancedSettingsFile, "w") as f: if KODIV >= 17: xml_data = xml_data_advSettings_New(str(BUFFERSIZE)) else: xml_data = xml_data_advSettings_old(str(BUFFERSIZE)) f.write(xml_data) dialog.ok( AddonTitle, 'Buffer Size Set to: [B]' + str(BUFFERSIZE) + '[/B] aka [B]' + str(BUFFER_F) + ' MB[/B]', 'Please restart Kodi for the settings to apply.', '') elif choice == 0: BUFFERSIZE = control.get_keyboard(default=str(BUFFERSIZE), heading="INPUT BUFFER SIZE") with open(AdvancedSettingsFile, "w") as f: if KODIV >= 17: xml_data = xml_data_advSettings_New(str(BUFFERSIZE)) else: xml_data = xml_data_advSettings_old(str(BUFFERSIZE)) f.write(xml_data) dialog.ok(AddonTitle, 'Buffer Size Set to: [B]' + str(BUFFERSIZE) + '[/B]', 'Please restart Kodi for the settings to apply.', '')
def play(self, title, year, imdb, tmdb, tvdb, season, episode, tvshowtitle, premiered, meta, url): try: if not control.addonInfo('id').lower() == control.infoLabel('Container.PluginName').lower(): progress = True if control.setting('progress.dialog') == '1' else False else: control.resolve(int(sys.argv[1]), True, control.item(path='')) control.execute('Dialog.Close(okdialog)') progress = True if 'super.fav' in control.infoLabel('Container.PluginName'): return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') self.sources = self.getSources(title, year, imdb, tmdb, tvdb, season, episode, tvshowtitle, premiered, progress=progress) self.sources = self.sourcesFilter() if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve(int(sys.argv[1]), True, control.item(path=str(self.sourcesDirect(progress=progress)))) if self.sources == []: raise Exception() if url == 'direct://': url = self.sourcesDirect(progress=progress) elif url == 'dialog://': url = self.sourcesDialog(progress=progress) elif control.setting('autoplay') == 'false': url = self.sourcesDialog(progress=progress) else: url = self.sourcesDirect(progress=progress) if url == None: raise Exception() if url == 'close://': return control.sleep(200) if not tvshowtitle == None: title = tvshowtitle from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tmdb, tvdb, meta, url) return url except: control.infoDialog(control.lang(30501).encode('utf-8'))
def play(self, title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, url): try: if not control.addonInfo('id').lower() == control.infoLabel('Container.PluginName').lower(): progress = True if control.setting('progress.dialog') == '1' else False else: control.resolve(int(sys.argv[1]), True, control.item(path='')) control.execute('Dialog.Close(okdialog)') progress = True if 'super.fav' in control.infoLabel('Container.PluginName'): return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') self.sources = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, progress=progress) self.sources = self.sourcesFilter() if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve(int(sys.argv[1]), True, control.item(path=str(self.sourcesDirect(progress=progress)))) if self.sources == []: raise Exception() if url == 'direct://': url = self.sourcesDirect(progress=progress) elif url == 'dialog://': url = self.sourcesDialog(progress=progress) elif control.setting('autoplay') == 'false': url = self.sourcesDialog(progress=progress) else: url = self.sourcesDirect(progress=progress) if url == None: raise Exception() if url == 'close://': return control.sleep(200) if not tvshowtitle == None: title = tvshowtitle from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tvdb, meta, url) return url except: control.infoDialog(control.lang(30501).encode('utf-8'))
def ACsearch(url, image, fanart): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.setHeading(control.infoLabel('ListItem.Label')) keyboard.doModal() if not keyboard.isConfirmed(): return search = keyboard.getText() search = re.sub(r'\W+|\s+', '+', search) if search == '': return url = 'http://www.animedreaming.tv/search.php?searchquery=' + search url = url.encode('utf-8') ACcat(url, image, fanart)
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 = '%s (%s)' % ( title, year) if self.content == 'movie' else '%s S%02dE%02d' % ( title, int(season), int(episode)) self.season = '%01d' % int( season) if self.content == 'episode' else None self.episode = '%01d' % int( episode) if self.content == 'episode' else 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) 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) #control.do_block_check(False) if 'plugin' in control.infoLabel('Container.PluginName'): control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.keepPlaybackAlive() except: return
def play(self, name='', url='', windowedtrailer=0): try: url = self.worker(name, url) if not url: return title = control.infoLabel('ListItem.Title') if not title: title = control.infoLabel('ListItem.Label') icon = control.infoLabel('ListItem.Icon') item = control.item(label=name, iconImage=icon, thumbnailImage=icon, path=url) item.setInfo(type="video", infoLabels={"Title": name}) item.setProperty('IsPlayable', 'true') control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=item) if windowedtrailer == 1: # The call to the play() method is non-blocking. So we delay further script execution to keep the script alive at this spot. # Otherwise this script will continue and probably already be garbage collected by the time the trailer has ended. control.sleep( 1000 ) # Wait until playback starts. Less than 900ms is too short (on my box). Make it one second. while control.player.isPlayingVideo(): control.sleep(1000) # Close the dialog. # Same behaviour as the fullscreenvideo window when : # the media plays to the end, # or the user pressed one of X, ESC, or Backspace keys on the keyboard/remote to stop playback. control.execute("Dialog.Close(%s, true)" % control.getCurrentDialogId) 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 is 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 Exception: return notification.infoDialog( msg=control.lang(32515).encode('utf-8'), title=str(name), style='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 result is not None else 'ERROR' notification.infoDialog(msg=control.lang(32515).encode('utf-8'), title=str(name), style=icon) except Exception: return
def CCsearch(url, image, fanart): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.setHeading(control.infoLabel('ListItem.Label')) keyboard.doModal() if not keyboard.isConfirmed(): return search = keyboard.getText() search = re.sub(r'\W+|\s+', '-', search) if search == '': return url = '/Search/Cartoon/' + search url = url.encode('utf-8') CCcat(url, image, fanart)
def __init__(self): self.mode = control.setting('trailer.select') or '1' self.content = control.infoLabel('Container.Content') self.tm_user = control.setting('tm.user') or api_keys.tmdb_key self.lang = control.apiLanguage()['tmdb'] self.lang_link = 'en,null' if self.lang == 'en' else 'en,%s,null' % self.lang self.movie_url = 'https://api.themoviedb.org/3/movie/%s/videos?api_key=%s&include_video_language=%s' % ( '%s', self.tm_user, self.lang_link) self.show_url = 'https://api.themoviedb.org/3/tv/%s/videos?api_key=%s&include_video_language=%s' % ( '%s', self.tm_user, self.lang_link) self.season_url = 'https://api.themoviedb.org/3/tv/%s/season/%s/videos?api_key=%s&include_video_language=%s' % ( '%s', '%s', self.tm_user, self.lang_link) self.episode_url = 'https://api.themoviedb.org/3/tv/%s/season/%s/episode/%s/videos?api_key=%s&include_video_language=%s' % ( '%s', '%s', '%s', self.tm_user, self.lang_link) self.yt_plugin_url = 'plugin://plugin.video.youtube/?action=play_video&videoid=%s'
def __init__(self): self.mode = control.setting('trailer.select') or '1' self.content = control.infoLabel('Container.Content') self.base_link = 'https://www.youtube.com' self.key = control.addon('plugin.video.youtube').getSetting( 'youtube.api.key') or api_keys.yt_key if self.mode == '0': self.search_link = 'https://www.googleapis.com/youtube/v3/search?part=id&type=video&maxResults=3&q=%s&key=%s' % ( '%s', self.key) else: self.search_link = 'https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&maxResults=10&q=%s&key=%s' % ( '%s', self.key) self.youtube_watch = 'https://www.youtube.com/watch?v=%s' self.yt_plugin_url = 'plugin://plugin.video.youtube/?action=play_video&videoid=%s'
def get(self, url): try: items = re.compile('<sublink(?:\s+name=|)(?:\'|\"|)(.*?)(?:\'|\"|)>(.+?)</sublink>').findall(url) if len(items) == 0: return url if len(items) == 1: return items[0][1] items = [('Link %s' % (int(items.index(i))+1) if i[0] == '' else i[0], i[1]) for i in items] select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: return items[select][1] except: pass
def addView(content): try: skin = control.skin skinPath = control.kodiSkinPath 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.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') interface.Dialog.notification(title = 33586, message = interface.Translation.string(33587) + ': ' + str(viewName), icon = interface.Dialog.IconSuccess) except: return
def run(self): if control.getKodiVersion() < 18: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Starting...', 2) try: import xml.etree.ElementTree as ET addon_xml = control.joinPath( control.addonPath('plugin.video.venom'), 'addon.xml') tree = ET.parse(addon_xml) root = tree.getroot() current_addon_setting = control.addon( 'plugin.video.venom').getSetting('reuse.languageinvoker') try: current_xml_setting = [ str(i.text) for i in root.iter('reuselanguageinvoker') ][0] except: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck failed to get settings.xml value', 2) if current_addon_setting == '': current_addon_setting = 'true' control.setSetting('reuse.languageinvoker', current_addon_setting) if current_xml_setting == current_addon_setting: return xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Finished', 2) control.okDialog(message='%s\n%s' % (control.lang(33023), control.lang(33020))) for item in root.iter('reuselanguageinvoker'): item.text = current_addon_setting hash_start = control.gen_file_hash(addon_xml) tree.write(addon_xml) hash_end = control.gen_file_hash(addon_xml) xbmc.log( '[ plugin.video.venom ] ReuseLanguageInvokerCheck Service Finished', 2) if hash_start != hash_end: current_profile = control.infoLabel('system.profilename') control.execute('LoadProfile(%s)' % current_profile) else: control.okDialog(title='default', message=33022) return except: log_utils.error() pass
def get(self, url): try: items = re.compile('<sublink>(.+?)</sublink>').findall(url) if len(items) == 0: items = [url] items = [('Link %s' % (int(items.index(i))+1), i) for i in items] if len(items) == 1: url = items[0][1] else: select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: url = items[select][1] return url except: pass
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 play(self, title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta, select): try: url = None control.moderator() items = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered) select = control.setting('hosts.mode') if select == None else select title = tvshowtitle if not tvshowtitle == None else title if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve(int(sys.argv[1]), True, control.item(path=str(self.sourcesDirect(items)))) if len(items) > 0: if select == '1' and 'plugin' in control.infoLabel('Container.PluginName'): control.window.clearProperty(self.itemProperty) control.window.setProperty(self.itemProperty, json.dumps(items)) control.window.clearProperty(self.metaProperty) control.window.setProperty(self.metaProperty, meta) control.sleep(200) return control.execute('Container.Update(%s?action=addItem&title=%s)' % (sys.argv[0], urllib.quote_plus(title))) elif select == '0' or select == '1': url = self.sourcesDialog(items) else: url = self.sourcesDirect(items) if url == None: return self.errorForSources() try: meta = json.loads(meta) except: pass from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tvdb, url, meta) except: pass
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 addView(content): try: 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 run(self, meta): try: control.sleep(200); self.totalTime = 0; self.currentTime = 0; self.offset = '0'; self.content = meta['content']; self.ids = meta['ids']; self.show_id = meta['show_id']; self.asset_id = meta['asset_id']; if(meta['continueplayback'] == 0): self.offset = meta['progress']; self.item = control.item(path=meta['url']); self.item.setArt(meta['art']); self.item.setInfo(type='Video', infoLabels = meta['infoLabels']); if 'plugin' in control.infoLabel('Container.PluginName'): control.player.play(meta['url'], self.item); control.resolve(int(sys.argv[1]), True, self.item); control.window.setProperty('script.trakt.ids', json.dumps(self.ids)); self.keepPlaybackAlive(); control.window.clearProperty('script.trakt.ids'); except Exception as inst: logger.error(inst); return;
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 person(self, query=None): try: control.idle() sysloc = [urlparse.urlparse(sys.argv[0]).netloc, 'plugin.program.super.favourites' ] sysplg = True if control.infoLabel('Container.PluginName') in sysloc else False if query == None: t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() query = k.getText() if k.isConfirmed() else None if (query == None or query == '' or sysplg == False): return url = self.persons_link + urllib.quote_plus(query) url = '%s?action=moviePersons&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url) except: return
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [("Add to [B]Collection[/B]", '/sync/collection')] items += [("Remove from [B]Collection[/B]", '/sync/collection/remove')] items += [("Add to [B]Watchlist[/B]", '/sync/watchlist')] items += [("Remove from [B]Watchlist[/B]", '/sync/watchlist/remove')] items += [("Add to [B]new List[/B]", '/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] = (("Add to [B]%s[/B]" % lists[i][0]), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = (("Remove from [B]%s[/B]" % lists[i][0]), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], "Trakt Manager") if select == -1: return elif select == 4: t = "Add to [B]new List[/B]" 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("Trakt Manager", 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("Trakt Manager", heading=str(name), sound=True, icon=icon) except: return
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) 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() control.window.clearProperty('script.trakt.ids') except: return
def run(self, title, year, season, episode, imdb, tvdb, url, meta): try: control.sleep(200) self.totalTime = 0 ; self.currentTime = 0 self.original_meta = meta self.content = 'movie' if season == None or episode == None else 'episode' self.title = title ; self.year = year self.name = '%s (%s)' % (title, year) if self.content == 'movie' else '%s S%02dE%02d' % (title, int(season), int(episode)) self.season = '%01d' % int(season) if self.content == 'episode' else None self.episode = '%01d' % int(episode) if self.content == 'episode' else 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) 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) # control.do_block_check(False) if 'plugin' in control.infoLabel('Container.PluginName'): control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.keepPlaybackAlive() 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 addItem(self, title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, meta): try: if 'super.fav' in control.infoLabel('Container.PluginName'): return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') self.sources = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered) if self.sources == []: raise Exception() self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0, control.lang(30515).encode('utf-8'), str(' ')) trailerMenu = control.lang(30516).encode('utf-8') if tvshowtitle == None else control.lang(30517).encode('utf-8') infoMenu = control.lang(30502).encode('utf-8') if tvshowtitle == None else control.lang(30503).encode('utf-8') downloads = True if control.setting('downloads') == 'true' and not (control.setting('movie.download.path') == '' or control.setting('tv.download.path') == '') else False meta = json.loads(meta) try: del meta['year'] except: pass poster = meta['poster'] if 'poster' in meta else '0' banner = meta['banner'] if 'banner' in meta else '0' thumb = meta['thumb'] if 'thumb' in meta else poster fanart = meta['fanart'] if 'fanart' in meta else '0' if poster == '0': poster = control.addonPoster() if banner == '0' and poster == '0': banner = control.addonBanner() elif banner == '0': banner = poster if thumb == '0' and fanart == '0': thumb = control.addonFanart() elif thumb == '0': thumb = fanart if control.setting('fanart') == 'true' and not fanart == '0': pass else: fanart = control.addonFanart() systitle = urllib.quote_plus('%s (%s)' % (title, year) if tvshowtitle == None or season == None or episode == None else '%s S%02dE%02d' % (tvshowtitle, int(season), int(episode))) sysname = urllib.quote_plus('%s (%s)' % (title, year) if tvshowtitle == None or season == None or episode == None else tvshowtitle) sysimage, sysaddon = urllib.quote_plus(poster), sys.argv[0] for i in range(len(self.sources)): try: #if self.progressDialog.iscanceled(): break self.progressDialog.update(int((100 / float(len(self.sources))) * i)) label = self.sources[i]['label'] syssource = urllib.quote_plus(json.dumps([self.sources[i]])) url = '%s?action=playItem&source=%s' % (sysaddon, syssource) cm = [] cm.append((control.lang(30504).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) if downloads == True: cm.append((control.lang(30505).encode('utf-8'), 'RunPlugin(%s?action=download&name=%s&image=%s&source=%s)' % (sysaddon, systitle, sysimage, syssource))) cm.append((trailerMenu, 'RunPlugin(%s?action=trailer&name=%s)' % (sysaddon, sysname))) cm.append((infoMenu, 'Action(Info)')) cm.append((control.lang(30506).encode('utf-8'), 'RunPlugin(%s?action=refresh)' % sysaddon)) cm.append((control.lang(30507).encode('utf-8'), 'RunPlugin(%s?action=openSettings)' % sysaddon)) cm.append((control.lang(30508).encode('utf-8'), 'RunPlugin(%s?action=openPlaylist)' % sysaddon)) item = control.item(label=label, iconImage='DefaultVideo.png', thumbnailImage=thumb) try: item.setArt({'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner}) except: pass item.setInfo(type='Video', infoLabels = meta) if not fanart == None: item.setProperty('Fanart_Image', fanart) item.setProperty('Video', 'true') item.addContextMenuItems(cm, replaceItems=True) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=False) except: pass control.content(int(sys.argv[1]), 'files') control.directory(int(sys.argv[1]), cacheToDisc=True) try: self.progressDialog.close() except: pass except: control.infoDialog(control.lang(30501).encode('utf-8')) try: self.progressDialog.close() except: pass
def playItem(self, source): try: f = dict(urlparse.parse_qsl(control.infoLabel('Container.FolderPath').replace('?',''))) meta = f['meta'] if 'meta' in f else None title = f['title'] if 'title' in f else None title = f['tvshowtitle'] if 'tvshowtitle' in f else title year = f['year'] if 'year' in f else None season = f['season'] if 'season' in f else None episode = f['episode'] if 'episode' in f else None imdb = f['imdb'] if 'imdb' in f else None tvdb = f['tvdb'] if 'tvdb' in f else None next = [] ; prev = [] ; total = [] for i in range(1,1000): 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('?',''))) u = json.loads(u['source'])[0] next.append(u) except: break for i in range(-1000,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('?',''))) u = json.loads(u['source'])[0] prev.append(u) except: break items = json.loads(source) items = [i for i in items+next+prev][:20] 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]) 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 k = control.condVisibility('Window.IsActive(yesnoDialog)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(0.5) 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(0.5) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() try: self.progressDialog.close() except: pass control.sleep(200) control.execute('Dialog.Close(virtualkeyboard)') control.execute('Dialog.Close(yesnoDialog)') from resources.lib.modules.player import player player().run(title, year, season, episode, imdb, tvdb, meta, self.url) return self.url except: pass try: self.progressDialog.close() except: pass raise Exception() except: control.infoDialog(control.lang(30501).encode('utf-8')) pass
def channelDirectory(self, items): if items == None or len(items) == 0: control.idle() ; sys.exit() sysaddon = sys.argv[0] syshandle = int(sys.argv[1]) addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting('fanart') try: isOld = False ; control.item().getArt('type') except: isOld = True isPlayable = 'true' if not 'plugin' in control.infoLabel('Container.PluginName') else 'false' playbackMenu = control.lang(32063).encode('utf-8') if control.setting('hosts.mode') == '2' else control.lang(32064).encode('utf-8') queueMenu = control.lang(32065).encode('utf-8') refreshMenu = control.lang(32072).encode('utf-8') for i in items: try: label = '[B]%s[/B] : %s (%s)' % (i['channel'].upper(), i['title'], i['year']) sysname = urllib.quote_plus('%s (%s)' % (i['title'], i['year'])) systitle = urllib.quote_plus(i['title']) imdb, tmdb, year = i['imdb'], i['tmdb'], i['year'] meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'code': imdb, 'imdbnumber': imdb, 'imdb_id': imdb}) meta.update({'tmdb_id': tmdb}) meta.update({'mediatype': 'movie'}) meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) #meta.update({'trailer': 'plugin://script.extendedinfo/?info=playtrailer&&id=%s' % imdb}) meta.update({'playcount': 0, 'overlay': 6}) try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=play&title=%s&year=%s&imdb=%s&meta=%s&t=%s' % (sysaddon, systitle, year, imdb, sysmeta, self.systime) sysurl = urllib.quote_plus(url) cm = [] cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append((refreshMenu, 'RunPlugin(%s?action=refresh)' % sysaddon)) cm.append((playbackMenu, 'RunPlugin(%s?action=alterSources&url=%s&meta=%s)' % (sysaddon, sysurl, sysmeta))) if isOld == True: cm.append((control.lang2(19033).encode('utf-8'), 'Action(Info)')) item = control.item(label=label) art = {} if 'poster2' in i and not i['poster2'] == '0': art.update({'icon': i['poster2'], 'thumb': i['poster2'], 'poster': i['poster2']}) elif 'poster' in i and not i['poster'] == '0': art.update({'icon': i['poster'], 'thumb': i['poster'], 'poster': i['poster']}) else: art.update({'icon': addonPoster, 'thumb': addonPoster, 'poster': addonPoster}) art.update({'banner': addonBanner}) if settingFanart == 'true' and 'fanart' in i and not i['fanart'] == '0': item.setProperty('Fanart_Image', i['fanart']) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setArt(art) item.addContextMenuItems(cm) item.setProperty('IsPlayable', isPlayable) item.setInfo(type='Video', infoLabels = meta) video_streaminfo = {'codec': 'h264'} item.addStreamInfo('video', video_streaminfo) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: pass control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
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)