def keepPlaybackAlive(self): pname = '%s.player.overlay' % control.addonInfo('id') control.window.clearProperty(pname) if self.content == 'movie': overlay = playcount.getMovieOverlay(playcount.getMovieIndicators(), self.imdb) elif self.content == 'episode': overlay = playcount.getEpisodeOverlay(playcount.getTVShowIndicators(), self.imdb, self.tvdb, self.season, self.episode) else: overlay = '6' for i in range(0, 240): if self.isPlayingVideo(): break xbmc.sleep(1000) if overlay == '7': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() except: pass xbmc.sleep(2000) elif self.content == 'movie': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .9) property = control.window.getProperty(pname) if watcher == True and not property == '7': control.window.setProperty(pname, '7') playcount.markMovieDuringPlayback(self.imdb, '7') elif watcher == False and not property == '6': control.window.setProperty(pname, '6') playcount.markMovieDuringPlayback(self.imdb, '6') except: pass xbmc.sleep(2000) elif self.content == 'episode': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .9) property = control.window.getProperty(pname) if watcher == True and not property == '7': control.window.setProperty(pname, '7') playcount.markEpisodeDuringPlayback(self.imdb, self.tvdb, self.season, self.episode, '7') elif watcher == False and not property == '6': control.window.setProperty(pname, '6') playcount.markEpisodeDuringPlayback(self.imdb, self.tvdb, self.season, self.episode, '6') except: pass xbmc.sleep(2000) control.window.clearProperty(pname)
def tvshowDirectory(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') traktCredentials = trakt.getTraktCredentialsInfo() try: isOld = False ; control.item().getArt('type') except: isOld = True isEstuary = True if 'estuary' in control.skin else False indicators = playcount.getTVShowIndicators(refresh=True) if action == 'tvshows' else playcount.getTVShowIndicators() watchedMenu = control.lang(32068).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32066).encode('utf-8') unwatchedMenu = control.lang(32069).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32067).encode('utf-8') queueMenu = control.lang(32065).encode('utf-8') traktManagerMenu = control.lang(32070).encode('utf-8') nextMenu = control.lang(32053).encode('utf-8') for i in items: try: label = i['title'] systitle = sysname = urllib.quote_plus(i['originaltitle']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if banner == '0' and not fanart == '0': banner = fanart elif banner == '0' and not poster == '0': banner = poster if poster == '0': poster = addonPoster if banner == '0': banner = addonBanner meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'mediatype': 'tvshow'}) meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass if isEstuary == True: try: del meta['cast'] except: pass try: overlay = int(playcount.getTVShowOverlay(indicators, tvdb)) if overlay == 7: meta.update({'playcount': 1, 'overlay': 7}) else: meta.update({'playcount': 0, 'overlay': 6}) except: pass url = '%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) cm = [] cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append((watchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, imdb, tvdb))) cm.append((unwatchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, imdb, tvdb))) if traktCredentials == True: cm.append((traktManagerMenu, 'RunPlugin(%s?action=traktManager&name=%s&tvdb=%s&content=tvshow)' % (sysaddon, sysname, tvdb))) 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, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner}) if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.addContextMenuItems(cm) item.setInfo(type='Video', infoLabels = meta) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass try: url = items[0]['next'] if url == '': raise Exception() icon = control.addonNext() url = '%s?action=tvshowPage&url=%s' % (sysaddon, urllib.quote_plus(url)) item = control.item(label=nextMenu) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon, 'tvshow.poster': icon, 'season.poster': icon, 'banner': icon, 'tvshow.banner': icon, 'season.banner': icon}) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass control.content(syshandle, 'tvshows') #control.do_block_check(False) control.directory(syshandle, cacheToDisc=True) views.setView('tvshows', {'skin.confluence': 500})
def tvshowDirectory(self, items): if items == None or len(items) == 0: return isFolder = True if control.setting('autoplay') == 'false' and control.setting('hosts.mode') == '1' else False isFolder = False if control.window.getProperty('PseudoTVRunning') == 'True' else isFolder traktCredentials = trakt.getTraktCredentialsInfo() indicators = playcount.getTVShowIndicators() addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting('fanart') sysaddon = sys.argv[0] for i in items: try: label = i['title'] systitle = sysname = urllib.quote_plus(i['originaltitle']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if banner == '0' and not poster == '0': banner = poster if poster == '0': poster = addonPoster if banner == '0': banner = addonBanner meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) try: overlay = int(playcount.getTVShowOverlay(indicators, tvdb)) if overlay == 7: meta.update({'playcount': 1, 'overlay': 7}) else: meta.update({'playcount': 0, 'overlay': 6}) except: pass cm = [] if isFolder == False: cm.append((control.lang(30232).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) if traktCredentials == True: cm.append((control.lang(30236).encode('utf-8'), 'RunPlugin(%s?action=traktManager&name=%s&tvdb=%s&content=tvshow)' % (sysaddon, sysname, tvdb))) cm.append((control.lang(30242).encode('utf-8'), 'RunPlugin(%s?action=trailer&name=%s)' % (sysaddon, sysname))) cm.append((control.lang(30233).encode('utf-8'), 'Action(Info)')) cm.append((control.lang(30234).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, imdb, tvdb))) cm.append((control.lang(30235).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, imdb, tvdb))) cm.append((control.lang(30240).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon)) item = control.item(label=label, iconImage=poster, thumbnailImage=poster) try: item.setArt({'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner}) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels = meta) item.setProperty('Video', 'true') item.addContextMenuItems(cm, replaceItems=True) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) except: pass try: url = items[0]['next'] if url == '': raise Exception() url = '%s?action=tvshows&url=%s' % (sysaddon, urllib.quote_plus(url)) addonNext = control.addonNext() item = control.item(label=control.lang(30241).encode('utf-8'), iconImage=addonNext, thumbnailImage=addonNext) item.addContextMenuItems([], replaceItems=False) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) except: pass control.content(int(sys.argv[1]), 'tvshows') control.directory(int(sys.argv[1]), cacheToDisc=True) views.setView('tvshows', {'skin.estuary': 54, 'skin.confluence': 500})
def episodeDirectory(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(), tools.Settings.getBoolean('interface.fanart') traktCredentials = trakt.getTraktCredentialsInfo() try: isOld = False ; control.item().getArt('type') except: isOld = True isPlayable = 'true' if not 'plugin' in control.infoLabel('Container.PluginName') else 'false' indicators = playcount.getTVShowIndicators(refresh=True) try: multi = [i['tvshowtitle'] for i in items] except: multi = [] multi = len([x for y,x in enumerate(multi) if x not in multi[:y]]) multi = True if multi > 1 else False try: sysaction = items[0]['action'] except: sysaction = '' isFolder = False if not sysaction == 'episodes' else True playbackMenu = control.lang(32063).encode('utf-8') if control.setting('playback.automatic.enabled') == 'true' else control.lang(32064).encode('utf-8') traktHas = trakt.getTraktIndicatorsInfo() == True watchedMenu = control.lang(32068).encode('utf-8') if traktHas else control.lang(32066).encode('utf-8') unwatchedMenu = control.lang(32069).encode('utf-8') if traktHas else control.lang(32067).encode('utf-8') unwatchedEnabled = tools.Settings.getBoolean('interface.tvshows.unwatched.enabled') unwatchedLimit = tools.Settings.getBoolean('interface.tvshows.unwatched.limit') airEnabled = tools.Settings.getBoolean('interface.tvshows.air.enabled') if airEnabled: airZone = tools.Settings.getInteger('interface.tvshows.air.zone') airLocation = tools.Settings.getInteger('interface.tvshows.air.location') airFormat = tools.Settings.getInteger('interface.tvshows.air.format') airAbbreviation = tools.Settings.getBoolean('interface.tvshows.air.abbreviation') airBold = tools.Settings.getBoolean('interface.tvshows.air.bold') airLabel = interface.Format.bold(interface.Translation.string(35032) + ': ') queueMenu = control.lang(32065).encode('utf-8') traktManagerMenu = control.lang(32070).encode('utf-8') tvshowBrowserMenu = control.lang(32071).encode('utf-8') media = tools.Media() for i in items: try: if not 'label' in i: i['label'] = i['title'] if i['label'] == None or i['label'] == '' or i['label'] == '0': i['label'] = '%s %d' % (layoutEpisodeLong, int(i['episode'])) label = None try: label = media.title(tools.Media.TypeEpisode, title = i['label'], season = i['season'], episode = i['episode']) except: pass if label == None: label = i['label'] if multi == True and not label in i['tvshowtitle'] and not i['tvshowtitle'] in label: label = '%s - %s' % (i['tvshowtitle'], label) imdb, tvdb, year, season, episode, premiered = i['imdb'], i['tvdb'], i['year'], i['season'], i['episode'], i['premiered'] # Make new episodes italicself. date = tools.Time.datetime(premiered, format = '%Y-%m-%d') current = datetime.datetime.now() if current <= date or current.date() == date.date(): label = '[I]' + label + '[/I]' systitle = urllib.quote_plus(i['title']) systvshowtitle = urllib.quote_plus(i['tvshowtitle']) syspremiered = urllib.quote_plus(i['premiered']) meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'mediatype': 'episode'}) meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, systvshowtitle)}) # Bubbles # Remove default time, since this might mislead users. Rather show no time. #if not 'duration' in i: meta.update({'duration': '60'}) #elif i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass try: meta.update({'title': i['label']}) except: pass try: meta.update({'year': date.year}) # Kodi uses the year (the year the show started) as the year for the episode. Change it from the premiered date. except: pass if airEnabled: air = [] airday = None airtime = None if 'airday' in meta and not meta['airday'] == None and not meta['airday'] == '': airday = meta['airday'] if 'airtime' in meta and not meta['airtime'] == None and not meta['airtime'] == '': airtime = meta['airtime'] if 'airzone' in meta and not meta['airzone'] == None and not meta['airzone'] == '': if airLocation == 1: zoneTo = meta['airzone'] elif airLocation == 2: zoneTo = tools.Time.ZoneUtc else: zoneTo = tools.Time.ZoneLocal airtime = tools.Time.local(stringTime = meta['airtime'], stringDay = airday, zoneFrom = meta['airzone'], zoneTo = zoneTo) if airday: airday = airtime[1] airtime = airtime[0] if airday: if airAbbreviation: try: airday = airday[:3] except: pass air.append(airday) if airtime: air.append(airtime) if len(air) > 0: if airFormat == 0: air = airtime elif airFormat == 1: air = airday elif airFormat == 2: air = air = ' '.join(air) if airLocation == 0 or airLocation == 1: air = '[%s]' % air if airBold: air = interface.Format.bold(air) if airLocation == 0: label = '%s %s' % (air, label) elif airLocation == 1: label = '%s %s' % (label, air) elif airLocation == 2: meta['plot'] = '%s%s\r\n%s' % (airLabel, air, meta['plot']) elif airLocation == 3: meta['plot'] = '%s%s\r\n%s' % (airLabel, meta['plot'], air) airEnabled = tools.Settings.getBoolean('interface.tvshows.air.enabled') if airEnabled: airZone = tools.Settings.getInteger('interface.tvshows.air.zone') airLocation = tools.Settings.getInteger('interface.tvshows.air.location') airFormat = tools.Settings.getInteger('interface.tvshows.air.format') airAbbreviation = tools.Settings.getBoolean('interface.tvshows.air.abbreviation') airBold = tools.Settings.getBoolean('interface.tvshows.air.bold') sysmeta = urllib.quote_plus(json.dumps(meta)) url = self.parameterize('%s?action=play&title=%s&year=%s&imdb=%s&tvdb=%s&season=%s&episode=%s&tvshowtitle=%s&premiered=%s&meta=%s&t=%s' % (sysaddon, systitle, year, imdb, tvdb, season, episode, systvshowtitle, syspremiered, sysmeta, self.systime)) sysurl = urllib.quote_plus(url) path = self.parameterize('%s?action=play&title=%s&year=%s&imdb=%s&tvdb=%s&season=%s&episode=%s&tvshowtitle=%s&premiered=%s' % (sysaddon, systitle, year, imdb, tvdb, season, episode, systvshowtitle, syspremiered)) if isFolder == True: url = self.parameterize('%s?action=episodes&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s&season=%s&episode=%s' % (sysaddon, systvshowtitle, year, imdb, tvdb, season, episode)) cm = [] cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) if multi == True: link = self.parameterize('%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systvshowtitle, year, imdb, tvdb)) cm.append((tvshowBrowserMenu, 'Container.Update(%s,return)' % link)) try: overlay = int(playcount.getEpisodeOverlay(indicators, imdb, tvdb, season, episode)) if overlay == 7: if not traktHas: link = self.parameterize('%s?action=episodePlaycount&imdb=%s&tvdb=%s&season=%s&episode=%s&query=6' % (sysaddon, imdb, tvdb, season, episode)) cm.append((unwatchedMenu, 'RunPlugin(%s)' % link)) meta.update({'playcount': 1, 'overlay': 7}) else: if not traktHas: link = self.parameterize('%s?action=episodePlaycount&imdb=%s&tvdb=%s&season=%s&episode=%s&query=7' % (sysaddon, imdb, tvdb, season, episode)) cm.append((watchedMenu, 'RunPlugin(%s)' % link)) meta.update({'playcount': 0, 'overlay': 6}) except: overlay = None if traktCredentials == True: link = self.parameterize('%s?action=traktManager&tvdb=%s&season=%s&episode=%s' % (sysaddon, tvdb, season, episode)) cm.append((traktManagerMenu, 'RunPlugin(%s)' % link)) if not self.kidsOnly() and control.setting('downloads.manual.enabled') == 'true': cm.append((control.lang(33585).encode('utf-8'), 'Container.Update(%s?action=downloadsManager)' % (sysaddon))) if isFolder == False: 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) if multi and unwatchedEnabled and not overlay == None and not overlay == 7: try: count = playcount.getShowCount(indicators, tvdb, unwatchedLimit) if count: item.setProperty('TotalEpisodes', str(count['total'])) item.setProperty('WatchedEpisodes', str(count['watched'])) item.setProperty('UnWatchedEpisodes', str(count['unwatched'])) except: pass art = {} poster = '0' if poster == '0' and 'poster3' in i: poster = i['poster3'] if poster == '0' and 'poster2' in i: poster = i['poster2'] if poster == '0' and 'poster' in i: poster = i['poster'] icon = '0' if icon == '0' and 'icon3' in i: icon = i['icon3'] if icon == '0' and 'icon2' in i: icon = i['icon2'] if icon == '0' and 'icon' in i: icon = i['icon'] thumb = '0' if thumb == '0' and 'thumb3' in i: thumb = i['thumb3'] if thumb == '0' and 'thumb2' in i: thumb = i['thumb2'] if thumb == '0' and 'thumb' in i: thumb = i['thumb'] banner = '0' if banner == '0' and 'banner3' in i: banner = i['banner3'] if banner == '0' and 'banner2' in i: banner = i['banner2'] if banner == '0' and 'banner' in i: banner = i['banner'] fanart = '0' if settingFanart: if fanart == '0' and 'fanart3' in i: fanart = i['fanart3'] if fanart == '0' and 'fanart2' in i: fanart = i['fanart2'] if fanart == '0' and 'fanart' in i: fanart = i['fanart'] clearlogo = '0' if clearlogo == '0' and 'clearlogo' in i: clearlogo = i['clearlogo'] clearart = '0' if clearart == '0' and 'clearart' in i: clearart = i['clearart'] if poster == '0': poster = addonPoster if icon == '0': icon = poster if thumb == '0': thumb = poster if banner == '0': banner = addonBanner if fanart == '0': fanart = addonFanart if not poster == '0' and not poster == None: art.update({'poster' : poster, 'tvshow.poster' : poster, 'season.poster' : poster}) if not icon == '0' and not icon == None: art.update({'icon' : icon}) if not thumb == '0' and not thumb == None: art.update({'thumb' : thumb}) if not banner == '0' and not banner == None: art.update({'banner' : banner}) if not clearlogo == '0' and not clearlogo == None: art.update({'clearlogo' : clearlogo}) if not clearart == '0' and not clearart == None: art.update({'clearart' : clearart}) if not fanart == '0' and not fanart == None: item.setProperty('Fanart_Image', fanart) item.setArt(art) item.addContextMenuItems(cm) item.setProperty('IsPlayable', isPlayable) item.setInfo(type='Video', infoLabels = meta) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder) except: tools.Logger.error pass # Bubbles # Show multi as show, in order to display unwatched count. if multi: control.content(syshandle, 'tvshows') control.directory(syshandle, cacheToDisc=True) views.setView('shows', {'skin.estuary': 55, 'skin.confluence': 500}) else: control.content(syshandle, 'episodes') control.directory(syshandle, cacheToDisc=True) views.setView('episodes', {'skin.estuary': 55, 'skin.confluence': 504})
def keepPlaybackAlive(self): self._downloadCheck() pname = '%s.player.overlay' % control.addonInfo('id') control.window.clearProperty(pname) if self.content == 'movie': overlay = playcount.getMovieOverlay(playcount.getMovieIndicators(), self.imdb) elif self.content == 'episode': overlay = playcount.getEpisodeOverlay(playcount.getTVShowIndicators(), self.imdb, self.tvdb, self.season, self.episode) else: overlay = '6' dots = '' title = '' message = '' background = False progressDialog = None title = interface.Translation.string(33451) message = interface.Translation.string(33452) message = interface.Format.fontBold(message) background = tools.Settings.getInteger('interface.stream.progress') == 1 interface.Loader.hide() progressDialog = interface.Dialog.progress(background = background, title = title, message = message) timeout = 90 # 60 too little for slow connections, eg over VPN. for i in range(0, timeout): if self.isPlayingVideo(): break if self.download == None: try: canceled = progressDialog.iscanceled() except: canceled = False if canceled: break label = message + ' ' + dots dots += '.' if len(dots) > 3: dots = '' progress = 50 + int((i / float(timeout)) * 50) # Only half the progress, since the other half is from sources __init__.py. if background: progressDialog.update(progress, title, label) else: progressDialog.update(progress, label) else: self._downloadCheck() xbmc.sleep(500) try: canceled = progressDialog.iscanceled() except: canceled = False try: if not canceled: progressDialog.update(100, '') # Must be set to 100 for background dialog, otherwise it shows up in a later dialog. except: pass try: progressDialog.close() except: pass if canceled: self.stop() return # Kodi often starts playback where isPlaying() is true and isPlayingVideo() is false, since the video loading is still in progress, whereas the play is already started. # Only show the notification if the player is not able to load the file at all. if not self.isPlaying() and not self.isPlayingVideo(): interface.Dialog.notification(title = 33448, message = 33450, icon = interface.Dialog.IconError) # NB: Overlay is 7 when movie stopped and resumed, causing the movie to be never added to Trakt. '''if overlay == '7': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() except: pass if self.download == None: xbmc.sleep(2000) else: for i in range(4): self._downloadCheck() xbmc.sleep(500) elif self.content == 'movie':''' if self.content == 'movie': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .8) property = control.window.getProperty(pname) if watcher == True and not property == '7': control.window.setProperty(pname, '7') playcount.markMovieDuringPlayback(self.imdb, '7') elif watcher == False and not property == '6': control.window.setProperty(pname, '6') playcount.markMovieDuringPlayback(self.imdb, '6') except: pass if self.download == None: xbmc.sleep(2000) else: for i in range(4): self._downloadCheck() xbmc.sleep(500) elif self.content == 'episode': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .8) property = control.window.getProperty(pname) if watcher == True and not property == '7': control.window.setProperty(pname, '7') playcount.markEpisodeDuringPlayback(self.imdb, self.tvdb, self.season, self.episode, '7') elif watcher == False and not property == '6': control.window.setProperty(pname, '6') playcount.markEpisodeDuringPlayback(self.imdb, self.tvdb, self.season, self.episode, '6') except: pass if self.download == None: xbmc.sleep(2000) else: for i in range(4): self._downloadCheck() xbmc.sleep(500) control.window.clearProperty(pname)
def tvshowDirectory(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') traktCredentials = trakt.getTraktCredentialsInfo() try: isOld = False ; control.item().getArt('type') except: isOld = True indicators = playcount.getTVShowIndicators(refresh=True) if action == 'tvshows' else playcount.getTVShowIndicators() flatten = True if control.setting('flatten.tvshows') == 'true' else False watchedMenu = control.lang(32068).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32066).encode('utf-8') unwatchedMenu = control.lang(32069).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32067).encode('utf-8') queueMenu = control.lang(32065).encode('utf-8') traktManagerMenu = control.lang(32070).encode('utf-8') nextMenu = control.lang(32053).encode('utf-8') playRandom = control.lang(32535).encode('utf-8') for i in items: try: label = i['title'] systitle = sysname = urllib.quote_plus(i['originaltitle']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], 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({'tvdb_id': tvdb}) meta.update({'mediatype': 'tvshow'}) meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if not 'duration' in i: meta.update({'duration': '60'}) elif i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass try: overlay = int(playcount.getTVShowOverlay(indicators, tvdb)) if overlay == 7: meta.update({'playcount': 1, 'overlay': 7}) else: meta.update({'playcount': 0, 'overlay': 6}) except: pass if flatten == True: url = '%s?action=episodes&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) else: url = '%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) cm = [] cm.append((playRandom, 'RunPlugin(%s?action=random&rtype=season&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s)' % (sysaddon, urllib.quote_plus(systitle), urllib.quote_plus(year), urllib.quote_plus(imdb), urllib.quote_plus(tvdb)))) cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) #cm.append((watchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, imdb, tvdb))) #cm.append((unwatchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, imdb, tvdb))) if traktCredentials == True: cm.append((traktManagerMenu, 'RunPlugin(%s?action=traktManager&name=%s&tvdb=%s&content=tvshow)' % (sysaddon, sysname, tvdb))) if isOld == True: cm.append((control.lang2(19033).encode('utf-8'), 'Action(Info)')) item = control.item(label=label) art = {} if 'poster' in i and not i['poster'] == '0': art.update({'icon': i['poster'], 'thumb': i['poster'], 'poster': i['poster']}) #elif 'poster2' in i and not i['poster2'] == '0': #art.update({'icon': i['poster2'], 'thumb': i['poster2'], 'poster': i['poster2']}) else: art.update({'icon': addonPoster, 'thumb': addonPoster, 'poster': addonPoster}) if 'banner' in i and not i['banner'] == '0': art.update({'banner': i['banner']}) #elif 'banner2' in i and not i['banner2'] == '0': #art.update({'banner': i['banner2']}) elif 'fanart' in i and not i['fanart'] == '0': art.update({'banner': i['fanart']}) else: art.update({'banner': addonBanner}) if 'clearlogo' in i and not i['clearlogo'] == '0': art.update({'clearlogo': i['clearlogo']}) if 'clearart' in i and not i['clearart'] == '0': art.update({'clearart': i['clearart']}) if settingFanart == 'true' and 'fanart' in i and not i['fanart'] == '0': item.setProperty('Fanart_Image', i['fanart']) #elif settingFanart == 'true' and 'fanart2' in i and not i['fanart2'] == '0': #item.setProperty('Fanart_Image', i['fanart2']) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setArt(art) item.addContextMenuItems(cm) item.setInfo(type='Video', infoLabels = meta) video_streaminfo = {'codec': 'h264'} item.addStreamInfo('video', video_streaminfo) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass try: url = items[0]['next'] if url == '': raise Exception() icon = control.addonNext() url = '%s?action=tvshowPage&url=%s' % (sysaddon, urllib.quote_plus(url)) item = control.item(label=nextMenu) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon, 'banner': icon}) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass control.content(syshandle, 'tvshows') control.directory(syshandle, cacheToDisc=True) views.setView('tvshows', {'skin.estuary': 55, 'skin.confluence': 500})
def keepPlaybackAlive(self): pname = '%s.player.overlay' % control.addonInfo('id') control.window.clearProperty(pname) if self.content == 'movie': overlay = playcount.getMovieOverlay(playcount.getMovieIndicators(), self.imdb) elif self.content == 'episode': overlay = playcount.getEpisodeOverlay( playcount.getTVShowIndicators(), self.imdb, self.tvdb, self.season, self.episode) else: overlay = '6' for i in range(0, 240): if self.isPlayingVideo(): break xbmc.sleep(1000) if overlay == '7': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() except Exception: pass xbmc.sleep(2000) elif self.content == 'movie': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .9) property = control.window.getProperty(pname) if watcher is True and not property == '7': control.window.setProperty(pname, '7') playcount.markMovieDuringPlayback(self.imdb, '7') elif watcher is False and not property == '6': control.window.setProperty(pname, '6') playcount.markMovieDuringPlayback(self.imdb, '6') except Exception: pass xbmc.sleep(2000) elif self.content == 'episode': while self.isPlayingVideo(): try: self.totalTime = self.getTotalTime() self.currentTime = self.getTime() watcher = (self.currentTime / self.totalTime >= .9) property = control.window.getProperty(pname) if watcher is True and not property == '7': control.window.setProperty(pname, '7') playcount.markEpisodeDuringPlayback( self.imdb, self.tvdb, self.season, self.episode, '7') elif watcher is False and not property == '6': control.window.setProperty(pname, '6') playcount.markEpisodeDuringPlayback( self.imdb, self.tvdb, self.season, self.episode, '6') except Exception: pass xbmc.sleep(2000) control.window.clearProperty(pname)
def tvshowDirectory(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') traktCredentials = trakt.getTraktCredentialsInfo() try: isOld = False ; control.item().getArt('type') except: isOld = True indicators = playcount.getTVShowIndicators(refresh=True) if action == 'tvshows' else playcount.getTVShowIndicators() watchedMenu = control.lang(32068).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32066).encode('utf-8') unwatchedMenu = control.lang(32069).encode('utf-8') if trakt.getTraktIndicatorsInfo() == True else control.lang(32067).encode('utf-8') queueMenu = control.lang(32065).encode('utf-8') traktManagerMenu = control.lang(32070).encode('utf-8') nextMenu = control.lang(32053).encode('utf-8') for i in items: try: label = i['title'] systitle = sysname = urllib.quote_plus(i['originaltitle']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'mediatype': 'tvshow'}) meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if not 'duration' in i: meta.update({'duration': '60'}) elif i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass try: overlay = int(playcount.getTVShowOverlay(indicators, tvdb)) if overlay == 7: meta.update({'playcount': 1, 'overlay': 7}) else: meta.update({'playcount': 0, 'overlay': 6}) except: pass url = '%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) cm = [] cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) cm.append((watchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, imdb, tvdb))) cm.append((unwatchedMenu, 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, imdb, tvdb))) if traktCredentials == True: cm.append((traktManagerMenu, 'RunPlugin(%s?action=traktManager&name=%s&tvdb=%s&content=tvshow)' % (sysaddon, sysname, tvdb))) 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}) if 'banner2' in i and not i['banner2'] == '0': art.update({'banner': i['banner2']}) elif 'banner' in i and not i['banner'] == '0': art.update({'banner': i['banner']}) elif 'fanart' in i and not i['fanart'] == '0': art.update({'banner': i['fanart']}) else: art.update({'banner': addonBanner}) if 'clearlogo' in i and not i['clearlogo'] == '0': art.update({'clearlogo': i['clearlogo']}) if 'clearart' in i and not i['clearart'] == '0': art.update({'clearart': i['clearart']}) if settingFanart == 'true' and 'fanart2' in i and not i['fanart2'] == '0': item.setProperty('Fanart_Image', i['fanart2']) elif 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.setInfo(type='Video', infoLabels = meta) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass try: url = items[0]['next'] if url == '': raise Exception() icon = control.addonNext() url = '%s?action=tvshowPage&url=%s' % (sysaddon, urllib.quote_plus(url)) item = control.item(label=nextMenu) item.setArt({'icon': icon, 'thumb': icon, 'poster': icon, 'banner': icon}) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: pass control.content(syshandle, 'tvshows') control.directory(syshandle, cacheToDisc=True) views.setView('tvshows', {'skin.confluence': 500})
def keepAlive(self): pname = '%s.player.overlay' % control.addonInfo('id') control.window.clearProperty(pname) if self.media_type == 'movie': overlay = playcount.getMovieOverlay(playcount.getMovieIndicators(), self.imdb) elif self.media_type == 'episode': overlay = playcount.getEpisodeOverlay( playcount.getTVShowIndicators(), self.imdb, self.tvdb, self.season, self.episode) else: overlay = '6' for i in range(0, 240): if self.isPlayback(): break xbmc.sleep(1000) while self.isPlayingVideo(): try: if not self.playback_started: xbmc.sleep(1000) continue if not self.playback_started: self.start_playback() # if control.condVisibility('Window.IsActive(okdialog)'): # control.closeOk() try: self.current_time = self.getTime() self.media_length = self.getTotalTime() except: pass watcher = (self.getWatchedPercent() >= 90) property = control.window.getProperty(pname) if self.media_type == 'movie': try: if watcher is True and property != '7': control.window.setProperty(pname, '7') playcount.markMovieDuringPlayback(self.imdb, '7') elif watcher is False and property != '6': control.window.setProperty(pname, '6') playcount.markMovieDuringPlayback(self.imdb, '6') except: continue xbmc.sleep(2000) elif self.media_type == 'episode': try: if watcher is True and property != '7': control.window.setProperty(pname, '7') playcount.markEpisodeDuringPlayback( self.imdb, self.tvdb, self.season, self.episode, '7') elif watcher is False and property != '6': control.window.setProperty(pname, '6') playcount.markEpisodeDuringPlayback( self.imdb, self.tvdb, self.season, self.episode, '6') except: continue xbmc.sleep(2000) except: import traceback traceback.print_exc() xbmc.sleep(1000) continue # xbmc.sleep(3000) control.window.clearProperty(pname)
def tvshowDirectory(self, items): if items == None or len(items) == 0: return isFolder = True if control.setting('autoplay') == 'false' and control.setting('hosts.mode') == '1' else False isFolder = False if control.window.getProperty('PseudoTVRunning') == 'True' else isFolder traktCredentials = trakt.getTraktCredentialsInfo() indicators = playcount.getTVShowIndicators() addonPoster, addonBanner = control.addonPoster(), control.addonBanner() addonFanart, settingFanart = control.addonFanart(), control.setting('fanart') sysaddon = sys.argv[0] for i in items: try: label = i['title'] systitle = sysname = urllib.quote_plus(i['originaltitle']) sysimage = urllib.quote_plus(i['poster']) imdb, tvdb, year = i['imdb'], i['tvdb'], i['year'] poster, banner, fanart = i['poster'], i['banner'], i['fanart'] if banner == '0' and not poster == '0': banner = poster if poster == '0': poster = addonPoster if banner == '0': banner = addonBanner meta = dict((k,v) for k, v in i.iteritems() if not v == '0') meta.update({'trailer': '%s?action=trailer&name=%s' % (sysaddon, sysname)}) if i['duration'] == '0': meta.update({'duration': '60'}) try: meta.update({'duration': str(int(meta['duration']) * 60)}) except: pass try: meta.update({'genre': cleangenre.lang(meta['genre'], self.lang)}) except: pass sysmeta = urllib.quote_plus(json.dumps(meta)) url = '%s?action=seasons&tvshowtitle=%s&year=%s&imdb=%s&tvdb=%s' % (sysaddon, systitle, year, imdb, tvdb) try: overlay = int(playcount.getTVShowOverlay(indicators, tvdb)) if overlay == 7: meta.update({'playcount': 1, 'overlay': 7}) else: meta.update({'playcount': 0, 'overlay': 6}) except: pass cm = [] if isFolder == False: cm.append((control.lang(30232).encode('utf-8'), 'RunPlugin(%s?action=queueItem)' % sysaddon)) if traktCredentials == True: cm.append((control.lang(30236).encode('utf-8'), 'RunPlugin(%s?action=traktManager&name=%s&tvdb=%s&content=tvshow)' % (sysaddon, sysname, tvdb))) cm.append((control.lang(30242).encode('utf-8'), 'RunPlugin(%s?action=trailer&name=%s)' % (sysaddon, sysname))) cm.append((control.lang(30233).encode('utf-8'), 'Action(Info)')) cm.append((control.lang(30234).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=7)' % (sysaddon, systitle, imdb, tvdb))) cm.append((control.lang(30235).encode('utf-8'), 'RunPlugin(%s?action=tvPlaycount&name=%s&imdb=%s&tvdb=%s&query=6)' % (sysaddon, systitle, imdb, tvdb))) cm.append((control.lang(30240).encode('utf-8'), 'RunPlugin(%s?action=addView&content=tvshows)' % sysaddon)) item = control.item(label=label, iconImage=poster, thumbnailImage=poster) try: item.setArt({'poster': poster, 'tvshow.poster': poster, 'season.poster': poster, 'banner': banner, 'tvshow.banner': banner, 'season.banner': banner}) except: pass if settingFanart == 'true' and not fanart == '0': item.setProperty('Fanart_Image', fanart) elif not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) item.setInfo(type='Video', infoLabels = meta) item.setProperty('Video', 'true') item.addContextMenuItems(cm, replaceItems=True) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) except: pass try: url = items[0]['next'] if url == '': raise Exception() url = '%s?action=tvshows&url=%s' % (sysaddon, urllib.quote_plus(url)) addonNext = control.addonNext() item = control.item(label=control.lang(30241).encode('utf-8'), iconImage=addonNext, thumbnailImage=addonNext) item.addContextMenuItems([], replaceItems=False) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=True) except: pass control.content(int(sys.argv[1]), 'tvshows') control.directory(int(sys.argv[1]), cacheToDisc=True) views.setView('tvshows', {'skin.confluence': 500})