From 2ba7af7d036622fbc62b6c2a16690f51ed86e7d8 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Fri, 29 Jan 2021 17:26:58 +0100 Subject: [PATCH 1/4] Fix Community --- specials/community.py | 1 + 1 file changed, 1 insertion(+) diff --git a/specials/community.py b/specials/community.py index 70726072..29dda08b 100644 --- a/specials/community.py +++ b/specials/community.py @@ -401,6 +401,7 @@ def findvideos(item): json = item.url['links'] else: json = item.url + item.url = '' for option in json: extra = set_extra_values(item, option, item.path) title = item.fulltitle + (' - '+option['title'] if 'title' in option else '') From 0ecca0ba460af090fe4b19f31c63b8ce6f463544 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Fri, 29 Jan 2021 17:27:31 +0100 Subject: [PATCH 2/4] Fix UPtoStream --- servers/uptobox.py | 107 ++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/servers/uptobox.py b/servers/uptobox.py index cda39d75..70444cbd 100755 --- a/servers/uptobox.py +++ b/servers/uptobox.py @@ -1,109 +1,98 @@ # -*- coding: utf-8 -*- + import sys - -from platformcode import config - PY3 = False if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int -if PY3: - #from future import standard_library - #standard_library.install_aliases() - import urllib.parse as urllib # Es muy lento en PY2. En PY3 es nativo -else: - import urllib # Usamos el nativo de PY2 que es más rápido +if PY3: import urllib.parse as urllib +else: import urllib from core import httptools from core import scrapertools from platformcode import logger +from core.support import match def test_video_exists(page_url): - logger.debug("(page_url='%s')" % page_url) - + logger.info("(page_url='%s')" % page_url) + global data data = httptools.downloadpage(page_url).data if "Streaming link:" in data: return True, "" - elif "Unfortunately, the file you want is not available." in data or "Unfortunately, the video you want to see is not available" in data or "This stream doesn" in data\ - or "Page not found" in data: - return False, config.get_localized_string(70449) % "Uptobox" + elif "Unfortunately, the file you want is not available." in data or "Unfortunately, the video you want to see is not available" in data or "This stream doesn" in data or "Page not found" in data or "Archivo no encontrado" in data: + return False, config.get_localized_string(70449) % "UPtoStream" wait = scrapertools.find_single_match(data, "You have to wait ([0-9]+) (minute|second)") if len(wait) > 0: - tiempo = wait[1].replace("minute", "minuto/s").replace("second", "segundos") - return False, "[Uptobox] Alcanzado límite de descarga.
Tiempo de espera: " + wait[0] + " " + tiempo + return False, "[UPtoStream] Limite di download raggiunto.
Attendi " + wait[0] + " " + wait[1] return True, "" def get_video_url(page_url, premium=False, user="", password="", video_password=""): - logger.debug("(page_url='%s')" % page_url) - # Si el enlace es directo de upstream + logger.info("(page_url='%s')" % page_url) + global data + # If the link is direct from upstream if "uptobox" not in page_url: - data = httptools.downloadpage(page_url).data if "Video not found" in data: page_url = page_url.replace("uptostream.com/iframe/", "uptobox.com/") - data = httptools.downloadpage(page_url).data - video_urls = uptobox(page_url, data) + video_urls = uptobox(page_url, httptools.downloadpage(page_url).data) else: video_urls = uptostream(data) else: - data = httptools.downloadpage(page_url).data - # Si el archivo tiene enlace de streaming se redirige a upstream + # If the file has a streaming link, it is redirected to upstream if "Streaming link:" in data: - page_url = "http://uptostream.com/iframe/" + scrapertools.find_single_match(page_url, - 'uptobox.com/([a-z0-9]+)') - data = httptools.downloadpage(page_url).data - video_urls = uptostream(data) + page_url = "http://uptostream.com/iframe/" + scrapertools.find_single_match(page_url, 'uptobox.com/([a-z0-9]+)') + video_urls = uptostream(httptools.downloadpage(page_url).data) else: - # Si no lo tiene se utiliza la descarga normal + # If you don't have it, the normal download is used video_urls = uptobox(page_url, data) - - for video_url in video_urls: - logger.debug("%s - %s" % (video_url[0], video_url[1])) return video_urls def uptostream(data): - subtitle = scrapertools.find_single_match(data, "kind='subtitles' src='//([^']+)'") - if subtitle: + video_id = match(data, patron=r"var videoId\s*=\s*'([^']+)").match + subtitle = match(data, patron=r'kind="subtitles" src="([^"]+)"').match + if subtitle and not '://' in subtitle: subtitle = "http://" + subtitle video_urls = [] - videos1 = [] - data = data.replace("\\","") - patron = 'src":"([^"]+).*?' - patron += 'type":"([^"]+).*?' - patron += 'res":"([^"]+).*?' - patron += 'lang":"([^"]+)' - media = scrapertools.find_multiple_matches(data, patron) - for media_url, tipo, res, lang in media: - videos1.append([media_url, tipo, res, lang]) - videos1.sort(key=lambda videos1: int(videos1[2])) - for x in videos1: - media_url = x[0] - tipo = x[1] - res = x[2] - lang = x[3] + api_url = "https://uptostream.com/api/streaming/source/get?token=null&file_code=%s" % video_id + api_data = httptools.downloadpage(api_url).json + js_code = api_data.get('data', '').get('sources', '') + + from lib import js2py + + context = js2py.EvalJs({'atob': atob}) + context.execute(js_code) + result = context.sources + + for x in result: + media_url = x.get('src', '') + tipo = x.get('type', '') + res = x.get('label', '') + lang = x.get('lang', '') tipo = tipo.replace("video/","") - extension = ".%s (%s)" % (tipo, res) - if lang: - extension = extension.replace(")", "/%s)" % lang[:3]) - video_urls.append([extension + " [uptostream]", media_url, 0, subtitle]) + if lang: extension = "{} - {} [{}]".format(tipo, res, lang.upper()) + else: extension = "{} - {}".format(tipo, res) + video_urls.append([extension + " [UPtoStream]", media_url, 0, subtitle]) + video_urls.sort(key=lambda url: int(match(url[0], patron=r'(\d+)p').match)) return video_urls +def atob(s): + import base64 + return base64.b64decode('{}'.format(s)).decode('utf-8') def uptobox(url, data): video_urls = [] post = "" - matches = scrapertools.find_multiple_matches(data, '') + + matches = match(data, patron=r'name="([^"]+)".*?value="([^"]*)"').matches for inputname, inputvalue in matches: post += inputname + "=" + inputvalue + "&" - data = httptools.downloadpage(url, post=post[:-1]).data - media = scrapertools.find_single_match(data, '\s*') - # Solo es necesario codificar la ultima parte de la url - url_strip = urllib.quote(media.rsplit('/', 1)[1]) + media = match(url, post=post[:-1], patron=r'\s*').match + url_strip = media.rsplit('/', 1)[1] media_url = media.rsplit('/', 1)[0] + "/" + url_strip - video_urls.append([media_url[-4:] + " [uptobox]", media_url]) + video_urls.append([media_url[-4:] + " [UPtoStream]", media_url]) - return video_urls + return video_urls \ No newline at end of file From 3975e1e9c5d598fe96ca5bcf0842ec61bc91d55c Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Fri, 29 Jan 2021 17:28:08 +0100 Subject: [PATCH 3/4] Autorenumber con TMDB --- core/tmdb.py | 9 +- platformcode/autorenumber.py | 330 ++++++++++++++--------------------- 2 files changed, 142 insertions(+), 197 deletions(-) diff --git a/core/tmdb.py b/core/tmdb.py index 0b6c709e..46b48e92 100644 --- a/core/tmdb.py +++ b/core/tmdb.py @@ -3,7 +3,7 @@ # from future import standard_library # standard_library.install_aliases() # from builtins import str -import sys +import sys, requests PY3 = False if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int @@ -1430,6 +1430,13 @@ class Tmdb(object): return ret_dic + def get_list_episodes(self): + # from core.support import dbg;dbg() + url = 'https://api.themoviedb.org/3/tv/{id}?api_key=a1ab8b8669da03637a4b98fa39c39228&language={lang}'.format(id=self.busqueda_id, lang=self.busqueda_idioma) + # url = 'https://api.themoviedb.org/3/tv/{id}/episode_groups?api_key=a1ab8b8669da03637a4b98fa39c39228&language={lang}'.format(id=_id, lang=self.busqueda_idioma) + results = requests.get(url).json()['seasons'] + return results if 'Error' not in results else {} + def get_videos(self): """ :return: Returns an ordered list (language / resolution / type) of Dict objects in which each of its elements corresponds to a trailer, teaser or clip from youtube. diff --git a/platformcode/autorenumber.py b/platformcode/autorenumber.py index fe1b18a8..dbfe34bf 100644 --- a/platformcode/autorenumber.py +++ b/platformcode/autorenumber.py @@ -5,23 +5,21 @@ import xbmc, xbmcgui, re, base64, inspect, sys -from core import jsontools, tvdb, scrapertools, filetools +from core import jsontools, tmdb, scrapertools, filetools from core.item import Item from core.support import typo, match, dbg, Item from platformcode import config, platformtools, logger PY3 = True if sys.version_info[0] >= 3 else False # Json Var -TVSHOW_RENUMERATE = "TVSHOW_AUTORENUMBER" -ID = "ID" -SEASON = "Season" -EPISODE = "Episode" -SPECIAL = "Special" -MODE = "Mode" -EPLIST = "EpList" -CHECK = "ReCheck" -SPLIST = "SpList" -TYPE = "Type" +RENUMBER = 'TVSHOW_AUTORENUMBER' +ID = 'id' +SEASONSDICT = 'seasons' +SEASON = 'season' +EPISODE = 'episode' +EPISODES = 'episodes' +SPECIALEPISODES = 'specials' +MANUALMODE = 'manual' # helper Functions def check(item): @@ -41,21 +39,15 @@ def filename(item): def load(item): logger.debug() - try: - json_file = open(filename(item), "r").read() - json = jsontools.load(json_file)[TVSHOW_RENUMERATE] - - except: - json = {} - + try: json = jsontools.load(open(filename(item), "r").read())[RENUMBER] + except: json = {} return json def write(item, json): logger.debug() - json_file = open(filename(item), "r").read() - js = jsontools.load(json_file) - js[TVSHOW_RENUMERATE] = json + js = jsontools.load(open(filename(item), "r").read()) + js[RENUMBER] = json with open(filename(item), "w") as file: file.write(jsontools.dump(js)) file.close() @@ -69,15 +61,6 @@ def b64(json, mode = 'encode'): ret = jsontools.load(base64.b64decode(json)) return ret -def RepresentsInt(s): - # Controllo Numro Stagione - logger.debug() - try: - int(s) - return True - except ValueError: - return False - def find_episodes(item): logger.debug() ch = __import__('channels.' + item.channel, fromlist=["channels.%s" % item.channel]) @@ -88,6 +71,15 @@ def busy(state): if state: xbmc.executebuiltin('ActivateWindow(busydialognocancel)') else: xbmc.executebuiltin('Dialog.Close(busydialognocancel)') +def RepresentsInt(s): + # Controllo Numro Stagione + logger.debug() + try: + int(s) + return True + except ValueError: + return False + # Main def start(itemlist, item=None): if not itemlist: return @@ -106,48 +98,44 @@ class autorenumber(): def __init__(self, itemlist, item=None): self.item = item self.itemlist = itemlist + self.renumberdict = load(self.itemlist[0]) if self.itemlist else load(item) if item else {} + self.selectspecials = False + self.manual = False self.auto = False - self.dictSeries = load(self.itemlist[0]) if self.itemlist else load(item) if item else {} - self.Episodes = {} - self.sp = False if self.item: self.auto = config.get_setting('autorenumber', item.channel) self.title = self.item.fulltitle.strip() if match(self.itemlist[0].title, patron=r'[Ss]?(\d+)(?:x|_|\s+)[Ee]?[Pp]?(\d+)').match: item.exit = True return - elif self.item.channel in self.item.channel_prefs and TVSHOW_RENUMERATE in self.item.channel_prefs[item.channel] and self.title not in self.dictSeries: + elif self.item.channel in self.item.channel_prefs and RENUMBER in self.item.channel_prefs[item.channel] and self.title not in self.renumberdict: from core.videolibrarytools import check_renumber_options from specials.videolibrary import update_videolibrary check_renumber_options(self.item) update_videolibrary(self.item) - if self.title in self.dictSeries and ID in self.dictSeries[self.title] and self.dictSeries[self.title][ID] != '0': - self.id = self.dictSeries[self.title][ID] - self.Episodes = b64(self.dictSeries[self.title][EPISODE], 'decode') if EPISODE in self.dictSeries[self.title] else {} - self.Season = self.dictSeries[self.title][SEASON] - self.Mode = self.dictSeries[self.title].get(MODE, False) - self.Type = self.dictSeries[self.title].get(TYPE, False) - if self.item.renumber: - self.config() - else: - self.renumber() + self.series = self.renumberdict.get(self.title,{}) + self.id = self.series.get(ID, 0) + self.episodes = self.series.get(EPISODES,{}) + self.seasonsdict = self.series.get(SEASONSDICT,{}) + self.season = self.series.get(SEASON, -1) + self.episode = self.series.get(EPISODE, -1) + self.manual = self.series.get(MANUALMODE, False) + self.specials = self.series.get(SPECIALEPISODES, {}) + if self.id and self.episodes and self.season >= 0 and self.episode >= 0: + if self.item.renumber: self.config() + else:self.renumber() elif self.auto or self.item.renumber: - self.Episodes = {} + self.episodes = {} self.config() - else: for item in self.itemlist: item.context = [{"title": typo(config.get_localized_string(70585), 'bold'), - "action": "start", - "channel": "autorenumber", - "from_channel": item.channel, - "from_action": item.action}] + "action": "start", + "channel": "autorenumber", + "from_channel": item.channel, + "from_action": item.action}] def config(self): - self.id = '' - if self.title in self.dictSeries: - self.id = self.dictSeries[self.title].get(ID,'') - # Pulizia del Titolo if any( word in self.title.lower() for word in ['specials', 'speciali']): self.title = re.sub(r'\s*specials|\s*speciali', '', self.title.lower()) @@ -155,184 +143,132 @@ class autorenumber(): self.item.contentSerieName = self.title.rstrip('123456789 ') while not self.item.exit: - tvdb.find_and_set_infoLabels(self.item) - if self.item.infoLabels['tvdb_id']: self.item.exit = True - else: self.item = platformtools.dialog_info(self.item, 'tvdb') + self.item.infoLabels['tmdb_id'] = '' + self.item.infoLabels['year'] = '-' + self.item.contentType ='tvshow' + tmdb.find_and_set_infoLabels(self.item) + if self.item.infoLabels['tmdb_id']: self.item.exit = True + else: self.item = platformtools.dialog_info(self.item, 'tmdb') # Rinumerazione Automatica if (not self.id and self.auto) or self.item.renumber: - self.id = self.item.infoLabels['tvdb_id'] if 'tvdb_id' in self.item.infoLabels else '' + self.id = self.item.infoLabels['tmdb_id'] if 'tmdb_id' in self.item.infoLabels else 0 if self.id: - self.dictRenumber = {ID: self.id} - self.dictSeries[self.title] = self.dictRenumber - if any(word in self.title.lower() for word in ['specials', 'speciali']): season = '0' - elif RepresentsInt(self.title.split()[-1]): season = self.title.split()[-1] - else: season = '1' - self.Season = self.dictRenumber[SEASON] = season + self.series = {ID: self.id} + self.renumberdict[self.title] = self.series + if any(word in self.title.lower() for word in ['specials', 'speciali']): season = 0 + elif RepresentsInt(self.title.split()[-1]): season = int(self.title.split()[-1]) + else: season = 1 + self.season = self.series[SEASON] = season + self.episode = 1 self.renumber() + def renumber(self): if not self.item.renumber and self.itemlist: - if '|' in self.Season: - season = int(self.Season.split('|')[0]) - addNumber = int(self.Season.split('|')[-1]) - 1 - else: - season = int(self.Season) - addNumber = 0 for item in self.itemlist: if not match(item.title, patron=r'[Ss]?(\d+)(?:x|_|\s+)[Ee]?[Pp]?(\d+)').match: number = match(item.title, patron=r'(\d+)').match.lstrip('0') if number: - if number in self.Episodes: - if season > 0: item.title = typo(self.Episodes[number] + ' - ', 'bold') + item.title - else: item.title = typo('0x%s - ' % str(int(number) + addNumber), 'bold') + item.title - else: - self.makelist() - if season > 0: item.title = typo(self.Episodes[number] + ' - ', 'bold') + item.title - else: item.title = typo('0x%s - ' % str(int(number) + addNumber), 'bold') + item.title + if not number in self.episodes: self.makelist() + item.title = '{} - {}'.format(typo(self.episodes[number], 'bold'), item.title) else: self.makelist() def makelist(self): - FirstOfSeason= 0 - self.EpList = b64(self.dictSeries[self.title][EPLIST], 'decode') if EPLIST in self.dictSeries[self.title] else [] - self.Pages = self.dictSeries[self.title].get(CHECK, [1]) - self.Mode = self.dictSeries[self.title].get(MODE, False) - self.Type = self.dictSeries[self.title].get(TYPE, False) - Specials = {} - Seasons = {} - - if '|' in self.Season: - ep = int(self.Season.split('|')[-1]) - Season = int(self.Season.split('|')[0]) - else: - Season = int(self.Season) - ep = 1 - + self.epdict = {} busy(True) itemlist = find_episodes(self.item) busy(False) - if self.item.renumber: - self.s = Season - self.e = 1 - Season, Episode, self.Mode, Specials, Seasons, Exit = SelectreNumeration(self, itemlist) - if Exit: return - if ep != 1: self.Season = '%s|%s' % (Season, Episode) - else: self.Season = str(Season) - - elif self.Episodes and not self.Mode: - self.s = Season - self.e = ep - self.sp = True - Season, Episode, self.Mode, Specials, Seasons, Exit = SelectreNumeration(self, itemlist) - - if self.Mode: - if not Seasons: - self.s = 1 - self.e = 1 - Season, Episode, self.Mode, Specials, Seasons, Exit = SelectreNumeration(self, itemlist, True) - self.Episodes = Seasons + if self.item.renumber or self.manual: + self.item.renumber = False + self.season, self.episode, self.manual, self.specials, Manual, Exit = SelectreNumeration(self, itemlist) + if Exit: + self.item.exit = True + return + if self.manual: + self.episodes = Manual else: - # Ricava Informazioni da TVDB - checkpages = [] - exist = True - Page = self.Pages[-1] - Episode = ep + seasons = tmdb.Tmdb(id_Tmdb=self.id).get_list_episodes() + count = 0 + for season in seasons: + s = season['season_number'] + c = season['episode_count'] + self.seasonsdict[str(s)] = c + if s > 0: + for e in range(1, c + 1): + count += 1 + self.epdict[count] = '{}x{:02d}'.format(s,e) + # dbg() + firstep = 0 + if self.season > 1: + for c in range(1, self.season): + firstep += self.seasonsdict[str(c)] + firstep += self.episode - 1 + count = 0 + if self.epdict: + for item in itemlist: + if not match(re.sub(r'\[[^\]]+\]','',item.title), patron=r'[Ss]?(\d+)(?:x|_|\s+)[Ee]?[Pp]?(\d+)').match: + # Otiene Numerazione Episodi + scraped_ep = match(re.sub(r'\[[^\]]+\]','',item.title), patron=r'(\d+)').match + if scraped_ep: + episode = int(scraped_ep) + if episode == 0: + self.episodes[str(episode)] = '0x01' + elif str(episode) in self.specials: + self.episodes[str(episode)] = self.specials[str(episode)] + count += 1 + elif episode - count + firstep in self.epdict: + self.episodes[str(episode)] = self.epdict[episode - count + firstep] + else: + self.episodes[str(episode)] = '0x{:02d}'.format(count + 1) + count += 1 + + if self.episodes: self.renumberdict[self.title][EPISODES] = self.episodes + self.renumberdict[self.title][MANUALMODE] = self.manual + self.renumberdict[self.title][SEASON] = self.season + self.renumberdict[self.title][EPISODE] = self.episode + self.renumberdict[self.title][SPECIALEPISODES] = self.specials + self.renumberdict[self.title][SEASONSDICT] = self.seasonsdict + write(self.item, self.renumberdict) + # if self.auto: self.renumber() - while exist: - data = tvdb.Tvdb(tvdb_id=self.id).get_list_episodes(self.id, Page) - if data: - for episode in data['data']: - if episode['firstAired'] and [episode['firstAired'], episode['airedSeason'], episode['airedEpisodeNumber']] not in self.EpList: - self.EpList.append([episode['firstAired'], episode['airedSeason'], episode['airedEpisodeNumber']]) - Page += 1 - else: - if Page not in checkpages: - checkpages.append(Page -1) - exist = False - self.Pages = [checkpages[-1]] - self.EpList.sort() - # Crea Dizionari per la Rinumerazione - if self.EpList: - self.specials = [] - self.regular = {} - self.complete = {} - allep = 1 - specialep = 0 - for episode in self.EpList: - self.complete[allep] = [str(episode[1]) + 'x' + str(episode[2]), episode[0]] - if episode[1] == 0: - self.specials.append(allep) - specialep = specialep + 1 - else: - self.regular[ep] = [str(episode[1]) + 'x' + str(episode[2]), str(episode[0]), allep - 1] - ep = ep + 1 - allep = allep + 1 - if Season > 1: - for numbers, data in self.regular.items(): - if data[0] == str(Season) + 'x1': - FirstOfSeason = numbers - 1 - else: FirstOfSeason = Episode - 1 - addiction = 0 - for item in itemlist: - if not match(re.sub(r'\[[^\]]+\]','',item.title), patron=r'[Ss]?(\d+)(?:x|_|\s+)[Ee]?[Pp]?(\d+)').match: - # Otiene Numerazione Episodi - scraped_ep = match(re.sub(r'\[[^\]]+\]','',item.title), patron=r'(\d+)').match - if scraped_ep: - episode = int(scraped_ep) - number = episode + FirstOfSeason - addiction - if episode == 0: - self.Episodes[str(episode)] = str(self.complete[self.regular[FirstOfSeason+1][2]][0]) - elif episode in Specials: - self.Episodes[str(episode)] = Specials[episode] - addiction += 1 - elif number <= len(self.regular) and number in self.regular: - self.Episodes[str(episode)] = str(self.regular[number][0]) - else: - try: self.Episodes[str(episode)] = str(self.complete[self.regular[number+2][2]][0]) - except: self.Episodes[str(episode)] = '0x0' - if self.Episodes: self.dictSeries[self.title][EPISODE] = b64(jsontools.dump(self.Episodes)) - self.dictSeries[self.title][EPLIST] = b64(jsontools.dump(self.EpList)) - self.dictSeries[self.title][MODE] = self.Mode - self.dictSeries[self.title][SEASON] = self.Season - self.dictSeries[self.title][CHECK] = self.Pages - write(self.item, self.dictSeries) - if self.auto: self.renumber() def SelectreNumeration(opt, itemlist, manual=False): class SelectreNumerationWindow(xbmcgui.WindowXMLDialog): def start(self, opt): - self.episodes = opt.Episodes if opt.Episodes else {} - self.dictSeries = opt.dictSeries + self.episodes = opt.episodes if opt.episodes else {} + self.renumberdict = opt.renumberdict self.item = opt.item self.title = opt.title - self.season = opt.s - self.episode = opt.e - self.mode = opt.Mode - self.sp = opt.sp + self.season = opt.season + self.episode = opt.episode + self.manual = opt.manual + self.sp = opt.selectspecials self.manual = opt.manual self.offset = 0 self.Exit = False self.itemlist = opt.itemlist self.count = 1 - self.specials = {} + self.specials = opt.specials self.items = [] self.selected = [] self.seasons = {} + self.seasonsdict = opt.seasonsdict self.doModal() - return self.season, self.episode, self.mode, self.specials, self.seasons, self.Exit + return self.season, self.episode, self.manual, self.specials, self.seasons, self.Exit def onInit(self): # Compatibility with Kodi 18 @@ -349,7 +285,7 @@ def SelectreNumeration(opt, itemlist, manual=False): if fanart: self.getControl(MBACKGROUND).setImage(fanart) self.getControl(INFO).setLabel(typo(config.get_localized_string(70822) + self.title, 'bold')) - self.mode = True + self.manual = True se = '1' ep = '1' @@ -434,17 +370,19 @@ def SelectreNumeration(opt, itemlist, manual=False): self.setFocusId(focus - 1) elif action in [UP]: if focus in [S]: - s += 1 - self.getControl(S).setLabel(str(s)) + if str(s + 1) in self.seasonsdict: + s += 1 + self.getControl(S).setLabel(str(s)) elif focus in [E]: - e += 1 - self.getControl(E).setLabel(str(e)) + if self.seasonsdict[str(s)] > e: + e += 1 + self.getControl(E).setLabel(str(e)) elif action in [DOWN]: if focus in [S]: - if s > 0: s -= 1 + if str(s - 1) in self.seasonsdict: s -= 1 self.getControl(S).setLabel(str(s)) elif focus in [E]: - if e > 0: e -= 1 + if e > 1: e -= 1 self.getControl(E).setLabel(str(e)) # MANUAL if focus in [MS, ME]: @@ -508,7 +446,7 @@ def SelectreNumeration(opt, itemlist, manual=False): # OPEN MANUAL elif control_id in [M]: self.getControl(INFO).setLabel(typo(config.get_localized_string(70823) + self.title, 'bold')) - self.mode = True + self.manual = True if self.episodes: items = [] se = '1' @@ -539,8 +477,8 @@ def SelectreNumeration(opt, itemlist, manual=False): # DELETE if control_id in [D]: self.Exit = True - self.dictSeries.pop(self.title) - write(self.item, self.dictSeries) + self.renumberdict.pop(self.title) + write(self.item, self.renumberdict) self.close() ## SPECIAL SECTION @@ -548,7 +486,7 @@ def SelectreNumeration(opt, itemlist, manual=False): p1 = self.getControl(SELECTED).getSelectedPosition() if control_id in [LIST]: item = self.getControl(LIST).getSelectedItem() - it = xbmcgui.ListItem(str(len(self.selected) + 1)) + it = xbmcgui.ListItem(str(len(self.selected) + len(self.specials) + 1)) it.setProperty('title', item.getLabel()) self.selected.append(it) index = self.getControl(SELECTED).getSelectedPosition() @@ -754,4 +692,4 @@ DOWN = 4 EXIT = 10 BACKSPACE = 92 -path = config.get_runtime_path() +path = config.get_runtime_path() \ No newline at end of file From d01ef7bc55dc473cf2243b9d5854fe41b1e837de Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Fri, 29 Jan 2021 18:18:08 +0100 Subject: [PATCH 4/4] Possibile fix refresh rate --- resources/kod.mp4 | Bin 16979 -> 9308 bytes resources/subtitle.mp4 | Bin 37647 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/subtitle.mp4 diff --git a/resources/kod.mp4 b/resources/kod.mp4 index 8f3e37a77a28ed35d574b524921cde85fa8c25f5..a06928aed192df5365555c9fbe0ae2e166e412da 100644 GIT binary patch literal 9308 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 WGe*Z*5*5UGhmmV=Oy?p_7zO}>fCByi