def play(self, url): try: hmf = resolveurl.HostedMediaFile(url, include_disabled=False, include_universal=True) if hmf.valid_url() == True: link = hmf.resolve() if link == None or link == False: link = url else: link = url if not 'User-Agent' in link: elements = urlparse.urlparse(link) domain = elements.scheme + '://' + elements.netloc uAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' link = '%s|User-Agent=%s&Referer=%s' % (link, uAgent, domain) title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') li = control.item(title, path=link) li.setProperty("IsPlayable", "true") li.setArt({"thumb": icon, "icon": icon}) li.setInfo(type="video", infoLabels={"title": title}) control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li) except Exception: pass
def play(self, url): try: hmf = resolveurl.HostedMediaFile(url, include_disabled=False, include_universal=True) if hmf.valid_url() is True: link = hmf.resolve() if link is None or link is False: link = url else: link = url if not 'User-Agent' in link: elements = urlparse.urlparse(link) domain = elements.scheme + '://' + elements.netloc uAgent = client.agent() link = '%s|User-Agent=%s&Referer=%s' % (link, uAgent, domain) title = control.infoLabel('listitem.label') icon = control.infoLabel('listitem.icon') li = control.item(title, path=link) li.setProperty("IsPlayable", "true") li.setArt({"thumb": icon, "icon": icon}) li.setInfo(type="video", infoLabels={"title": title}) control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li) except Exception: pass
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=title, iconImage=icon, thumbnailImage=icon, path=url) item.setInfo(type="video", infoLabels={'title': title}) item.setProperty('IsPlayable', 'true') control.refresh() control.resolve(handle=int(sys.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: import traceback traceback.print_exc()
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, offscreen=True) item.setProperty('IsPlayable', 'true') item.setArt({ 'icon': icon, 'thumb': icon, }) item.setInfo(type='video', infoLabels={'title': title}) control.addItem(handle=int(argv[1]), url=url, listitem=item, isFolder=False) 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: from resources.lib.modules import log_utils log_utils.error()
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 run(self, url, selectGame, side): if selectGame == None or side == None: return control.resolve(int(sys.argv[1]), True, control.item(path=url)) command = ['java', '-jar', jarFile, selectGame, side] startupinfo = None if os.name == 'nt': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW self.process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=startupinfo) if os.name == 'posix': success = False success, output = FuckNeulionClient.request_proxy_hack( selectGame, side) control.sleep(1000) control.resolve(int(sys.argv[1]), True, control.item(path=url)) for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000) while self.isPlayingVideo(): control.sleep(1000) control.sleep(5000)
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 run(self, title, url, xbmc_id, content): try: control.sleep(200) self.content = 'movie' if content == 'movie' else 'episode' self.title = title self.DBID = xbmc_id self.imdb = '' self.name = cleantitle.get(title) + str(self.DBID) #print ("PREMIUMIZE PLAYER", self.title, self.DBID, self.content, url) poster, thumb, fanart, meta = self.getMeta() #print ("PREMIUMIZE PLAYER 2", url, self.title, self.DBID, poster, thumb, fanart, meta) if self.content == 'movie': self.ids = {'imdb': self.imdb} else: self.ids = {'imdb': self.imdb, 'tvdb': self.imdb } self.ids = dict((k,v) for k, v in self.ids.iteritems() if not v == '0') item = control.item(path=url) item.setArt({'icon': thumb, 'thumb': thumb, 'poster': thumb, 'fanart':thumb}) item.setInfo(type='Video', infoLabels = meta) 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 play_source(self, title, year, season, episode, imdb, tmdb, tvdb, url, meta, debridPackCall=False): try: from sys import argv # some functions like ActivateWindow() throw invalid handle less this is imported here. if not url: raise Exception self.media_type = 'movie' if season is None or episode is None else 'episode' self.title, self.year = title, str(year) if self.media_type == 'movie': self.name, self.season, self.episode = '%s (%s)' % (title, self.year), None, None elif self.media_type == 'episode': self.name, self.season, self.episode = '%s S%02dE%02d' % (title, int(season), int(episode)), '%01d' % int(season), '%01d' % int(episode) self.imdb, self.tmdb, self.tvdb = imdb or '', tmdb or '', tvdb or '' self.ids = {'imdb': self.imdb, 'tmdb': self.tmdb, 'tvdb': self.tvdb} ## - compare meta received to database and use largest(eventually switch to a request to fetch missing db meta for item) self.imdb_user = control.setting('imdb.user').replace('ur', '') self.tmdb_key = control.setting('tmdb.api.key') if not self.tmdb_key: self.tmdb_key = '3320855e65a9758297fec4f7c9717698' self.tvdb_key = control.setting('tvdb.api.key') if self.media_type == 'episode': self.user = str(self.imdb_user) + str(self.tvdb_key) else: self.user = str(self.tmdb_key) self.lang = control.apiLanguage()['tvdb'] meta1 = dict((k, v) for k, v in iter(meta.items()) if v is not None and v != '') if meta else None meta2 = metacache.fetch([{'imdb': self.imdb, 'tmdb': self.tmdb, 'tvdb': self.tvdb}], self.lang, self.user)[0] if meta2 != self.ids: meta2 = dict((k, v) for k, v in iter(meta2.items()) if v is not None and v != '') if meta1 is not None: try: if len(meta2) > len(meta1): meta2.update(meta1) meta = meta2 else: meta = meta1 except: log_utils.error() else: meta = meta2 if meta2 != self.ids else meta1 ################## self.poster = meta.get('poster') if meta else '' self.fanart = meta.get('fanart') if meta else '' self.meta = meta poster, thumb, season_poster, fanart, banner, clearart, clearlogo, discart, meta = self.getMeta(meta) self.offset = Bookmarks().get(name=self.name, imdb=imdb, tmdb=tmdb, tvdb=tvdb, season=season, episode=episode, year=self.year, runtime=meta.get('duration') if meta else 0) if self.offset == '-1': log_utils.log('User requested playback cancel', level=log_utils.LOGDEBUG) control.notification(message=32328) return control.cancelPlayback() item = control.item(path=url) item.setUniqueIDs(self.ids) if self.media_type == 'episode': item.setArt({'tvshow.clearart': clearart, 'tvshow.clearlogo': clearlogo, 'tvshow.discart': discart, 'thumb': thumb, 'tvshow.poster': season_poster, 'season.poster': season_poster, 'tvshow.fanart': fanart}) else: item.setArt({'clearart': clearart, 'clearlogo': clearlogo, 'discart': discart, 'thumb': thumb, 'poster': poster, 'fanart': fanart}) if 'castandart' in meta: item.setCast(meta.get('castandart', '')) item.setInfo(type='video', infoLabels=control.metadataClean(meta)) item.setProperty('IsPlayable', 'true') if debridPackCall: control.player.play(url, item) # seems this is only way browseDebrid pack files will play and have meta marked as watched else: control.resolve(int(argv[1]), True, item) homeWindow.setProperty('script.trakt.ids', jsdumps(self.ids)) self.keepAlive() homeWindow.clearProperty('script.trakt.ids') except: log_utils.error() return control.cancelPlayback()
def docu_play(self, url): try: docu_page = client.request(url) docu_item = client.parseDOM(docu_page, 'meta', attrs={'itemprop': 'embedUrl'}, ret='content')[0] if 'http:' not in docu_item and 'https:' not in docu_item: docu_item = 'https:' + docu_item url = docu_item try: docu_title = re.findall( 'meta property="og:title" content="(.+?)"', docu_page)[0] except Exception: docu_title = re.findall('<title>(.+?)</title>', docu_page)[0] try: docu_icon = re.findall( 'meta property="og:image" content="(.+?)"', docu_page)[0] except Exception: docu_icon = control.addonIcon() if 'youtube' in url: if 'list=' not in url: video_id = client.parseDOM( docu_page, 'div', attrs={'class': 'youtube-player'}, ret='data-id')[0] url = 'plugin://plugin.video.youtube/play/?video_id=%s' % video_id else: playlist_id = url.split('list=')[1] url = 'plugin://plugin.video.youtube/play/?playlist_id=%s&play=1' % playlist_id else: url = source_utils.uResolve(url) if url is None: log_utils.log( 'Top Documentary Films: Unable to resolve url: ' + str(url)) control.infoDialog('Invalid Host - Report To Developer: ' + str(url), sound=True, icon='INFO') return li = control.item(docu_title, path=url) li.setArt({"thumb": docu_icon, "icon": docu_icon}) li.setInfo(type="video", infoLabels={"Title": docu_title}) li.setProperty('IsPlayable', 'true') control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li) except Exception as e: log_utils.log('docu_play: Exception - ' + str(e)) pass
def play(self, url, content=None): try: base = url url = resolver().get(url) if url is False: return control.execute('ActivateWindow(busydialog)') url = resolver().process(url) control.execute('Dialog.Close(busydialog)') if url is None: return control.notification(title='default', message=30705, icon='default', sound=(control.setting('notification.sound') == 'true')) if url is 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 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 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, 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, 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'), '', '') items = self.getSources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, progress=progress) if control.window.getProperty('PseudoTVRunning') == 'True': return control.resolve( int(sys.argv[1]), True, control.item(path=str( self.sourcesDirect(items, progress=progress)))) if items == []: raise Exception() if url == 'direct://': url = self.sourcesDirect(items, progress=progress) elif url == 'dialog://': url = self.sourcesDialog(items, progress=progress) elif control.setting('autoplay') == 'false': url = self.sourcesDialog(items, progress=progress) else: url = self.sourcesDirect(items, 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 run(self, title, year, season, episode, imdb, tvdb, meta, url): try: self.loadingTime = time.time() 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') control.window.setProperty('script.trakt.ids', json.dumps(self.ids)) self.getBookmark() poster, thumb, meta = self.getMeta(meta) item = control.item(path=url, iconImage='DefaultVideo.png', thumbnailImage=thumb) item.setInfo(type='Video', infoLabels=meta) try: item.setArt({ 'poster': poster, 'tvshow.poster': poster, 'season.poster': poster }) except: pass item.setProperty('Video', 'true') item.setProperty('IsPlayable', 'true') #control.do_block_check(False) control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.keepPlaybackAlive() control.window.clearProperty('script.trakt.ids') except: return
def play(self, tmdb, imdb=None, season=None, episode=None, windowedtrailer=0): try: t_url = self.show_url % tmdb s_url = self.season_url % (tmdb, season) if self.content == 'tvshows': if not tmdb or tmdb == '0': return control.infoDialog('No ID found') api_url = t_url elif self.content == 'seasons': if not tmdb or tmdb == '0': return control.infoDialog('No ID found') api_url = s_url elif self.content == 'episodes': if not tmdb or tmdb == '0': return control.infoDialog('No ID found') api_url = self.episode_url % (tmdb, season, episode) else: id = tmdb if not tmdb == '0' else imdb if not id or id == '0': return control.infoDialog('No ID found') api_url = self.movie_url % id #log_utils.log('api_url: ' + api_url) results = self.get_items(api_url, t_url, s_url) url = self.get_url(results) if not url: return control.infoDialog('No trailer found') elif url == 'canceled': return icon = control.infoLabel('ListItem.Icon') name = control.infoLabel('ListItem.Title') item = control.item(label=name, path=url) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon}) 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: control.sleep(1000) while control.player.isPlayingVideo(): control.sleep(1000) control.execute('Dialog.Close(%s, true)' % control.getCurrentDialogId) except: log_utils.log('TMDb_trailer fail', 1) return
def play(self, name='', url='', tmdb='', imdb='', season='', episode='', windowedtrailer=0): try: if self.content not in ['tvshows', 'seasons', 'episodes']: name += ' %s' % control.infoLabel('ListItem.Year') elif self.content in ['seasons', 'episodes']: if season and episode: name += ' %sx%02d' % (season, int(episode)) elif season: name += ' season %01d' % int(season) if self.content != 'episodes': name += ' trailer' url = self.worker(name, url) if not url: raise Exception('YT_trailer failed, trying TMDb') elif url == 'canceled': return icon = control.infoLabel('ListItem.Icon') item = control.item(label=name, path=url) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon}) 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: log_utils.log('YT_trailer play fail', 1) TMDb_trailer().play(tmdb, imdb, season, episode)
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 control.iteritems(meta) if v and v != '0') 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) # iconImage and thumbnailImage removed in Kodi Matrix item = control.item(label= self.name) item.setProperty('IsPlayable', 'true') item.setArt({'icon': icon, 'thumb': icon,}) item.setInfo(type='video', infoLabels = meta) item.addStreamInfo('video', {'codec': 'h264'}) control.addItem(handle=int(argv[1]), url=url, listitem=item, isFolder=False) # control.player.play(url, item) control.resolve(handle=int(argv[1]), succeeded=True, listitem=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, 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 playtorrentItem(name, id): torrInDownload = [] try: name = name.split('/')[-1] except: name = name try: downloads = realdebrid().transferList() torrInDownload = [ i for i in downloads if i['filename'].lower() == name.lower() ][0] except: pass if len(torrInDownload) > 0: item = control.item(label=name) item.setArt({'icon': control.addonIcon()}) item.setProperty('Fanart_Image', control.addonFanart()) infolabel = {"Title": name} item.setInfo(type='Video', infoLabels=infolabel) item.setProperty('IsPlayable', 'true') item = control.item(path=torrInDownload['download']) control.resolve(int(sys.argv[1]), True, item) else: newTorr = [] try: result = torrentItemToDownload(name, id) if result != None: newTorr.append(result) except: pass time.sleep(1) torrItem = newTorr[0] if len(torrItem) > 0: control.infoDialog('Playing Torrent Item', torrItem['filename'], time=3) item = control.item(label=name) item.setArt({'icon': control.addonIcon()}) item.setProperty('Fanart_Image', control.addonFanart()) infolabel = {"Title": name} item.setInfo(type='Video', infoLabels=infolabel) item.setProperty('IsPlayable', 'true') item = control.item(path=torrItem['download']) control.resolve(int(sys.argv[1]), True, item)
def run(self, title, year, season, episode, imdb, tvdb, meta, url): try: 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') try: if control.setting('resume_playback') == 'true': self.offset = bookmarks.getBookmark(self.name, season, episode, imdb, self.year) 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 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.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 play(self, name='', url='', windowedtrailer=0): try: name = control.infoLabel('ListItem.Title') if not name: name = control.infoLabel('ListItem.Label') if self.content == 'movies': name += ' ' + control.infoLabel('ListItem.Year') name += ' trailer' if self.content in ['seasons', 'episodes']: season = control.infoLabel('ListItem.Season') episode = control.infoLabel('ListItem.Episode') if season != '': name = control.infoLabel('ListItem.TVShowTitle') name += ' season %01d trailer' % int(season) if episode != '': name = name.replace('season ', '').replace(' trailer', '') name += 'x%02d' % int(episode) url = self.worker(name, url) if not url: return icon = control.infoLabel('ListItem.Icon') item = control.item(label=name, path=url) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon}) 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 play(self, url): try: url, captions = url.decode('base64').split('|', 1) except Exception: url = url.decode('base64') captions = '' html = client.request('%s?format=json' % url) jrequest = json.loads(html) url = jrequest['url'] if url is not None: li = control.item(path=url) if len(captions) > 0: li.setSubtitles([captions]) li.setProperty("IsPlayable", "true") control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li)
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 docu_play(self, url): try: docu_page = client.request(url) docu_item = client.parseDOM(docu_page, 'div', attrs={'class': 'video'})[0] url = client.parseDOM(docu_item, 'iframe', ret='src')[0] try: docu_title = re.findall('meta property="og:title" content="(.+?)"', docu_page)[0] except Exception: docu_title = re.findall('<title>(.+?)</title>', docu_page)[0] try: docu_icon = re.findall('meta property="og:image" content="(.+?)"', docu_page)[0] except Exception: docu_icon = control.addonIcon() if 'youtube' in url: if 'list=' not in url: video_id = url.split('embed/')[-1] url = 'plugin://plugin.video.youtube/play/?video_id=%s' % video_id else: playlist_id = url.split("=")[-1] url = 'plugin://plugin.video.youtube/play/?playlist_id=%s&play=1' % playlist_id elif 'archive.org/embed' in url: archive_page = client.request(url) video_element = client.parseDOM(archive_page, 'source', ret='src')[0] url = urlparse.urljoin('https://archive.org/', video_element) else: url = source_utils.uResolve(url) if url is None: log_utils.log('Documentary Heaven: Unable to resolve url: ' + str(url)) control.infoDialog('Invalid Host - Report To Developer: ' + str(url), sound=True, icon='INFO') return li = control.item(docu_title, path=url) li.setArt({"thumb": docu_icon, "icon": docu_icon}) li.setInfo(type="video", infoLabels={"Title": docu_title}) li.setProperty('IsPlayable', 'true') control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li) except Exception as e: log_utils.log('docu_play: Exception - ' + str(e)) pass
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 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 play(self, imdb, name, tmdb='', season='', episode='', windowedtrailer=0): try: if not imdb or imdb == '0': raise Exception() item_dict = self.get_items(imdb, name) if not item_dict: raise Exception('IMDb_trailer failed, trying TMDb') elif item_dict == 'canceled': return url, title, plot = item_dict['video'], item_dict[ 'title'], item_dict['description'] icon = control.infoLabel('ListItem.Icon') item = control.item(label=title, path=url) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon}) item.setInfo(type='video', infoLabels={ 'title': title, 'plot': plot }) item.setProperty('IsPlayable', 'true') control.resolve(handle=int(sys.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.log('IMDb_trailer fail', 1) TMDb_trailer().play(tmdb, imdb, season, episode)
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, 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 run(self, url, selectGame ,side): if selectGame == None or side == None: return control.resolve(int(sys.argv[1]), True, control.item(path=url)) if not control.setting('droid') == 'true': command = ['java','-jar',jarFile,selectGame,side] startupinfo = None if os.name == 'nt': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW self.process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=startupinfo) if os.name == 'posix': success = False success, output = FuckNeulionClient.request_proxy_hack(selectGame,side) else: if os.name == 'posix': success = False control.sleep(1000) control.resolve(int(sys.argv[1]), True, control.item(path=url)) for i in range(0, 240): if self.isPlayingVideo(): break control.sleep(1000) while self.isPlayingVideo(): control.sleep(1000) control.sleep(5000)
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 play(self, url, title, icon): url = urlparse.urljoin(self.base_main_link, url) try: html = client.request(url, timeout=10) vid_url = re.compile('file: "(.*?)"', re.DOTALL).findall(html)[0] if 'http:' in vid_url: vid_url = vid_url.replace('http:', 'https:') vid_url = '%s|User-Agent=%s' % (vid_url, client.randomagent()) li = control.item(title, path=vid_url) li.setArt({"thumb": icon, "icon": icon}) li.setInfo(type="video", infoLabels={"Title": title}) li.setProperty('IsPlayable', 'true') control.resolve(handle=int(sys.argv[1]), succeeded=True, listitem=li) except Exception: failure = traceback.format_exc() log_utils.log('B98 - Failed to Play: \n' + str(failure)) 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 run(self, title, year, season, episode, imdb, tvdb, meta, url): try: self.loadingTime = time.time() 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') control.window.setProperty('script.trakt.ids', json.dumps(self.ids)) self.getBookmark() poster, thumb, meta = self.getMeta(meta) item = control.item(path=url, iconImage='DefaultVideo.png', thumbnailImage=thumb) item.setInfo(type='Video', infoLabels = meta) try: item.setArt({'poster': poster, 'tvshow.poster': poster, 'season.poster': poster}) except: pass item.setProperty('Video', 'true') item.setProperty('IsPlayable', 'true') #control.do_block_check(False) control.player.play(url, item) control.resolve(int(sys.argv[1]), True, item) self.keepPlaybackAlive() control.window.clearProperty('script.trakt.ids') except: return
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, 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 play_source(self, title, year, season, episode, imdb, tmdb, tvdb, url, meta, select=None): try: if not url: raise Exception self.media_type = 'movie' if season is None or episode is None else 'episode' self.title = title self.year = str(year) if self.media_type == 'movie': self.name = '%s (%s)' % (title, self.year) self.season = None self.episode = None elif self.media_type == 'episode': self.name = '%s S%02dE%02d' % (title, int(season), int(episode)) self.season = '%01d' % int(season) self.episode = '%01d' % int(episode) self.DBID = None self.imdb = imdb if imdb is not None else '' self.tmdb = tmdb if tmdb is not None else '' self.tvdb = tvdb if tvdb is not None else '' self.ids = { 'imdb': self.imdb, 'tmdb': self.tmdb, 'tvdb': self.tvdb } ## - compare meta received to database and use largest(eventually switch to a request to fetch missing db meta for item) self.imdb_user = control.setting('imdb.user').replace('ur', '') self.tmdb_key = control.setting('tmdb.api.key') if not self.tmdb_key: self.tmdb_key = '3320855e65a9758297fec4f7c9717698' self.tvdb_key = control.setting('tvdb.api.key') if self.media_type == 'episode': self.user = str(self.imdb_user) + str(self.tvdb_key) else: self.user = str(self.tmdb_key) self.lang = control.apiLanguage()['tvdb'] meta1 = meta meta2 = metacache.fetch([{ 'imdb': self.imdb, 'tmdb': self.tmdb, 'tvdb': self.tvdb }], self.lang, self.user)[0] if meta2 != self.ids: meta2 = dict((k, v) for k, v in control.iteritems(meta2) if v is not None and v != '') if meta1 is not None: try: if len(meta2) > len(meta1): meta2.update(meta1) meta = meta2 else: meta = meta1 except: log_utils.error() else: meta = meta2 if meta2 != self.ids else meta1 ################## self.meta = meta poster, thumb, season_poster, fanart, banner, clearart, clearlogo, discart, meta = self.getMeta( meta) runtime = meta.get('duration') if meta else 0 self.offset = Bookmarks().get(name=self.name, imdb=imdb, tmdb=tmdb, tvdb=tvdb, season=season, episode=episode, year=self.year, runtime=runtime) item = control.item(path=url) item.setUniqueIDs(self.ids) if control.setting('disable.player.art') == 'true': for k in ('clearart', 'clearlogo', 'discart'): meta.pop(k, None) if self.media_type == 'episode': if control.setting('disable.player.art') == 'true': item.setArt({ 'thumb': thumb, 'tvshow.poster': season_poster, 'season.poster': season_poster, 'tvshow.fanart': fanart }) else: item.setArt({ 'tvshow.clearart': clearart, 'tvshow.clearlogo': clearlogo, 'tvshow.discart': discart, 'thumb': thumb, 'tvshow.poster': season_poster, 'season.poster': season_poster, 'tvshow.fanart': fanart }) else: if control.setting('disable.player.art') == 'true': item.setArt({ 'thumb': thumb, 'poster': poster, 'fanart': fanart }) else: item.setArt({ 'clearart': clearart, 'clearlogo': clearlogo, 'discart': discart, 'thumb': thumb, 'poster': poster, 'fanart': fanart }) if 'castandart' in meta: item.setCast(meta.get('castandart', '')) item.setInfo(type='video', infoLabels=control.metadataClean(meta)) if 'plugin' not in control.infoLabel( 'Container.PluginName') or select != '1': control.busy() control.resolve(int(argv[1]), True, item) elif select == '1': control.busy() control.player.play(url, item) control.homeWindow.setProperty('script.trakt.ids', jsdumps(self.ids)) self.keepAlive() control.homeWindow.clearProperty('script.trakt.ids') except: log_utils.error() return control.cancelPlayback()
def run(self, title, year, season, episode, imdb, tvdb, tmdb, url, meta, id, directPlay=False): try: control.sleep(200) self.autoResume = control.setting('bookmarks.autoresume') self.nextup_timeout = control.setting('nextup.timeout') self.nextup_service = control.setting('nextup.service') self.next_episode = [] self.seekStatus = False infoMeta = False self.filetype = 'unknown' self.watched = False self.totalTime = 0 self.currentTime = 0 self.lastProgress = 0 self.original_meta = meta self.content = 'movie' if season == None or episode == None else 'episode' if self.content == 'movie' and imdb != '0' and imdb != None: self.filetype = 'movie' infoMeta = True else: infoMeta = False if self.content == 'episode' and imdb != '0' and imdb != None: self.filetype = 'episode' infoMeta = True elif self.content == 'episode' and tvdb != '0' and tvdb != None: self.filetype = 'episode' infoMeta = True else: infoMeta = False self.tvshowtitle = title self.title = title self.year = year if infoMeta == True: self.name = urllib.parse.quote_plus( title) + urllib.parse.quote_plus( ' (%s)' % year ) if self.content == 'movie' else urllib.parse.quote_plus( title) + urllib.parse.quote_plus( ' S%02dE%02d' % (int(season), int(episode))) else: self.name = urllib.parse.quote_plus(title) self.bookMarkName = urllib.parse.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.Nextup = None self.DBID = None try: plot = meta['plot'] except: plot = '' self.FileId = id self.imdb = imdb if not imdb == None else '0' self.tvdb = tvdb if not tvdb == None else '0' self.season = '%01d' % int( season) if self.content == 'episode' else None self.episode = '%01d' % int( episode) if self.content == 'episode' else None self.metaID = [self.imdb, self.tvdb] self.metaID = [i for i in self.metaID if not str(i) == '0'] if self.content == 'movie': self.ids = {'imdb': self.imdb} else: self.ids = {'imdb': self.imdb, 'tvdb': self.imdb} self.ids = dict( (k, v) for k, v in self.ids.items() if not v == '0') poster, thumb, fanart, meta = self.getMeta(meta) item = control.item(path=url) self.infolabels = {"Title": title, "Plot": plot, "year": self.year} if self.content == 'episode' and infoMeta == True: self.infolabels.update({ "season": meta['season'], "episode": meta['episode'], "tvshowtitle": meta['tvshowtitle'], "showtitle": meta['tvshowtitle'], "tvdb": self.tvdb }) self.original_meta = meta if self.content == 'episode': item.setArt({ 'icon': thumb, 'thumb': fanart, 'poster': poster, 'fanart': fanart, 'tvshow.poster': poster, 'season.poster': thumb, 'tvshow.landscape': thumb }) else: item.setArt({ 'icon': thumb, 'thumb': thumb, 'poster': thumb, 'fanart': thumb }) item.setInfo(type='Video', infoLabels=self.infolabels) 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, downloadType = None, downloadId = None, handle = None): 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 = tools.Media.titleUniversal(metadata = meta) 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) # Bubbles self.url = url self.item = item self.timeTotal = 0 self.timeCurrent = 0 self.timeProgress = 0 self.sizeTotal = 0 self.sizeCurrent = 0 self.sizeProgress = 0 self.dialog = None self.downloadCheck = False if downloadType and downloadId: self.file = xbmcvfs.File(url) self.download = downloader.Downloader(type = downloadType, id = downloadId) self.bufferCounter = 0 self.bufferShow = True # Already check here, so that the player waits when the download is still queued/initialized. if not self._downloadCheck(): return else: self.file = None self.download = None self.bufferCounter = None self.bufferShow = None self.handle = handle # Check debrid links from resources.lib.extensions import debrid debrid.valt() if 'plugin' in control.infoLabel('Container.PluginName'): xbmc.executebuiltin('Dialog.Close(notification,true)') # Hide the caching/download notification if still showing. self.play(url, item) self.keepPlaybackAlive() control.resolve(int(sys.argv[1]), True, item) control.window.setProperty('script.trakt.ids', json.dumps(self.ids)) control.window.clearProperty('script.trakt.ids') except: tools.Logger.error()
hide_progress=hide_progress) else: link = Resolver().get(item_url['url'], link=selected_link) resolved = Resolver().process(link, name=item_url['name'], hide_progress=hide_progress) if not hide_progress: control.execute('Dialog.Close(busydialog)') if resolved: if playlist.size() == 0 and len(item_urls) > 1: play_now = True item = control.item(label=item_url['name'], iconImage=item_url['image'], thumbnailImage=item_url['image']) playlist.add(resolved, item) if play_now and not already_played and control.setting("background_list_queue") == "true": play_now = False already_played = True control.player.play(playlist, item) control.resolve(int(sys.argv[1]), True, item) break else: if not control.yesnoDialog(control.lang(30705).encode('utf-8'), "Would you like to try another stream?", ''): break retrying = True xbmc.executebuiltin('Container.Refresh') elif action == 'playQueue': from resources.lib.modules import control from resources.lib.indexers import bob playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) if playlist.size() > 0: item = playlist[0] control.player.play(playlist, item)