diff --git a/channels/vvvvid.py b/channels/vvvvid.py index be023b89..7f35a2b2 100644 --- a/channels/vvvvid.py +++ b/channels/vvvvid.py @@ -115,7 +115,9 @@ def episodios(item): itemlist = [] json_file = current_session.get(item.url, headers=headers, params=payload).json() show_id = str(json_file['data'][0]['show_id']) + season_id = str(json_file['data'][0]['season_id']) episodes = [] + support.log('SEASON ID= ',season_id) for episode in json_file['data']: episodes.append(episode['episodes']) for episode in episodes: @@ -123,20 +125,25 @@ def episodios(item): if 'stagione' in key['title'].lower(): match = support.match(key['title'].encode('ascii', 'replace'), r'[Ss]tagione\s*(\d+) - [Ee]pisodio\s*(\d+)')[0][0] title = match[0]+'x'+match[1] + ' - ' + item.fulltitle + make_item = True + elif int(key['season_id']) == int(season_id): + title = 'Episodio ' + key['number'] + ' - ' + key['title'].encode('ascii', 'replace'), + make_item = True else: - title = 'Episodio ' + key['number'].encode('ascii', 'replace') + ' - ' + key['title'], + make_item = False + if make_item == True: if type(title) == tuple: title = title[0] - itemlist.append( - Item( - channel = item.channel, - title = title, - fulltitle= item.fulltitle, - show= item.show, - url= host + show_id + '/season/' + str(key['season_id']) + '/', - action= 'findvideos', - video_id= key['video_id'], - contentType = item.contentType - )) + itemlist.append( + Item( + channel = item.channel, + title = title, + fulltitle= item.fulltitle, + show= item.show, + url= host + show_id + '/season/' + str(key['season_id']) + '/', + action= 'findvideos', + video_id= key['video_id'], + contentType = item.contentType + )) autorenumber.renumber(itemlist, item, 'bold') if autorenumber.check(item) == True: support.videolibrary(itemlist,item) diff --git a/core/support.py b/core/support.py index 8d074590..7e0b8fbb 100644 --- a/core/support.py +++ b/core/support.py @@ -346,7 +346,7 @@ def scrape(func): typeContentDict = args['type_content_dict'] if 'type_content_dict' in args else {} debug = args['debug'] if 'debug' in args else False log('STACK= ', inspect.stack()[1][3]) - if 'pagination' in args and inspect.stack()[1][3] not in ['add_tvshow', 'get_episodes', 'update', 'manual_renumeration']: pagination = args['pagination'] if args['pagination'] else 20 + if 'pagination' in args and inspect.stack()[1][3] not in ['add_tvshow', 'get_episodes', 'update']: pagination = args['pagination'] if args['pagination'] else 20 else: pagination = '' lang = args['deflang'] if 'deflang' in args else '' pag = item.page if item.page else 1 # pagination diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 216ad38a..4eeb714f 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -5638,25 +5638,25 @@ msgid "Always add the highest quality" msgstr "" msgctxt "#70730" -msgid "" -msgstr "Seleziona il metodo di rinumerazione" +msgid "Select the renumbering method" +msgstr "" msgctxt "#70731" -msgid "" -msgstr "Semi-Automatico" +msgid "Semi-Automatic" +msgstr "" msgctxt "#70732" -msgid "" -msgstr "Manuale" +msgid "Manual" +msgstr "" msgctxt "#70733" -msgid "" -msgstr "Digita il numero della Serie" +msgid "Enter the Series number" +msgstr "" msgctxt "#70734" -msgid "" -msgstr "Seleziona gli Episodi della Serie %s" +msgid "Select Series Episodes" +msgstr "" msgctxt "#70735" -msgid "" -msgstr "Numero dell'Episodio Speciale" +msgid "%s Special Episode Number" +msgstr "" diff --git a/resources/language/Italian/strings.po b/resources/language/Italian/strings.po index 34210042..4d082475 100644 --- a/resources/language/Italian/strings.po +++ b/resources/language/Italian/strings.po @@ -5654,9 +5654,9 @@ msgid "Enter the Series number" msgstr "Digita il numero della Serie" msgctxt "#70734" -msgid "Select Series %s Episodes" -msgstr "Seleziona gli Episodi della Serie %s" +msgid "Select Series Episodes" +msgstr "Seleziona gli Episodi della Serie" msgctxt "#70735" msgid "%s Special Episode Number" -msgstr "Numero dell'Episodio Speciale" +msgstr "Numero dell'Episodio Speciale %s" diff --git a/specials/autorenumber.py b/specials/autorenumber.py index d3c02dce..6e2c47d9 100644 --- a/specials/autorenumber.py +++ b/specials/autorenumber.py @@ -32,7 +32,7 @@ try: except: xbmcgui = None import xbmc -import re, base64, json, os +import re, base64, json, os, inspect from core import jsontools, tvdb, scrapertoolsV2 from core.support import typo, log, dbg from platformcode import config, platformtools, logger @@ -69,69 +69,91 @@ def context(exist): return _context def select_type(item): - select = platformtools.dialog_select(config.get_localized_string(70730),[config.get_localized_string(70731), config.get_localized_string(70732)]) + select = platformtools.dialog_select(config.get_localized_string(70730),[typo(config.get_localized_string(70731),'bold'), typo(config.get_localized_string(70732),'bold')]) if select == 0: semiautomatic_config_item(item) else: manual_renumeration(item) -def manual_renumeration(item): +def manual_renumeration(item, modify=False): log() _list = [] - EpisodeDict = {} - item.channel = item.from_channel + if item.from_channel: item.channel = item.from_channel title = item.show if item.show else item.fulltitle + dict_series = jsontools.get_node_from_file(item.channel, TAG_TVSHOW_RENUMERATE) - dict_series[title] = {} + if not dict_series.has_key(title): dict_series[title] = {} + + if dict_series[title].has_key(TAG_EPISODE) and dict_series[title][TAG_EPISODE]: + EpisodeDict = json.loads(base64.b64decode(dict_series[title][TAG_EPISODE])) + del dict_series[title][TAG_EPISODE] + else: EpisodeDict = {} + + if dict_series[title].has_key(TAG_EPLIST): del dict_series[title][TAG_EPLIST] + if dict_series[title].has_key(TAG_MODE): del dict_series[title][TAG_MODE] + if dict_series[title].has_key(TAG_CHECK): del dict_series[title][TAG_CHECK] + if dict_series[title].has_key(TAG_SEASON): del dict_series[title][TAG_SEASON] + if dict_series[title].has_key(TAG_SPECIAL): del dict_series[title][TAG_SPECIAL] dict_series[title][TAG_TYPE] = 'manual' + jsontools.update_node(dict_series, item.channel, TAG_TVSHOW_RENUMERATE)[0] - tvdb.find_and_set_infoLabels(item) + if not dict_series[title].has_key(TAG_ID) and not dict_series[title][TAG_ID]: + tvdb.find_and_set_infoLabels(item) - # Trova l'ID della serie - while not item.infoLabels['tvdb_id']: - try: - item.show = platformtools.dialog_input(default=item.show, heading=config.get_localized_string(30112)) # <- Enter title to search - tvdb.find_and_set_infoLabels(item) - except: - heading = config.get_localized_string(70704) # <- TMDB ID (0 to cancel) - info = platformtools.dialog_numeric(0, heading) - item.infoLabels['tvdb_id'] = '0' if info == '' else info + # Trova l'ID della serie + while not item.infoLabels['tvdb_id']: + try: + item.show = platformtools.dialog_input(default=item.show, heading=config.get_localized_string(30112)) # <- Enter title to search + tvdb.find_and_set_infoLabels(item) + except: + heading = config.get_localized_string(70704) # <- TMDB ID (0 to cancel) + info = platformtools.dialog_numeric(0, heading) + item.infoLabels['tvdb_id'] = '0' if info == '' else info - if item.infoLabels['tvdb_id']: - ID = item.infoLabels['tvdb_id'] - dict_renumerate = {TAG_ID: ID} - dict_series[title] = dict_renumerate + if item.infoLabels['tvdb_id']: + ID = item.infoLabels['tvdb_id'] + dict_renumerate = {TAG_ID: ID} + dict_series[title] = dict_renumerate - channel = __import__('channels.' + item.channel, fromlist=["channels.%s" % item.channel]) - itemlist = channel.episodios(item) + # channel = __import__('channels.' + item.channel, fromlist=["channels.%s" % item.channel]) + itemlist = get_episodes(item) for item in itemlist: Title = re.sub(r'\d+x\d+ - ', '', item.title) - if item.action == 'findvideos': - _list.append(Title) + if modify == True: + ep = int(scrapertoolsV2.find_single_match(Title, r'(\d+)')) + if item.action == 'findvideos' and not EpisodeDict.has_key(str(ep)): + _list.append(Title) + else: + if item.action == 'findvideos': + _list.append(Title) count = 1 while len(_list) > 0: - season = platformtools.dialog_numeric(0, config.get_localized_string(70733)) - selected = platformtools.dialog_multiselect(config.get_localized_string(70734) % season, _list) + selected = platformtools.dialog_multiselect(config.get_localized_string(70734), _list) if selected == None: break + season = '' + while not season: + season = platformtools.dialog_numeric(0, config.get_localized_string(70733)) for select in selected: - ep = scrapertoolsV2.find_single_match(_list[select], r'(\d+)') + ep = int(scrapertoolsV2.find_single_match(_list[select], r'(\d+)')) if season == '0': episode = '' while not episode: episode = platformtools.dialog_numeric(0, config.get_localized_string(70735) % _list[select] ) - EpisodeDict[ep] = '%sx%s' %(season, episode.zfill(2)) + EpisodeDict[str(ep)] = '%sx%s' %(season, episode.zfill(2)) else: - EpisodeDict[ep] = '%sx%s' %(season, str(count).zfill(2)) + EpisodeDict[str(ep)] = '%sx%s' %(season, str(count).zfill(2)) count += 1 for select in reversed(selected): del _list[select] - if len(_list) == 0: - EpisodeDict = base64.b64encode(json.dumps(EpisodeDict)) - dict_series[title][TAG_EPISODE] = EpisodeDict - else: - dict_series[title] = {} + + + dict_series[title][TAG_TYPE] = 'manual' + EpisodeDict = base64.b64encode(json.dumps(EpisodeDict)) + dict_series[title][TAG_EPISODE] = EpisodeDict jsontools.update_node(dict_series, item.channel, TAG_TVSHOW_RENUMERATE)[0] xbmc.executebuiltin("Container.Refresh") + if modify == True: + return json.loads(base64.b64decode(EpisodeDict)) def semiautomatic_config_item(item): @@ -176,15 +198,33 @@ def semiautomatic_config_item(item): mode = platformtools.dialog_yesno(config.get_localized_string(70687), config.get_localized_string(70688), nolabel=config.get_localized_string(30023), yeslabel=config.get_localized_string(30022)) if mode == True: dict_renumerate[TAG_MODE] = False - specials = [] - stop = False - while not stop: - heading = config.get_localized_string(70718) + str(specials) - special = platformtools.dialog_numeric(0, heading, '') - if special: - specials.append(int(special)) - dict_renumerate[TAG_SPECIAL] = specials - else: stop = True + if dict_series[title].has_key(TAG_SPECIAL): + specials = dict_renumerate[TAG_SPECIAL] + else: + specials = [] + jsontools.update_node(dict_series, item.channel, TAG_TVSHOW_RENUMERATE)[0] + _list = [] + # channel = __import__('channels.' + item.channel, fromlist=["channels.%s" % item.channel]) + itemlist = get_episodes(item) + for item in itemlist: + Title = re.sub(r'\d+x\d+ - ', '', item.title) + if item.action == 'findvideos': + _list.append(Title) + + selected = platformtools.dialog_multiselect(config.get_localized_string(70734), _list) + # if len(selected) > 0: + for select in selected: + specials.append(int(scrapertoolsV2.find_single_match(_list[select],r'(\d+)'))) + dict_renumerate[TAG_SPECIAL] = specials + + # stop = False + # while not stop: + # heading = config.get_localized_string(70718) + str(specials) + # special = platformtools.dialog_numeric(0, heading, '') + # if special: + # specials.append(int(special)) + # dict_renumerate[TAG_SPECIAL] = specials + # else: stop = True dict_renumerate[TAG_MODE] = False dict_renumerate[TAG_TYPE] = 'auto' @@ -253,14 +293,7 @@ def renumber(itemlist, item='', typography=''): item.channel = item.from_channel if item.from_channel else item.channel # Controlla se la Serie è già stata rinumerata TITLE = item.fulltitle.rstrip() if item.fulltitle else item.contentTitle - if dict_series[TITLE].has_key(TAG_TYPE): - TYPE = dict_series[TITLE][TAG_TYPE] - else: - TYPE = 'auto' - dict_series[TITLE][TAG_TYPE] = TYPE - jsontools.update_node(dict_series, item.channel, TAG_TVSHOW_RENUMERATE)[0] - - if TYPE == 'manual': + if inspect.stack()[2][3] == 'get_episodes': return itemlist elif dict_series.has_key(TITLE) and dict_series[TITLE].has_key(TAG_ID): @@ -273,7 +306,14 @@ def renumber(itemlist, item='', typography=''): if dict_series[TITLE].has_key(TAG_MODE): MODE = dict_series[TITLE][TAG_MODE] else: MODE = False - renumeration(itemlist, item, typography, dict_series, ID, SEASON, EPISODE, MODE, TITLE) + if dict_series[TITLE].has_key(TAG_TYPE): + TYPE = dict_series[TITLE][TAG_TYPE] + else: + TYPE = 'auto' + dict_series[TITLE][TAG_TYPE] = TYPE + jsontools.update_node(dict_series, item.channel, TAG_TVSHOW_RENUMERATE)[0] + + renumeration(itemlist, item, typography, dict_series, ID, SEASON, EPISODE, MODE, TITLE, TYPE) else: # se non è stata rinumerata controlla se è attiva la rinumerazione automatica @@ -300,7 +340,7 @@ def renumber(itemlist, item='', typography=''): item.show = TITLE item.context = context(exist) -def renumeration (itemlist, item, typography, dict_series, ID, SEASON, EPISODE, MODE, TITLE): +def renumeration (itemlist, item, typography, dict_series, ID, SEASON, EPISODE, MODE, TITLE, TYPE): # Se ID è 0 salta la rinumerazione if ID == '0': @@ -323,6 +363,8 @@ def renumeration (itemlist, item, typography, dict_series, ID, SEASON, EPISODE, # Controlla che la lista egli Episodi sia della stessa lunghezza di Itemlist if EpisodeDict == 'none': return error(itemlist) + if TYPE == 'manual' and len(EpisodeDict) < len(itemlist): + EpisodeDict = manual_renumeration(item, True) if len(EpisodeDict) >= len(itemlist) and EpisodeDict.has_key(scrapertoolsV2.find_single_match(itemlist[0].title, r'\d+')): for item in itemlist: if config.get_localized_string(30992) not in item.title: @@ -426,12 +468,19 @@ def make_list(itemlist, item, typography, dict_series, ID, SEASON, EPISODE, MODE EpisodeDict[str(episode)] = str(complete[regular[FirstOfSeason+1][2]][0]) elif addiction < len(SPECIAL): if episode in SPECIAL: - season = complete[regular[count][2]][0] - EpisodeDict[str(episode)] = str(complete[regular[count][2]][0]) if season.startswith( '0' ) else '0x' + platformtools.dialog_numeric(0, item.title + '?', '') + try: + season = complete[regular[count][2]][0] + EpisodeDict[str(episode)] = str(complete[regular[count][2]][0]) if season.startswith( '0' ) else '0x' + platformtools.dialog_numeric(0, item.title + '?', '') + + except: + EpisodeDict[str(episode)] = '0x' + platformtools.dialog_numeric(0, item.title + '?', '') addiction = addiction + 1 - else: + elif number <= len(regular): EpisodeDict[str(episode)] = str(regular[number][0]) - elif number <= len(regular): + else: + try: EpisodeDict[str(episode)] = str(complete[regular[number+2][2]][0]) + except: EpisodeDict[str(episode)] = '0x0' + elif number <= len(regular) and regular.has_key(number): EpisodeDict[str(episode)] = str(regular[number][0]) else: try: EpisodeDict[str(episode)] = str(complete[regular[number+2][2]][0]) @@ -479,11 +528,15 @@ def check(item): try: dict_series = jsontools.get_node_from_file(item.channel, TAG_TVSHOW_RENUMERATE) TITLE = item.fulltitle.rstrip() - ID = dict_series[TITLE][TAG_ID] - SEASON = dict_series[TITLE][TAG_SEASON] - EPISODE = dict_series[TITLE][TAG_EPISODE] - MODE = dict_series[TITLE][TAG_MODE] + dict_series[TITLE][TAG_ID] + dict_series[TITLE][TAG_EPISODE] exist = True except: exist = False return exist + +def get_episodes(item): + log() + ch = __import__('channels.' + item.channel, fromlist=["channels.%s" % item.channel]) + itemlist = ch.episodios(item) + return itemlist \ No newline at end of file