Tengo un problema, estoy haciendo un sistema de actualizaciones de ficheros... básicamente lo que hace la rutina es leer un fichero de texto alojado en mi nube, verifica las versiones y si estas son diferentes (o no existe el fichero local que aloja la versión -por lo tanto es nuevo-)... lo sustituye... eso en la 1ª vez, en la 2ª si la versión es diferente, pero el fichero ya existe, primero me hace una copia de sguridad y después lo sustituye...
Si las versiones son IGUALES... no DEBE hacer nada.
Pues aquí es donde tengo mi problema, en Windows 7Pro+Kodi 16.1 me lo hace a la perfección... pero en Android con SPMC 16.3 con libreria de SuperCeleron aunque las versiones sean iguales, vuelve a actualizarlo y sacarme los mensajes de actualización cada vez que entro... le he dado mil vueltas y no veo xq no funciona... a ver si alguno de vosotros (que sois unos máquinas) me puede ayudar... os suministro todo para que podais probar:
Rutina:
Código: Seleccionar todo
# -*- coding: utf-8 -*-
#---------------------------------------------------------------------
# License: GPL (http://www.gnu.org/licenses/gpl-3.0.html)
# Gracias a las librerías de Jesús (www.mimediacenter.info)
#---------------------------------------------------------------------
import os, sys, urllib, urllib2, re, shutil
import xbmc, xbmcgui, xbmcaddon, xbmcplugin
import plugintools
from core.item import Item
from core import scrapertools
addonName = xbmcaddon.Addon().getAddonInfo("name")
addonVersion = xbmcaddon.Addon().getAddonInfo("version")
addonId = xbmcaddon.Addon().getAddonInfo("id")
addonPath = xbmcaddon.Addon().getAddonInfo("path")
home = xbmcaddon.Addon().getAddonInfo('path')+'/'
playlists = xbmc.translatePath(os.path.join('special://userdata/playlists', ''))
temp = xbmc.translatePath(os.path.join('special://userdata/playlists/tmp/', ''))
addons = xbmc.translatePath(os.path.join('special://home/addons/', ''))
mi_userdata = xbmc.translatePath(os.path.join("special://home/userdata/addon_data/plugin.video.pelisalacarta/", ''))
kodi = xbmc.translatePath(os.path.join('special://home/', ''))
backup_fich = xbmc.translatePath(os.path.join('special://home/userdata/addon_data/plugin.video.pelisalacarta/downloads/', ''))
# Comprobamos qué versión es la más reciente
def check_update():
#Este Trae la vesión v01 de los ficheros, al no existir la 1ª vez, los añade pero no saca copia de seguridad
Item.url = "https://www.cubbyusercontent.com/pl/UpdaterPrueba.txt/_5f56d12294064b9bab918929795a510c"
#Este es para la 2ª vez (lo desmarco, y marco el 1º)... con este, al ya existir los ficheros, los debe sustituir y dejar una copia de seguridad del anterior.
#Item.url = "https://www.cubbyusercontent.com/pl/UpdaterPrueba2.txt/_75a4d994108243978fd633b4153baac3"
data = scrapertools.cache_page(Item.url)
plugintools.log("*************************** "+data)
plotter="";datamovie = {}
subchannel = plugintools.find_multiple_matches(data, '<subchannel>(.*?)</subchannel>')
i = 0
plugintools.log("***************************I= ")
plugintools.log(str(len(subchannel)))
plugintools.log("***************************I= "+str(i))
for entry in subchannel:
try:
plugintools.log("********************entry: "+entry+"***********************")
title = plugintools.find_single_match(entry, '<name>(.*?)</name>')
url = plugintools.find_single_match(entry, '<url>(.*?)</url>')
thumbnail = plugintools.find_single_match(entry, '<thumbnail>(.*?)</thumbnail>')
version = plugintools.find_single_match(entry, '<version>(.*?)</version>')
nom_fichero = plugintools.find_single_match(entry, '<fichero>(.*?)</fichero>')
fanart = plugintools.find_single_match(entry, '<fanart>(.*?)</fanart>')
forzado = plugintools.find_single_match(entry, '<forzado>(.*?)</forzado>')
clase = plugintools.find_single_match(entry, '<clase>(.*?)</clase>').upper()
ruta = plugintools.find_single_match(entry, '<ruta>(.*?)</ruta>')
datamovie["Plot"] = '[COLOR white]'+plugintools.find_single_match(entry, '<changelog>(.*?)</changelog>')+'[/COLOR]'
fich_verif = mi_userdata+title.replace(".","_").replace(" ","_")+".upd"
fich_verif = xbmc.translatePath(os.path.join(fich_verif))
plugintools.log("fich_verif: "+fich_verif)
actualizo = True
if os.path.exists(fich_verif): # Si ya hay fichero de verificación, leo la versión
file_version=open(fich_verif, "r")
ult_version = file_version.read()
file_version.close()
if version == ult_version:
plugintools.log("*************LA VERSION ES IGUAL!!!!**********************")
fichero = xbmc.translatePath(os.path.join(kodi+ruta+'/'+nom_fichero))
#if os.path.isfile(fichero): # Ya tiene ese fichero/plugin de antes
if os.path.exists(fichero): # Ya tiene ese fichero/plugin de antes
actualizo = False
else:
actualizo = True # Por algún motivo, aunq existe el de verificación, se ha borrado el fichero... así q lo repongo
else:
actualizo = True
else:
plugintools.log("*************fich_existente: "+kodi+ruta+'/'+nom_fichero)
fichero = xbmc.translatePath(os.path.join(kodi+ruta+'/'+nom_fichero))
if os.path.exists(fichero): # Ya tiene ese fichero/plugin de antes
#if os.path.isfile(fichero): # Ya tiene ese fichero/plugin de antes
if forzado.upper() == "SI": # Anunq ya lo tenga, considero necesario cambiarlo x el mío
actualizo = True
else: # No considero necesario reemplazarlo.
actualizo = False
else: # Si no lo tiene, evidentemente lo instalo
actualizo = True
if actualizo:
if clase == "FICHERO":
plugintools.log("*************VOY A ENTRAR*****************")
actualiza_fich(title, nom_fichero, ruta, url)
plugintools.log("************* I=I+1 *****************")
i = i + 1
plugintools.log("*************fich_verif: "+fich_verif)
#stop()
file_version=open(fich_verif, "w+")
file_version.write(version)
file_version.close()
except:
pass
if i > 0:
xbmcgui.Dialog().ok( "¡¡ATENCIÓN" , "Se han producido [COLOR red]"+str(i)+" ACTUALIZACIONES[/COLOR]... se recomienda [COLOR red]REINICIAR[/COLOR] el sistema" )
return i
def actualiza_fich(title, nom_fichero, ruta, url):
fich_destino = xbmc.translatePath(os.path.join(backup_fich + nom_fichero))
plugintools.log("*************fich destino: "+fich_destino)
#stop()
#if os.path.isfile(fich_destino):
if os.path.exists(fich_destino):
plugintools.log("*************YA EXISTE EL FICH. DESTINO ASI Q LO BORRO Y LE COPIO EL Q HAY AHORA**************")
os.remove(fich_destino)
origen = xbmc.translatePath(os.path.join(kodi + ruta + '/' +nom_fichero))
#destino = xbmc.translatePath(os.path.join(backup_fich + ruta +'/' + nom_fichero))
destino = xbmc.translatePath(os.path.join(backup_fich + nom_fichero))
shutil.copyfile(origen , destino) # Hago el backup del fichero
else:
plugintools.log("************NO EXISTE EL FICH DESTINO ASÍ Q LO COPIO**************")
origen = xbmc.translatePath(os.path.join(kodi + ruta + '/' +nom_fichero))
plugintools.log("************FICHERO ORIGEN: "+origen+"**************")
if os.path.exists(origen):
plugintools.log("************SI ENTRA AQUÍ ES XQ YA EXISTE EN EL PROGRAMA... PERO PUEDE SER NUEVO, ASI Q NO HACE EL COPY PUES DA ERROR**************")
destino = xbmc.translatePath(os.path.join(backup_fich + nom_fichero))
shutil.copyfile(origen , destino) # Hago el backup del fichero
plugintools.log("************DESCARGO E INICIO ACTUALIZACIÓN**************")
#Ahora descargo el fichero nuevo y lo pongo en su sitio
progreso = xbmcgui.DialogProgressBG()
progreso.create("Iniciando actualización... " , nom_fichero )
#yesno = 0
r = urllib2.urlopen(url)
contenido = r.read()
r.close()
origen = xbmc.translatePath(os.path.join(temp + nom_fichero))
destino = xbmc.translatePath(os.path.join(kodi+ruta+"/"+nom_fichero))
plugintools.log("*************origen: "+origen)
plugintools.log("*************destino: "+destino)
plugintools.log("*************url: "+url)
f = open(origen, "wb")
f.write(contenido)
f.close()
plugintools.log("************LO INTENTO COPIAR**************")
try:
progreso.update(50, "Copiando archivo... " , nom_fichero)
shutil.copyfile(origen, destino)
progreso.update(100, "Actualización completada! " , nom_fichero)
progreso.close()
except:
progreso.update(0, "Error al sobreescribir! " , nom_fichero)
pass
try:
os.remove(origen)
xbmc.executebuiltin("Notification(%s,%s,%i,%s)" % (addonName, "Actualización completada!", 3 , home+'icon.png'))
plugintools.log("Completada la actualización de "+nom_fichero)
except:
pass
Los 2 ficheros de texto (para versión1 y versión2) de info. para la actualización, que uso e intercambio para hacer las pruebas, los podeis bajar aquí:
https://www.cubbyusercontent.com/pl/Upd ... 29795a510c
https://www.cubbyusercontent.com/pl/Upd ... b4153baac3
Y la librería pluguinstools. py... q es la de PalcoTV del amigo Juarrox y por lo tanto completamente abierta, la teneis aquí:
https://www.cubbyusercontent.com/pl/plu ... 07e2c61bfb
Espero que alguno pueda ayudarme xq ya me trae loco.
Gracias a todos.
ahhh, he puesto las rutas de pelisalacarta como puro ejemplo, podría ser de cualquier otro plugin.
Saludos.