def check_addon_updates(verbose=False): logger.info() # Forzamos la actualización de los repos para facilitar la actualización del addon Alfa xbmc.executebuiltin('UpdateAddonRepos') ADDON_UPDATES_JSON = 'https://extra.alfa-addon.com/addon_updates/updates.json' ADDON_UPDATES_ZIP = 'https://extra.alfa-addon.com/addon_updates/updates.zip' try: get_ua_list() except: pass try: last_fix_json = os.path.join( config.get_runtime_path(), 'last_fix.json') # información de la versión fixeada del usuario # Se guarda en get_runtime_path en lugar de get_data_path para que se elimine al cambiar de versión try: localfilename = os.path.join(config.get_data_path(), 'temp_updates.zip') if os.path.exists(localfilename): os.remove(localfilename) except: pass # Descargar json con las posibles actualizaciones # ----------------------------------------------- resp = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=5, ignore_response_code=True) if not resp.sucess and resp.code != 404: logger.info('ERROR en la descarga de actualizaciones: %s' % resp.code, force=True) if verbose: dialog_notification( 'Alfa: error en la actualización', 'Hay un error al descargar la actualización') return False if not resp.data: logger.info('No se encuentran actualizaciones del addon', force=True) if verbose: dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente') check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return False data = jsontools.load(resp.data) if 'addon_version' not in data or 'fix_version' not in data: logger.info('No hay actualizaciones del addon', force=True) if verbose: dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente') check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return False # Comprobar versión que tiene instalada el usuario con versión de la actualización # -------------------------------------------------------------------------------- current_version = config.get_addon_version(with_fix=False, from_xml=True) if current_version != data['addon_version']: logger.info('No hay actualizaciones para la versión %s del addon' % current_version, force=True) if verbose: dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente') check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return False if os.path.exists(last_fix_json): try: lastfix = {} with open(last_fix_json, "r") as lfj: lastfix = jsontools.load(lfj.read()) if lastfix['addon_version'] == data[ 'addon_version'] and lastfix['fix_version'] == data[ 'fix_version']: logger.info( 'Ya está actualizado con los últimos cambios. Versión %s.fix%d' % (data['addon_version'], data['fix_version']), force=True) if verbose: dialog_notification( 'Alfa ya está actualizado', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version'])) check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return False except: if lastfix: logger.error('last_fix.json: ERROR en: ' + str(lastfix)) else: logger.error('last_fix.json: ERROR desconocido') lastfix = {} # Descargar zip con las actualizaciones # ------------------------------------- if downloadtools.downloadfile( ADDON_UPDATES_ZIP, localfilename, silent=True) < 0: raise # Descomprimir zip dentro del addon # --------------------------------- try: unzipper = ziptools.ziptools() unzipper.extract(localfilename, config.get_runtime_path()) except: xbmc.executebuiltin('Extract("%s", "%s")' % (localfilename, config.get_runtime_path())) time.sleep(1) # Borrar el zip descargado # ------------------------ try: os.remove(localfilename) except: pass # Si es PY3 se actualizan los módulos marshal # Se reinicia Proxytools try: if PY3: from platformcode.custom_code import marshal_check marshal_check() if not PY3: from core.proxytools import get_proxy_list else: from core.proxytools_py3 import get_proxy_list get_proxy_list(monitor_start=False) except: logger.error('Error Marshalizando e iniciando Proxytools') logger.error(traceback.format_exc()) # Guardar información de la versión fixeada # ----------------------------------------- try: show_update_info(data) except: pass last_id = 0 if isinstance(data["files"], list): last_id = len(data["files"]) elif isinstance(data["files"], dict): for k in data["files"].keys(): if int(k) > last_id: last_id = int(k) if 'files' in data: data.pop('files', None) data["last_id"] = last_id with open(last_fix_json, "w") as lfj: lfj.write(jsontools.dump(data)) # Actualiza la versión del addon en las cabeceras try: httptools.__version = '%s.fix%d' % (data['addon_version'], data['fix_version']) except: pass logger.info('Addon actualizado correctamente a %s.fix%d' % (data['addon_version'], data['fix_version']), force=True) if verbose and not config.get_setting("show_fixes", default=True): dialog_notification( 'Alfa actualizado a', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version'])) check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return True except: logger.error('Error al comprobar actualizaciones del addon!') logger.error(traceback.format_exc()) if verbose: dialog_notification('Alfa actualizaciones', 'Error al comprobar actualizaciones') check_update_to_others( verbose=verbose ) # Comprueba las actualuzaciones de otros productos return False
wait = update_wait[int(config.get_setting("update_wait", "videolibrary"))] if wait > 0: xbmc.sleep(wait) # Verificar quick-fixes al abrirse Kodi, y dejarlo corriendo como Thread from platformcode import updater updater.check_addon_init() # Copia Custom code a las carpetas de Alfa desde la zona de Userdata from platformcode import custom_code custom_code.init() # Identifica la dirección Proxy y la lista de alternativas from core import proxytools proxytools.get_proxy_list() if not config.get_setting("update", "videolibrary") == 2: check_for_update(overwrite=False) # Añade al LOG las variables de entorno necesarias para diagnóstico from platformcode import envtal envtal.list_env() # Se ejecuta ciclicamente if config.get_platform(True)['num_version'] >= 14: monitor = xbmc.Monitor() # For Kodi >= 14 else: monitor = None # For Kodi < 14 if monitor:
if config.get_setting("adult_mode") == 2: config.set_setting("adult_mode", 0) # Verificar quick-fixes al abrirse Kodi, y dejarlo corriendo como Thread from platformcode import updater updater.check_addon_init() # Copia Custom code a las carpetas de Alfa desde la zona de Userdata from platformcode import custom_code custom_code.init() # Identifica la dirección Proxy y la lista de alternativas #if PY3: from core import proxytool_py3 as proxytool else from core import proxytool_py2 as proxytool if not PY3: from core.proxytools import get_proxy_list else: from core.proxytools_py3 import get_proxy_list get_proxy_list() # Incializamos caching de variables config.cache_init() # Actualiza la videoteca de Alfa, con una espera inicial si se ha configurado update_wait = [0, 10000, 20000, 30000, 60000, 120000, 300000] wait = update_wait[int(config.get_setting("update_wait", "videolibrary"))] if wait > 0: xbmc.sleep(wait) if config.get_setting("update", "videolibrary") not in [2, 4]: if config.get_setting("videolibrary_backup_scan", "videolibrary", default=False): try: