# -*- coding: latin-1 -*-

# Proceso de actualización
#   En la web carpeta actual
#   Fichero actualw.lst y actualpy.lst
#       version fichero tamaño
#       # = comentario
#       ej : 4.01 401.zip 234789
# Se descarga 401.zip en carpeta actual en local
# Se ejecuta act.py, y puede contener un mensaje indicando el contenido de la actualización

import urllib
import shutil
import os
import zipfile

import Util
from Traducir import tr

import QT.QTUtil2 as QTUtil2

#==========================================================================================================================================

def actualizaFichero(titulo, web,fichero, tam):
    # Se limpia la carpeta actual
    shutil.rmtree("actual", ignore_errors=True)
    try:
        os.mkdir("actual")
    except:
        pass

    global progreso, siPrincipio
    progreso = QTUtil2.BarraProgreso( None, titulo, tr( "ACTUALIZANDO"), 100 ).mostrar()
    siPrincipio = True

    def hook( bloques, tambloque, tamfichero ) :
        global progreso, siPrincipio
        if siPrincipio :
            total = tamfichero/tambloque
            if tambloque*total < tamfichero :
                total += 1
            progreso.ponTotal( total )
            siPrincipio = False
        progreso.inc(  )

    # Se trae el fichero
    ficheroLocal = "actual/%s" % fichero
    urllib.urlretrieve("%s/actual5/%s" %(web, fichero), ficheroLocal, hook )

    siCancelado = progreso.siCancelado()
    progreso.cerrar()

    if siCancelado :
        return False

    # Comprobamos que se haya traido bien el fichero
    if tam != Util.tamFichero(ficheroLocal):
        return False

    # Se descomprime
    zp = zipfile.ZipFile(ficheroLocal, "r")
    zp.extractall("actual")

    # Se ejecuta act.py
    execfile("actual/act.py")

    return True
#==========================================================================================================================================

def actualiza(web,versionActual, pantalla, tipo):
    """
    tipo = "w" : windows
    tipo = "py" : sources
    """

    siError = False
    numAct = 0

    # Leemos actual.lst de 110mb
    try:
        f = urllib.urlopen("%s/actual5/actual%s.lst" %(web, tipo) )
    except:
        siError = True
        mens_error = tr("ACT_ERRORRED")

    if not siError:
        for x in f:
            act = x.strip()
            if not act.startswith("#"):  # Comentarios
                li = act.split(" ")
                # version fichero tamaño
                if len(li) == 3:
                    version, fichero, tam = li
                    if versionActual < version:
                        if actualizaFichero(tr("VERSION",version),web, li[1], int(li[2])):
                            Util.ponVersion(version)
                            versionActual = version
                        else:
                            mens_error = tr("ACT_INCORRECTA", version)
                            siError = True
                            break
                        numAct += 1

        f.close()

    if siError:
        QTUtil2.mensError(pantalla, mens_error)

    if numAct == 0:
        if not siError:
            QTUtil2.mensaje(pantalla, tr("ACT_NO_HAY"))
        return False

    return True
#==========================================================================================================================================
