Ayuda con Python en Android
Publicado: 27 Jul 2016, 11:15
Hola compañeros.
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:
Podeis descargarla aquí: https://www.cubbyusercontent.com/pli/Up ... c444be711b
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.
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.