def cb_servers_favorites(server_names, dict_values): dict_name = {} progreso = platformtools.dialog_progress( config.get_localized_string(60557), config.get_localized_string(60558)) for i, v in dict_values.items(): if i == "favorites_servers": config.set_setting("favorites_servers", v) elif int(v) > 0: dict_name[server_names[v]] = int(i) servers_list = servertools.get_servers_list().items() n = len(servers_list) i = 1 for server, server_parameters in servers_list: if server_parameters['name'] in dict_name.keys(): config.set_setting("favorites_servers_list", dict_name[server_parameters['name']], server=server) else: config.set_setting("favorites_servers_list", 0, server=server) progreso.update( (i * 100) / n, config.get_localized_string(60559) % server_parameters['name']) i += 1 if not dict_name: # Si no hay ningun servidor en lalista desactivarla config.set_setting("favorites_servers", False) progreso.close()
def servers_blacklist(item): server_list = servertools.get_servers_list() dict_values = {} list_controls = [{ "id": "filter_servers", "type": "bool", "label": "@30068", "default": False, "enabled": True, "visible": True }] dict_values['filter_servers'] = config.get_setting('filter_servers') if dict_values['filter_servers'] == None: dict_values['filter_servers'] = False for i, server in enumerate(sorted(server_list.keys())): server_parameters = server_list[server] controls, defaults = servertools.get_server_controls_settings(server) dict_values[server] = config.get_setting("black_list", server=server) control = { "id": server, "type": "bool", "label": ' %s' % server_parameters["name"], "default": defaults.get("black_list", False), "enabled": "eq(-%s,True)" % (i + 1), "visible": True } list_controls.append(control) return platformtools.show_channel_settings( list_controls=list_controls, dict_values=dict_values, caption=config.get_localized_string(60550), callback="cb_servers_blacklist")
def servers_blacklist(item): server_list = servertools.get_servers_list() dict_values = {} list_controls = [{'id': 'filter_servers', 'type': "bool", 'label': "@30068", 'default': False, 'enabled': True, 'visible': True}] dict_values['filter_servers'] = config.get_setting('filter_servers') for i, server in enumerate(sorted(server_list.keys())): server_parameters = server_list[server] controls, defaults = servertools.get_server_controls_settings(server) dict_values[server] = config.get_setting("black_list",server=server) control = {'id': server, 'type': "bool", 'label': ' %s' % server_parameters["name"], 'default': defaults.get("black_list", False), 'enabled': "eq(-%s,True)" % (i + 1), 'visible': True} list_controls.append(control) return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values, caption="Servidores bloqueados", callback="cb_servers_blacklist")
def cb_servers_favorites(server_names, dict_values): dict_name = {} progreso = platformtools.dialog_progress("Guardando configuración...", "Espere un momento por favor.") for i, v in dict_values.items(): if i == "favorites_servers": config.set_setting("favorites_servers", v) elif int(v) > 0: dict_name[server_names[v]] = int(i) servers_list = servertools.get_servers_list().items() n = len(servers_list) i = 1 for server, server_parameters in servers_list: if server_parameters['name'] in dict_name.keys(): config.set_setting("favorites_servers_list", dict_name[server_parameters['name']], server=server) else: config.set_setting("favorites_servers_list", 0, server=server) progreso.update((i * 100) / n, "Guardando configuración...%s" % server_parameters['name']) i += 1 if not dict_name: #Si no hay ningun servidor en lalista desactivarla config.set_setting("favorites_servers", False) progreso.close()
def find_videos(url): #logger.info("[pepecine.py] find_videos") ret = {'titulo': "", 'url': "", 'servidor': ""} # Ejecuta el find_videos en cada servidor hasta que encuentra una coicidencia lista_servers = servertools.get_servers_list() for serverid in lista_servers: try: servers_module = __import__("servers." + serverid) server_module = getattr(servers_module, serverid) devuelve = server_module.find_videos(url) if devuelve: ret["titulo"] = devuelve[0][0] ret["url"] = devuelve[0][1] ret["servidor"] = devuelve[0][2] # reordenar el listado, es probable q el proximo enlace sea del mismo servidor lista_servers.remove(serverid) lista_servers.insert(0, serverid) break except ImportError: logger.info("No existe conector para #" + serverid + "#") #import traceback #logger.info(traceback.format_exc()) except: logger.info("Error en el conector #" + serverid + "#") import traceback logger.info(traceback.format_exc()) return ret pass
def find_videos(url): #logger.info("[pepecine.py] find_videos") ret = {'titulo':"", 'url':"", 'servidor':""} # Ejecuta el find_videos en cada servidor hasta que encuentra una coicidencia lista_servers = servertools.get_servers_list() for serverid in lista_servers: try: servers_module = __import__("servers."+serverid) server_module = getattr(servers_module,serverid) devuelve= server_module.find_videos(url) if devuelve: ret["titulo"]=devuelve[0][0] ret["url"]=devuelve[0][1] ret["servidor"]=devuelve[0][2] # reordenar el listado, es probable q el proximo enlace sea del mismo servidor lista_servers.remove(serverid) lista_servers.insert(0,serverid) break except ImportError: logger.info("No existe conector para #"+serverid+"#") #import traceback #logger.info(traceback.format_exc()) except: logger.info("Error en el conector #"+serverid+"#") import traceback logger.info(traceback.format_exc()) return ret pass
def getServers(): server_list = servertools.get_servers_list() ret = [] for srv in server_list: if srv in srvLinkDict: ret.append({'srv': srv}) return ret
def cb_servers_favorites(server_names, dict_values): dict_name = {} progreso = platformtools.dialog_progress("Salvataggio impostazioni...", "Aspetta un attimo per favore.") for i, v in dict_values.items(): if i == "favorites_servers": config.set_setting("favorites_servers", v) elif int(v) > 0: dict_name[server_names[v]] = int(i) servers_list = servertools.get_servers_list().items() n = len(servers_list) i = 1 for server, server_parameters in servers_list: if server_parameters['name'] in dict_name.keys(): config.set_setting("favorites_servers_list", dict_name[server_parameters['name']], server=server) else: config.set_setting("favorites_servers_list", 100, server=server) progreso.update( (i * 100) / n, "Salvataggio impostazioni...%s" % server_parameters['name']) i += 1 if not dict_name: #Si no hay ningun servidor en lalista desactivarla config.set_setting("favorites_servers", False) progreso.close()
def servers_menu(item): # from core.support import dbg; dbg() from core import servertools from core.item import Item from platformcode import config, platformtools from specials import setting names = [] ids = [] if item.type == 'debriders': action = 'server_debrid_config' server_list = list(servertools.get_debriders_list().keys()) for server in server_list: server_parameters = servertools.get_server_parameters(server) if server_parameters['has_settings']: names.append(server_parameters['name']) ids.append(server) select = platformtools.dialog_select( config.get_localized_string(60552), names) if select != -1: ID = ids[select] it = Item(channel='settings', action=action, config=ID) setting.server_debrid_config(it) else: action = 'server_config' server_list = list(servertools.get_servers_list().keys()) for server in sorted(server_list): server_parameters = servertools.get_server_parameters(server) if server_parameters["has_settings"] and [ x for x in server_parameters["settings"] if x["id"] not in ["black_list", "white_list"] ]: names.append(server_parameters['name']) ids.append(server) select = platformtools.dialog_select( config.get_localized_string(60538), names) if select != -1: ID = ids[select] it = Item(channel='settings', action=action, config=ID) setting.server_config(it) if select != -1: servers_menu(item)
def servers_favorites(item): server_list = servertools.get_servers_list() dict_values = {} list_controls = [{ 'id': 'favorites_servers', 'type': "bool", 'label': config.get_localized_string(60577), 'default': False, 'enabled': True, 'visible': True }] dict_values['favorites_servers'] = config.get_setting('favorites_servers') if dict_values['favorites_servers'] == None: dict_values['favorites_servers'] = False server_names = ['Ninguno'] for server in sorted(server_list.keys()): if config.get_setting("black_list", server=server): continue server_names.append(server_list[server]['name']) orden = config.get_setting("favorites_servers_list", server=server) if orden > 0: dict_values[orden] = len(server_names) - 1 for x in range(1, 6): control = { 'id': x, 'type': "list", 'label': config.get_localized_string(60597) % x, 'lvalues': server_names, 'default': 0, 'enabled': "eq(-%s,True)" % x, 'visible': True } list_controls.append(control) return platformtools.show_channel_settings( list_controls=list_controls, dict_values=dict_values, item=server_names, caption=config.get_localized_string(60551), callback="cb_servers_favorites")
def menu_servers(item): logger.info() itemlist = list() itemlist.append(Item(channel=CHANNELNAME, title="Sevidores bloqueados", action="servers_blacklist", folder=False, thumbnail=get_thumbnail_path("thumb_configuracion_0.png"))) itemlist.append(Item(channel=CHANNELNAME, title="Servidores favoritos", action="servers_favorites", folder=False, thumbnail=get_thumbnail_path("thumb_configuracion_0.png"))) itemlist.append(Item(channel=CHANNELNAME, title="Ajustes de debriders:", action="", folder=False, thumbnail=get_thumbnail_path("thumb_configuracion_0.png"))) # Inicio - Servidores configurables server_list = servertools.get_debriders_list().keys() for server in server_list: server_parameters = servertools.get_server_parameters(server) if server_parameters["has_settings"]: itemlist.append(Item(channel=CHANNELNAME, title=" Configuración del servidor '%s'" % server_parameters["name"], action="server_config", config=server, folder=False, thumbnail="")) itemlist.append(Item(channel=CHANNELNAME, title="Ajustes de servidores", action="", folder=False, thumbnail=get_thumbnail_path("thumb_configuracion_0.png"))) server_list = servertools.get_servers_list().keys() for server in sorted(server_list): server_parameters = servertools.get_server_parameters(server) logger.info(server_parameters) if server_parameters["has_settings"] and filter(lambda x: x["id"] not in ["black_list", "white_list"], server_parameters["settings"]): itemlist.append(Item(channel=CHANNELNAME, title=" Configuración del servidor '%s'" % server_parameters["name"], action="server_config", config=server, folder=False, thumbnail="")) # Fin - Servidores configurables return itemlist
def findvideos(item): logger.info() itemlist = [] data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) patron = 'vars.title =(.*?)};' try: data_dict = jsontools.load_json(scrapertools.get_match(data, patron) + '}') except: return itemlist # Devolvemos lista vacia lista_servers = servertools.get_servers_list() for link in data_dict["link"]: if item.contentType == 'episode' \ and (item.contentSeason != link['season'] or item.contentEpisodeNumber != link['episode']): # Si buscamos enlaces de un episodio descartamos los q no sean de este episodio continue url = link["url"] flag = scrapertools.find_single_match(link["label"], '(\s*\<img src=.*\>)') idioma = link["label"].replace(flag, "") if link["quality"] != "?": calidad = (' [' + link["quality"] + ']') else: calidad = "" video = find_videos(link["url"], lista_servers) if video["servidor"] != "": servidor = video["servidor"] url = video["url"] title = "Ver en " + servidor.capitalize() + calidad + ' (' + idioma + ')' itemlist.append(item.clone(action="play", viewmode="list", server=servidor, title=title, text_color="0xFF994D00", url=url, folder=False)) if config.get_library_support() and itemlist and item.contentType == "movie": infoLabels = {'tmdb_id': item.infoLabels['tmdb_id'], 'title': item.infoLabels['title']} itemlist.append(Item(channel=item.channel, title="Añadir esta película a la biblioteca", action="add_pelicula_to_library", url=item.url, infoLabels=infoLabels, text_color="0xFFe5ffcc", thumbnail='https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png')) return itemlist
def menu_servers(item): logger.info() itemlist = list() itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60550), action="servers_blacklist", folder=False, thumbnail=get_thumb("setting_0.png"))) itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60551), action="servers_favorites", folder=False, thumbnail=get_thumb("setting_0.png"))) itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60552), action="", folder=False, text_bold = True, thumbnail=get_thumb("setting_0.png"))) # Inicio - Servidores configurables server_list = servertools.get_debriders_list().keys() for server in server_list: server_parameters = servertools.get_server_parameters(server) if server_parameters["has_settings"]: itemlist.append( Item(channel=CHANNELNAME, title = ". " + config.get_localized_string(60553) % server_parameters["name"], action="server_debrid_config", config=server, folder=False, thumbnail="")) itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60554), action="", folder=False, text_bold = True, thumbnail=get_thumb("setting_0.png"))) server_list = servertools.get_servers_list().keys() for server in sorted(server_list): server_parameters = servertools.get_server_parameters(server) logger.info(server_parameters) if server_parameters["has_settings"] and filter(lambda x: x["id"] not in ["black_list", "white_list"], server_parameters["settings"]): itemlist.append( Item(channel=CHANNELNAME, title=". " + config.get_localized_string(60553) % server_parameters["name"], action="server_config", config=server, folder=False, thumbnail="")) # Fin - Servidores configurables return itemlist
def start(itemlist, item): ''' Main method from which the links are automatically reproduced - In case the option to activate it will use the options defined by the user. - Otherwise it will try to reproduce any link that has the preferred language. :param itemlist: list (list of items ready to play, ie with action = 'play') :param item: item (the main item of the channel) :return: try to auto-reproduce, in case of failure it returns the itemlist that it received in the beginning ''' if item.global_search: return itemlist logger.debug() global PLAYED PLAYED = False base_item = item if not config.is_xbmc(): return itemlist if config.get_setting('autoplay'): url_list_valid = [] autoplay_list = [] autoplay_b = [] favorite_quality = [] favorite_servers = [] blacklisted_servers = config.get_setting("black_list", server='servers') if not blacklisted_servers: blacklisted_servers = [] from core import servertools servers_list = list(servertools.get_servers_list().items()) for server, server_parameters in servers_list: if config.get_setting('favorites_servers_list', server=server): favorite_servers.append(server.lower()) if not favorite_servers: config.set_setting('favorites_servers_list', [], server='servers') favorite_servers = [] else: favorite_servers = list( set(favorite_servers) - set(blacklisted_servers)) # Save the current value of "Action and Player Mode" in preferences user_config_setting_action = config.get_setting("default_action") # user_config_setting_player = config.get_setting("player_mode") # Enable the "View in high quality" action (if the server returns more than one quality, eg gdrive) if not user_config_setting_action: config.set_setting("default_action", 2) # if user_config_setting_player != 0: config.set_setting("player_mode", 0) # Priorities when ordering itemlist: # 0: Servers and qualities # 1: Qualities and servers # 2: Servers only # 3: Only qualities # 4: Do not order if config.get_setting('favorites_servers' ) and favorite_servers and config.get_setting( 'default_action'): priority = 0 # 0: Servers and qualities or 1: Qualities and servers elif config.get_setting('favorites_servers') and favorite_servers: priority = 2 # Servers only elif config.get_setting('default_action'): priority = 3 # Only qualities else: priority = 4 # Do not order if config.get_setting('default_action') == 1: quality_list.reverse() favorite_quality = quality_list for item in itemlist: autoplay_elem = dict() b_dict = dict() # We check that it is a video item if 'server' not in item: continue if item.server.lower() in blacklisted_servers: continue # If it does not have a defined quality, it assigns a 'default' quality. if item.quality.lower() not in quality_list: item.quality = 'default' # The list for custom settings is created if priority < 2: # 0: Servers and qualities or 1: Qualities and servers # if the server and the quality are not in the favorites lists or the url is repeated, we discard the item if item.server.lower( ) not in favorite_servers or item.quality.lower( ) not in favorite_quality or item.url in url_list_valid: item.type_b = True item.play_from = base_item.play_from b_dict['videoitem'] = item autoplay_b.append(b_dict) continue autoplay_elem["indice_server"] = favorite_servers.index( item.server.lower()) autoplay_elem["indice_quality"] = favorite_quality.index( item.quality.lower()) elif priority == 2: # Servers only # if the server is not in the favorites list or the url is repeated, we discard the item if item.server.lower( ) not in favorite_servers or item.url in url_list_valid: item.type_b = True item.play_from = base_item.play_from b_dict['videoitem'] = item autoplay_b.append(b_dict) continue autoplay_elem["indice_server"] = favorite_servers.index( item.server.lower()) elif priority == 3: # Only qualities # if the quality is not in the favorites list or the url is repeated, we discard the item if item.quality.lower( ) not in favorite_quality or item.url in url_list_valid: item.type_b = True item.play_from = base_item.play_from b_dict['videoitem'] = item autoplay_b.append(b_dict) continue autoplay_elem["indice_quality"] = favorite_quality.index( item.quality.lower()) else: # Do not order # if the url is repeated, we discard the item item.play_from = base_item.play_from if item.url in url_list_valid: continue # If the item reaches here we add it to the list of valid urls and to autoplay_list url_list_valid.append(item.url) item.plan_b = True item.play_from = base_item.play_from autoplay_elem['videoitem'] = item autoplay_list.append(autoplay_elem) # We order according to priority if priority == 0: autoplay_list.sort(key=lambda orden: ( (orden['indice_server'], orden['indice_quality'])) ) # Servers and qualities elif priority == 1: autoplay_list.sort(key=lambda orden: (orden['indice_quality'], orden['indice_server'] )) # Qualities and servers elif priority == 2: autoplay_list.sort(key=lambda orden: (orden['indice_server'])) # Servers only elif priority == 3: autoplay_list.sort(key=lambda orden: (orden['indice_quality'])) # Only qualities logger.debug('PRIORITY', priority, autoplay_list) # if quality priority is active if priority == 0 and config.get_setting('quality_priority'): max_quality = autoplay_list[0][ "indice_quality"] if autoplay_list and "indice_quality" in autoplay_list[ 0] else 0 for n, item in enumerate(itemlist): if 'server' not in item: continue if item.server.lower() in blacklisted_servers: continue # If it does not have a defined quality, it assigns a 'default' quality. if item.quality == '': item.quality = 'default' if favorite_quality.index(item.quality.lower()) < max_quality: item.type_b = False autoplay_elem["indice_server"] = n autoplay_elem["indice_quality"] = favorite_quality.index( item.quality.lower()) autoplay_elem['videoitem'] = item autoplay_list.append(autoplay_elem) autoplay_list.sort(key=lambda orden: (orden['indice_quality'], orden['indice_server'])) # Plan b is prepared, in case it is active the non-favorite elements are added at the end # try: plan_b = settings_node['plan_b'] # except: plan_b = True text_b = '' if plan_b: autoplay_list.extend(autoplay_b) # If there are elements in the autoplay list, an attempt is made to reproduce each element, until one is found or all fail. if autoplay_list or (plan_b and autoplay_b): max_intentos = 5 max_intentos_servers = {} # If something is playing it stops playing if platformtools.is_playing(): platformtools.stop_video() for autoplay_elem in autoplay_list: play_item = Item channel_id = autoplay_elem['videoitem'].channel if autoplay_elem['videoitem'].channel == 'videolibrary': channel_id = autoplay_elem['videoitem'].contentChannel # If it is not a favorite element if you add the text plan b if autoplay_elem['videoitem'].type_b: text_b = '(Plan B)' if not platformtools.is_playing() and not PLAYED: videoitem = autoplay_elem['videoitem'] if videoitem.server.lower() not in max_intentos_servers: max_intentos_servers[ videoitem.server.lower()] = max_intentos # If the maximum number of attempts of this server have been reached, we jump to the next if max_intentos_servers[videoitem.server.lower()] == 0: continue lang = " " if hasattr(videoitem, 'language') and videoitem.language != "": lang = " '%s' " % videoitem.language name = servername(videoitem.server) platformtools.dialog_notification( "AutoPlay %s" % text_b, "%s%s%s" % (name, lang, videoitem.quality.upper()), sound=False) # Try to play the links If the channel has its own play method, use it try: channel = __import__('channels.%s' % channel_id, None, None, ["channels.%s" % channel_id]) except: channel = __import__('specials.%s' % channel_id, None, None, ["specials.%s" % channel_id]) if hasattr(channel, 'play'): resolved_item = getattr(channel, 'play')(videoitem) if len(resolved_item) > 0: if isinstance(resolved_item[0], list): videoitem.video_urls = resolved_item else: videoitem = resolved_item[0] play_item.autoplay = True # If not directly reproduce and mark as seen # Check if the item comes from the video library try: if base_item.contentChannel == 'videolibrary' or base_item.nfo: # Fill the video with the data of the main item and play play_item = base_item.clone(**videoitem.__dict__) platformtools.play_video(play_item, autoplay=True) else: # If it doesn't come from the video library, just play platformtools.play_video(videoitem, autoplay=True) except: pass sleep(3) try: if platformtools.is_playing(): PLAYED = True break except: logger.debug(str(len(autoplay_list))) # If we have come this far, it is because it could not be reproduced max_intentos_servers[videoitem.server.lower()] -= 1 # If the maximum number of attempts of this server has been reached, ask if we want to continue testing or ignore it. if max_intentos_servers[videoitem.server.lower()] == 0: text = config.get_localized_string(60072) % name if not platformtools.dialog_yesno( "AutoPlay", text, config.get_localized_string(60073)): max_intentos_servers[ videoitem.server.lower()] = max_intentos # If there are no items in the list, it is reported if autoplay_elem == autoplay_list[-1]: platformtools.dialog_notification( 'AutoPlay', config.get_localized_string(60072) % name) else: platformtools.dialog_notification( config.get_localized_string(60074), config.get_localized_string(60075)) # Restore if necessary the previous value of "Action and Player Mode" in preferences if not user_config_setting_action: config.set_setting("default_action", user_config_setting_action) # if user_config_setting_player != 0: config.set_setting("player_mode", user_config_setting_player) return itemlist