# -*- coding: utf-8 -*- # ------------------------------------------------------------ # Parámetros de configuración (kodi) # ------------------------------------------------------------ import os import re import xbmc import xbmcaddon import xbmcgui PLUGIN_NAME = "alfa" __settings__ = xbmcaddon.Addon(id="plugin.video." + PLUGIN_NAME) __language__ = __settings__.getLocalizedString def get_platform(full_version=False): """ Devuelve la información la version de xbmc o kodi sobre el que se ejecuta el plugin @param full_version: indica si queremos toda la informacion o no @type full_version: bool @rtype: str o dict @return: Si el paramentro full_version es True se retorna un diccionario con las siguientes claves: 'num_version': (float) numero de version en formato XX.X 'name_version': (str) nombre clave de cada version 'video_db': (str) nombre del archivo que contiene la base de datos de videos 'plaform': (str) esta compuesto por "kodi-" o "xbmc-" mas el nombre de la version segun corresponda. Si el parametro full_version es False (por defecto) se retorna el valor de la clave 'plaform' del diccionario anterior. """ ret = {} codename = {"10": "dharma", "11": "eden", "12": "frodo", "13": "gotham", "14": "helix", "15": "isengard", "16": "jarvis", "17": "krypton", "18": "leia"} code_db = {'10': 'MyVideos37.db', '11': 'MyVideos60.db', '12': 'MyVideos75.db', '13': 'MyVideos78.db', '14': 'MyVideos90.db', '15': 'MyVideos93.db', '16': 'MyVideos99.db', '17': 'MyVideos107.db', '18': 'MyVideos108.db'} num_version = xbmc.getInfoLabel('System.BuildVersion') num_version = re.match("\d+\.\d+", num_version).group(0) ret['name_version'] = codename.get(num_version.split('.')[0], num_version) ret['video_db'] = code_db.get(num_version.split('.')[0], "") ret['num_version'] = float(num_version) if ret['num_version'] < 14: ret['platform'] = "xbmc-" + ret['name_version'] else: ret['platform'] = "kodi-" + ret['name_version'] if full_version: return ret else: return ret['platform'] def is_xbmc(): return True def get_videolibrary_support(): return True def get_system_platform(): """ fonction: pour recuperer la platform que xbmc tourne """ platform = "unknown" if xbmc.getCondVisibility("system.platform.linux"): platform = "linux" elif xbmc.getCondVisibility("system.platform.windows"): platform = "windows" elif xbmc.getCondVisibility("system.platform.osx"): platform = "osx" return platform def get_all_settings_addon(): # Lee el archivo settings.xml y retorna un diccionario con {id: value} from core import scrapertools infile = open(os.path.join(get_data_path(), "settings.xml"), "r") data = infile.read() infile.close() ret = {} matches = scrapertools.find_multiple_matches(data, ' '"+repr(value)+"'") return value # Specific server setting elif server: # logger.info("config.get_setting reading server setting '"+name+"' from server json") from core import servertools value = servertools.get_server_setting(name, server, default) # logger.info("config.get_setting -> '"+repr(value)+"'") return value # Global setting else: # logger.info("config.get_setting reading main setting '"+name+"'") value = __settings__.getSetting(name) if not value: return default # Translate Path if start with "special://" if value.startswith("special://") and "videolibrarypath" not in name: value = xbmc.translatePath(value) # hack para devolver el tipo correspondiente settings_types = get_settings_types() if settings_types.get(name) in ['enum', 'number']: try: value = int(value) except Exception, ex: from platformcode import logger logger.error("Error al convertir '%s' de tipo 'enum','number' \n%s" % (name, ex)) elif settings_types.get(name) == 'bool': value = value == 'true' elif name not in settings_types: try: if value in ['true', 'false']: if value == 'true': aux_val = True else: aux_val = False value = bool(aux_val) else: t = eval(value) value = t[0](t[1]) except Exception, ex: from platformcode import logger logger.error("Error al convertir '%s' se pasa como tipo 'None'\n%s" % (name, ex)) value = None return value def set_setting(name, value, channel="", server=""): """ Fija el valor de configuracion del parametro indicado. Establece 'value' como el valor del parametro 'name' en la configuracion global o 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 archivo channel_data.json no existe busca en la carpeta channels el archivo channel.json y crea un archivo channel_data.json antes de modificar el parametro 'name'. Si el parametro 'name' no existe lo añade, con su valor, al archivo correspondiente. Parametros: name -- nombre del parametro value -- valor del parametro channel [opcional] -- nombre del canal Retorna: 'value' en caso de que se haya podido fijar el valor y None en caso contrario """ if channel: from core import channeltools return channeltools.set_channel_setting(name, value, channel) elif server: from core import servertools return servertools.set_server_setting(name, value, server) else: try: settings_types = get_settings_types() if settings_types.get(name) == 'bool': if value: new_value = "true" else: new_value = "false" elif settings_types.get(name): new_value = str(value) else: if isinstance(value, basestring): new_value = "(%s, %s)" % (type(value).__name__, repr(value)) else: new_value = "(%s, %s)" % (type(value).__name__, value) __settings__.setSetting(name, new_value) except Exception, ex: from platformcode import logger logger.error("Error al convertir '%s' no se guarda el valor \n%s" % (name, ex)) return None return value def get_settings_types(): """ Devuelve un diccionario con los parametros (key) de la configuracion global y sus tipos (value) :return: dict """ win10000 = xbmcgui.Window(10000) settings_types = win10000.getProperty(PLUGIN_NAME + "_settings_types") if not settings_types: infile = open(os.path.join(get_runtime_path(), "resources", "settings.xml")) data = infile.read() infile.close() matches = re.findall(')') for r in res: if 'default="true"' in r: folder = scrapertools.find_single_match(r, 'folder="([^"]+)"') break # Comprobamos si existe en el addon 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())