def start(): logger.info("server init {}...".format(sys.version_info[0:2])) config.verify_directories_created() if PY3: from platformcode import custom_code custom_code.marshal_check() try: HTTPAndWSServer.start(show_info) # Da por levantado el servicio logger.info( "--------------------------------------------------------------------" ) logger.info("Alfa %s Iniciado" % version) logger.info("La URL para acceder es http://%s:%s" % (myip, http_port)) logger.info( "--------------------------------------------------------------------" ) logger.info("Runtime Path : " + config.get_runtime_path()) logger.info("Data Path : " + config.get_data_path()) logger.info("Download Path : " + config.get_setting("downloadpath")) logger.info("DownloadList Path : " + config.get_setting("downloadlistpath")) logger.info("Bookmark Path : " + config.get_setting("bookmarkpath")) logger.info("VideoLibrary Path : " + config.get_setting("videolibrarypath")) logger.info( "--------------------------------------------------------------------" ) show_info() # Identifica la dirección Proxy y la lista de alternativas if not PY3: from core import proxytools else: from core import proxytools_py3 as proxytools proxytools.get_proxy_list() flag = True while flag: time.sleep(1) except KeyboardInterrupt: print('Deteniendo el servidor HTTP...') HTTPAndWSServer.stop() print('Alfa Detenido') flag = False
else: check_for_update(overwrite=False) if __name__ == "__main__": # Se ejecuta en cada inicio import xbmc import time # modo adulto: # sistema actual 0: Nunca, 1:Siempre, 2:Solo hasta que se reinicie Kodi # si es == 2 lo desactivamos. # Detecta la versión correcta de marshal if PY3: from platformcode import custom_code custom_code.marshal_check() if config.get_platform(True)['num_version'] >= 17.0: if not PY3: from lib.alfaresolver import updated, update_now else: from lib.alfaresolver_py3 import updated, update_now if not updated(): update_now() if config.get_setting("adult_mode") == 2: config.set_setting("adult_mode", 0) 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)
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 # ----------------------------------------------- data = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=5).data if data == '': logger.info('No se encuentran actualizaciones del addon') 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(data) if 'addon_version' not in data or 'fix_version' not in data: logger.info('No hay actualizaciones del addon') 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) 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 = {} lastfix = jsontools.load(open(last_fix_json, "r").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'])) 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 # ------------------------------------- downloadtools.downloadfile(ADDON_UPDATES_ZIP, localfilename, silent=True) # 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 if PY3: from platformcode.custom_code import marshal_check marshal_check() # Guardar información de la versión fixeada # ----------------------------------------- if 'files' in data: data.pop('files', None) open(last_fix_json, "w").write(jsontools.dump(data)) logger.info('Addon actualizado correctamente a %s.fix%d' % (data['addon_version'], data['fix_version'])) if verbose: 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
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