Exemplo n.º 1
0
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
Exemplo n.º 2
0
            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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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