def get_channel_json(channel_name): # logger.info("channel_name=" + channel_name) import filetools channel_json = None try: channel_path = filetools.join(config.get_runtime_path(), "channels", channel_name + ".json") if not os.path.isfile(channel_path): channel_path = filetools.join(config.get_runtime_path(), 'channels', "p**n", channel_name + ".json") if not os.path.isfile(channel_path): channel_path = filetools.join(config.get_runtime_path(), "specials", channel_name + ".json") if not os.path.isfile(channel_path): channel_path = filetools.join(config.get_runtime_path(), "servers", channel_name + ".json") if not os.path.isfile(channel_path): channel_path = filetools.join( config.get_runtime_path(), "servers", "debriders", channel_name + ".json") if filetools.isfile(channel_path): # logger.info("channel_data=" + channel_path) channel_json = jsontools.load(filetools.read(channel_path)) # logger.info("channel_json= %s" % channel_json) except Exception, ex: template = "An exception of type %s occured. Arguments:\n%r" message = template % (type(ex).__name__, ex.args) logger.error(" %s" % message)
def get_server_json(server_name): # logger.info("server_name=" + server_name) try: server_path = filetools.join(config.get_runtime_path(), "servers", server_name + ".json") if not filetools.exists(server_path): server_path = filetools.join(config.get_runtime_path(), "servers", "debriders", server_name + ".json") # logger.info("server_path=" + server_path) server_json = jsontools.load(filetools.read(server_path)) # logger.info("server_json= %s" % server_json) except Exception, ex: template = "An exception of type %s occured. Arguments:\n%r" message = template % (type(ex).__name__, ex.args) logger.error(" %s" % message) server_json = None
def get_channel_json(channel_name): # logger.info("channel_name=" + channel_name) import filetools try: channel_path = filetools.join(config.get_runtime_path(), "channels", channel_name + ".json") # logger.info("channel_data=" + channel_path) channel_json = jsontools.load(filetools.read(channel_path)) # logger.info("channel_json= %s" % channel_json) except Exception, ex: template = "An exception of type %s occured. Arguments:\n%r" message = template % (type(ex).__name__, ex.args) logger.error(" %s" % message) channel_json = None
def actualiza(item): logger.info("deportesalacarta.channels.update_sports actualiza") local_folder = os.path.join(xbmc.translatePath("special://home"), "addons") error = False url = "https://github.com/CmosGit/Mod_pelisalacarta_deportes/raw/addon/plugin.video.deportesalacarta-%s.zip" % item.version progreso = platformtools.dialog_progress("Progreso de la actualización", "Descargando...") filename = 'deportesalacarta-%s.zip' % item.version localfilename = filetools.join(config.get_data_path(), filename) try: result = downloadtools.downloadfile(url, localfilename, continuar=True) progreso.update(50, "Descargando archivo", "Descargando...") # Lo descomprime logger.info( "deportesalacarta.channels.configuracion descomprime fichero...") from core import ziptools unzipper = ziptools.ziptools() logger.info("deportesalacarta.channels.configuracion destpathname=%s" % local_folder) unzipper.extract(localfilename, local_folder, update=True) progreso.close() except: import traceback logger.info("Detalle del error: %s" % traceback.format_exc()) # Borra el zip descargado filetools.remove(localfilename) progreso.close() platformtools.dialog_ok( "Error", "Se ha producido un error extrayendo el archivo") return # Borra el zip descargado logger.info("deportesalacarta.channels.configuracion borra fichero...") filetools.remove(localfilename) logger.info("deportesalacarta.channels.configuracion ...fichero borrado") platformtools.dialog_ok("Actualizado correctamente", "Versión %s instalada con éxito" % item.version) xbmc.executebuiltin("Container.Refresh")
def actualiza(item): logger.info("deportesalacarta.channels.update_sports actualiza") local_folder = os.path.join(xbmc.translatePath("special://home"), "addons") error = False if not item.url: url = "https://github.com/CmosGit/Mod_pelisalacarta_deportes/raw/addon/plugin.video.deportesalacarta-%s.zip" % item.version else: import servertools urls, puede, msg = servertools.resolve_video_urls_for_playing( item.server, item.url, "", False, True) if puede: data_ = httptools.downloadpage(urls[0], hide=True).data url = scrapertools.find_single_match( data_, '"downloadUrl"\s*:\s*"([^"]+)"') if not url: url = scrapertools.find_single_match( data_, '<a id="download_button".*?href="([^"]+)"') if not item.server and not url: try: name, value = scrapertools.find_single_match( data_, 'method="post">.*?name="([^"]+)" value="([^"]+)"') post = "%s=%s" % (name, value) data_ = httptools.downloadpage(urls[0], post, hide=True).data url = scrapertools.find_single_match( data_, '"downloadUrl"\s*:\s*"([^"]+)"') except: pass if not url: urls, puede, msg = servertools.resolve_video_urls_for_playing( item.server, base64.b64decode(item.url)) url = urls[0][1] progreso = platformtools.dialog_progress("Progreso de la actualización", "Descargando...") filename = 'deportesalacarta-%s.zip' % item.version localfilename = filetools.join(config.get_data_path(), filename) try: result = downloadtools.downloadfile(url, localfilename, [], False, True, False) progreso.update(50, "Descargando archivo", "Descargando...") # Lo descomprime logger.info( "deportesalacarta.channels.configuracion descomprime fichero...") from core import ziptools unzipper = ziptools.ziptools() logger.info("deportesalacarta.channels.configuracion destpathname=%s" % local_folder) unzipper.extract(localfilename, local_folder, update=True) progreso.close() except: import traceback logger.info("Detalle del error: %s" % traceback.format_exc()) # Borra el zip descargado try: filetools.remove(localfilename) except: pass progreso.close() platformtools.dialog_ok( "Error", "Se ha producido un error extrayendo el archivo") return # Borra el zip descargado logger.info("deportesalacarta.channels.configuracion borra fichero...") try: filetools.remove(localfilename) except: pass logger.info("deportesalacarta.channels.configuracion ...fichero borrado") platformtools.dialog_notification( "Actualizado correctamente", "Versión %s instalada con éxito" % item.version) xbmc.executebuiltin("Container.Refresh")
def get_default_settings(channel_name): import filetools, inspect # Check if it is a real channel try: channel = __import__('channels.%s' % channel_name, fromlist=["channels.%s" % channel_name]) except: return get_channel_json(channel_name).get('settings', list()) list_language = get_lang(channel_name) # Check if the automatic renumbering function exists renumber = False if 'episodios' in dir(channel): from core import scrapertoolsV2 if scrapertoolsV2.find_single_match(inspect.getsource(channel), r'(anime\s*=\s*True)') \ or scrapertoolsV2.find_single_match(inspect.getsource(channel), r'(autorenumber\()'): renumber = True # Collects configurations channel_language = categories = get_channel_json(channel_name).get( 'language', list()) channel_controls = get_channel_json(channel_name).get('settings', list()) default_path = filetools.join(config.get_runtime_path(), 'default_channel_settings' + '.json') default_controls = jsontools.load(filetools.read(default_path)).get( 'settings', list()) default_controls_renumber = jsontools.load( filetools.read(default_path)).get('renumber', list()) categories = get_channel_json(channel_name).get('categories', list()) # Apply default configurations if they do not exist for control in default_controls: if control['id'] not in str(channel_controls): if 'include_in_newest' in control['id']: label = control['id'].split('_') label = label[-1] if label == 'peliculas': if 'movie' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string(30122) channel_controls.append(control) else: pass elif label == 'series': if 'tvshow' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string(30123) channel_controls.append(control) else: pass elif label == 'anime': if 'anime' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string(30124) channel_controls.append(control) else: pass else: control['label'] = config.get_localized_string( 70727) + ' - ' + label.capitalize() channel_controls.append(control) elif control['id'] == 'filter_languages': if len(channel_language) > 1: control['lvalues'] = list_language channel_controls.append(control) else: pass else: channel_controls.append(control) if renumber: for control in default_controls_renumber: if control['id'] not in str(channel_controls): channel_controls.append(control) else: pass return channel_controls
def set_channel_setting(name, value, channel): import filetools """ Fija el valor de configuracion del parametro indicado. Establece 'value' como el valor del parametro 'name' en la configuracion propia del canal 'channel'. Devuelve el valor cambiado o None si la asignacion no se ha podido completar. Si se especifica el nombre del canal busca en la ruta \addon_data\plugin.video.alfa\settings_channels el archivo channel_data.json y establece el parametro 'name' al valor indicado por 'value'. Si el parametro 'name' no existe lo añade, con su valor, al archivo correspondiente. @param name: nombre del parametro @type name: str @param value: valor del parametro @type value: str @param channel: nombre del canal @type channel: str @return: 'value' en caso de que se haya podido fijar el valor y None en caso contrario @rtype: str, None """ # Creamos la carpeta si no existe if not os.path.exists( os.path.join(config.get_data_path(), "settings_channels")): os.mkdir(os.path.join(config.get_data_path(), "settings_channels")) file_settings = os.path.join(config.get_data_path(), "settings_channels", channel + "_data.json") dict_settings = {} if channel not in ['trakt']: def_settings = get_default_settings(channel) dict_file = None if os.path.exists(file_settings): # Obtenemos configuracion guardada de ../settings/channel_data.json try: dict_file = jsontools.load(open(file_settings, "r").read()) dict_settings = dict_file.get('settings', {}) except EnvironmentError: logger.error("ERROR al leer el archivo: %s" % file_settings) if os.path.isfile( filetools.join(config.get_runtime_path(), "channels", channel + ".json")): # delete unused Settings def_keys = [] del_keys = [] for key in def_settings: def_keys.append(key['id']) for key in dict_settings: if key not in def_keys: del_keys.append(key) for key in del_keys: del dict_settings[key] dict_settings[name] = value # comprobamos si existe dict_file y es un diccionario, sino lo creamos if dict_file is None or not dict_file: dict_file = {} dict_file['settings'] = dict_settings # Creamos el archivo ../settings/channel_data.json try: json_data = jsontools.dump(dict_file) open(file_settings, "w").write(json_data) except EnvironmentError: logger.error("ERROR al salvar el archivo: %s" % file_settings) return None return value
def get_default_settings(channel_name): import filetools default_path = filetools.join(config.get_runtime_path(), 'default_channel_settings' + '.json') default_file = jsontools.load(filetools.read(default_path)) channel_path = filetools.join(config.get_runtime_path(), 'channels', channel_name + '.json') adult_path = filetools.join(config.get_runtime_path(), 'channels', 'p**n', channel_name + '.json') # from core.support import dbg; dbg() if os.path.exists(channel_path) or os.path.exists(adult_path): default_controls = default_file['settings'] default_controls_renumber = default_file['renumber'] channel_json = get_channel_json(channel_name) # Collects configurations channel_language = channel_json['language'] channel_controls = channel_json['settings'] categories = channel_json['categories'] not_active = channel_json['not_active'] if channel_json.has_key( 'not_active') else [] default_off = channel_json['default_off'] if channel_json.has_key( 'default_off') else [] # Apply default configurations if they do not exist for control in default_controls: if control['id'] not in str(channel_controls): if 'include_in_newest' in control[ 'id'] and 'include_in_newest' not in not_active and control[ 'id'] not in not_active: label = control['id'].split('_') label = label[-1] if label == 'peliculas': if 'movie' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string( 30122) control['default'] = False if ( 'include_in_newest' in default_off) or ( 'include_in_newest_peliculas' in default_off) else True channel_controls.append(control) else: pass elif label == 'series': if 'tvshow' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string( 30123) control['default'] = False if ( 'include_in_newest' in default_off) or ('include_in_newest_series' in default_off) else True channel_controls.append(control) else: pass elif label == 'anime': if 'anime' in categories: control['label'] = config.get_localized_string( 70727) + ' - ' + config.get_localized_string( 30124) control['default'] = False if ( 'include_in_newest' in default_off) or ('include_in_newest_anime' in default_off) else True channel_controls.append(control) else: pass else: control['label'] = config.get_localized_string( 70727) + ' - ' + label.capitalize() control['default'] = control['default'] if control[ 'id'] not in default_off else False channel_controls.append(control) elif control[ 'id'] not in not_active and 'include_in_newest' not in control[ 'id']: if type(control['default']) == bool: control['default'] = control['default'] if control[ 'id'] not in default_off else False channel_controls.append(control) if 'anime' in categories: for control in default_controls_renumber: if control['id'] not in str(channel_controls): channel_controls.append(control) else: pass else: return get_channel_json(channel_name).get('settings', list()) return channel_controls
def verify_directories_created(): import logger import filetools from resources.lib.platformcode import xbmc_library config_paths = [["librarypath", "library"], ["downloadpath", "downloads"], ["downloadlistpath", "downloads/list"], ["settings_path", "settings_channels"]] for path, default in config_paths: saved_path = get_setting(path) # Biblioteca if path == "librarypath": set_setting("library_version", "v4") if not saved_path: saved_path = xbmc_library.search_library_path() if saved_path: set_setting(path, saved_path) if not saved_path: saved_path = "special://profile/addon_data/plugin.video." + PLUGIN_NAME + "/" + default set_setting(path, saved_path) if get_setting("library_set_content") == True and path in [ "librarypath", "downloadpath" ]: # logger.debug("library_set_content %s" % get_setting("library_set_content")) xbmc_library.add_sources(saved_path) saved_path = xbmc.translatePath(saved_path) if not filetools.exists(saved_path): logger.debug("Creating %s: %s" % (path, saved_path)) filetools.mkdir(saved_path) config_paths = [["folder_movies", "CINE"], ["folder_tvshows", "SERIES"]] for path, default in config_paths: saved_path = get_setting(path) if not saved_path: saved_path = default set_setting(path, saved_path) content_path = filetools.join(get_library_path(), saved_path) if not filetools.exists(content_path): logger.debug("Creating %s: %s" % (path, content_path)) if filetools.mkdir(content_path) and get_setting( "library_set_content") == True: xbmc_library.set_content(default) elif get_setting("library_ask_set_content") == 2: xbmc_library.set_content(default) try: import scrapertools # Buscamos el archivo addon.xml del skin activo skindir = filetools.join(xbmc.translatePath("special://home"), 'addons', xbmc.getSkinDir(), 'addon.xml') # Extraemos el nombre de la carpeta de resolución por defecto folder = "" data = filetools.read(skindir) res = scrapertools.find_multiple_matches(data, '(<res .*?>)') for r in res: if 'default="true"' in r: folder = scrapertools.find_single_match(r, 'folder="([^"]+)"') break # Comprobamos si existe en pelisalacarta y sino es así, la creamos default = filetools.join(get_runtime_path(), 'resources', 'skins', 'Default') if folder and not filetools.exists(filetools.join(default, folder)): filetools.mkdir(filetools.join(default, folder)) # Copiamos el archivo a dicha carpeta desde la de 720p si éste no existe o si el tamaño es diferente if folder and folder != '720p': for root, folders, files in filetools.walk( filetools.join(default, '720p')): for f in files: if not filetools.exists(filetools.join(default, folder, f)) or \ (filetools.getsize(filetools.join(default, folder, f)) != filetools.getsize(filetools.join(default, '720p', f))): filetools.copy(filetools.join(default, '720p', f), filetools.join(default, folder, f), True) except: import traceback logger.error("Al comprobar o crear la carpeta de resolución") logger.error(traceback.format_exc())