Example #1
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
Example #2
0
    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:
Example #3
0
    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: