Example #1
0
def do_download(mediaurl, file_name, parent_item, server_item):
    from core import downloadtools

    # Limpiar caracteres para nombre de fichero válido
    file_name = config.text_clean(file_name)

    # Guardar info del vídeo en json
    path_down_json = filetools.join(download_path, file_name + '.json')
    parent_item.server_item = server_item.tojson(
    )  # Guardar info del server por si hay que continuar la descarga
    write_download_json(path_down_json, parent_item)

    # Lanzamos la descarga
    down_stats = downloadtools.do_download(mediaurl, download_path, file_name)

    # Actualizar info de la descarga en json
    update_download_json(path_down_json, down_stats)

    if down_stats['downloadStatus'] == STATUS_CODES.error:
        return False
    else:
        if down_stats['downloadStatus'] == STATUS_CODES.completed:
            platformtools.dialog_ok(
                config.__addon_name, 'Descarga finalizada correctamente',
                file_name, config.format_bytes(down_stats['downloadSize']))

        platformtools.itemlist_refresh()
        return True
Example #2
0
def check_addon_updates(verbose=False):
    logger.info()

    ADDON_UPDATES_JSON = 'https://balandro.tk/addon_updates/updates.json'
    ADDON_UPDATES_ZIP  = 'https://balandro.tk/addon_updates/updates.zip'

    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

        # Descargar json con las posibles actualizaciones
        # -----------------------------------------------
        data = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=2).data
        if data == '': 
            logger.info('No se encuentran actualizaciones del addon')
            if verbose:
                platformtools.dialog_notification('Balandro ya está actualizado', 'No hay ninguna actualización pendiente')
            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:
                platformtools.dialog_notification('Balandro ya está actualizado', 'No hay ninguna actualización pendiente')
            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)
        if current_version != data['addon_version']:
            logger.info('No hay actualizaciones para la versión %s del addon' % current_version)
            if verbose:
                platformtools.dialog_notification('Balandro ya está actualizado', 'No hay ninguna actualización pendiente')
            return False

        if os.path.exists(last_fix_json):
            lastfix = jsontools.load(filetools.read(last_fix_json))
            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:
                    platformtools.dialog_notification('Balandro ya está actualizado', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
                return False

        # Descargar zip con las actualizaciones
        # -------------------------------------
        localfilename = os.path.join(config.get_data_path(), 'temp_updates.zip')
        if os.path.exists(localfilename): os.remove(localfilename)

        down_stats = downloadtools.do_download(ADDON_UPDATES_ZIP, config.get_data_path(), 'temp_updates.zip', silent=True, resume=False)
        if down_stats['downloadStatus'] != 2: # 2:completed
            logger.info('No se puede descargar la actualización')
            if verbose:
                platformtools.dialog_notification('Actualización fallida', 'No se puede descargar la actualización')
            return False
        
        # Descomprimir zip dentro del addon
        # ---------------------------------
        import xbmc
        xbmc.executebuiltin('XBMC.Extract("%s", "%s")' % (localfilename, config.get_runtime_path()))
        time.sleep(1)
        
        # Borrar el zip descargado
        # ------------------------
        os.remove(localfilename)
        
        # Guardar información de la versión fixeada
        # -----------------------------------------
        if 'files' in data: data.pop('files', None)
        filetools.write(last_fix_json, jsontools.dump(data))
        
        logger.info('Addon actualizado correctamente a %s.fix%d' % (data['addon_version'], data['fix_version']))
        if verbose:
            platformtools.dialog_notification('Balandro actualizado a', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
        return True

    except:
        logger.error('Error al comprobar actualizaciones del addon!')
        logger.error(traceback.format_exc())
        if verbose:
            platformtools.dialog_notification('Balandro actualizaciones', 'Error al comprobar actualizaciones')
        return False