Página 10 de 12

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 16 Dic 2015, 01:10
por robalo
Hoy sólo he mirado el tema sha1 y que me volviendo majara.

El otro día no mira para nada el código, me limité a los resultados a excepción de corregir el error "UnicodeDecodeError: 'utf8' codec can't decode byte 0xf1 in position 1: invalid continuation byte" para poder probar.

Hoy si me he concentrado en la siguiente línea del error y he visto como crea el hash GitHub. He visto que es necesario añadir el nombre de la carpeta "blob" + la longitud de la cadena de datos + "\0".

Tal como está el código en el updater el copy/paste desde GitHub a windows no nos vale, tendríamos una diferencia longitud en la cadena de datos de n bytes por saltos de líneas.

Eso lo sulucionaba cuando hice lo del update_rservers con MD5 con la función "def md5_local( file_server ):". Para este quedaría así:

Código: Seleccionar todo

def sha1_local( _file ):

    import hashlib
    hash = hashlib.sha1()
    with open( _file ) as f:
        for chunk in iter( lambda: f.read( 4096 ), "" ):
            hash.update( "blob " + str(len(chunk)) + "\0" + chunk )

    return hash.hexdigest()
Con eso sale el hash clavadito

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 16 Dic 2015, 01:20
por divadr
Hola robalo

No entiendo muy bien lo que dices... tal como esta, el hash lo hace bien... no se cual es el problema que tienes. Mientras los saltos de linea esten igual que en github el hash coincidira...

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 16 Dic 2015, 02:16
por robalo
No es nada importante, sólo es una curiosidad que elimina el problema de la diferencia de la longitud de la cadena por lo saltos de líneas entre linux/mac y windows

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 16:49
por jesus
Llevo un buen rato probando el tema de las actualizaciones automáticas que envió superberny al Github, y está claro que esto requiere una de esas ramas de desarrollo que me habéis sugerido varias veces.

Los cambios que hay, y los que proponéis en este hilo, me parecen algunos muy interesantes, otros menos interesantes, y algunos simplemente no me convencen ja ja ja

Os cuento lo que interpreto de mis pruebas, de lo que hay ahora en Github, y de lo que he ido leyendo en este hilo:

1) La opción de lanzar la actualización en el "launcher.start" (al entrar a pelisalacarta la primera vez), y no en el "launcher.run" (cada vez que entras) tiene un fallo. El launcher.start sólo se ejecuta cuando abres Kodi y entras a pelisalacarta, pero no se vuelve a ejecutar hasta que no cierras Kodi. Como yo nunca cierro Kodi, no me actualizará nunca :(

2) Generar el JSON con la lista de canales para luego usarlo en el channelselector no lo veo necesario. En la 4.0.4 la lista de canales se genera leyendo los XML al vuelo, y no he visto a nadie que se queje de lentitud.

3) Los ficheros JSON tienen varios inconvenientes frente a los XML. Si te dejas una coma no cargan, o si pones un caracter con el encoding erroneo no sale el canal. En los últimos pull requests he visto dos casos en los que ha habido que corregir esto (luego no soy el único al que le pasa), y revisando los json actuales me he visto obligado a tirar de log para entender por qué no cargaba el canal. De los canales que hay ahora en Github no me abre por ejemplo newpct1 debido a esto (no se si será esa "ñ").

Código: Seleccionar todo

File "/Users/jesus/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 89, in py_scanstring
content = unicode(content, encoding)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 1-4: invalid data
Como la ventaja de los JSON era poder generarlos fácilmente por código, y no va a ser necesario (ya que la configuración del canal irá en otro fichero en el userdata), no veo ninguna ventaja real en cambiar los XML.

4) Actualizar lanzando llamadas a GitHub con el hash me parece una solución muy pesada. Si cada vez que alguien abre pelisalacarta lanzamos centenares de llamadas a GitHub, eso son millones de llamadas al mes contra sus servidores... hay que buscar otra fórmula.

5) Los números de versión de canales para las actualizaciones deben usar números enteros (1,2,3,4,5...) y no la sintaxis por puntos (1.0, 1.1, 1.2, ...). He tenido muchos problemas con esto en el pasado, por eso en la versión 4 todas las comprobaciones de versiones se basan en números enteros.

Intentando buscar un enfoque "divergente", se me ocurre que muchas de estas ideas vienen porque entendéis que si pasa mucho tiempo entre actualizaciones la utilidad de pelisalacarta se va deteriorando, y no tenéis forma de solucionarlas por vuestra cuenta hasta que yo no publico la nueva versión como pasa por ejemplo con los servidores.

¿No podría ser una buena opción publicar de forma automática, semanalmente o diariamente, una versión de pelisalacarta "nightly build" con lo que hay en GitHub?

De esta forma el usuario que tuviera la versión "oficial" sólo se actualizaría con la versión "oficial", y el que se instalara la "nightly" tendría actualizaciones más frecuentes con la posibilidad de que haya cosas que fallen.

Lo que vamos a hacer de momento es dejar la nueva versión 4.0.5 con los XML y el updater tal como estaba, ya que no voy a ser capaz de hacer que esto funcione a tiempo para publicar la nueva versión este fin de semana, voy a ver cómo demonios se hace en Github una rama para esto y vamos trabajando sobre ella.

Se que algunos habéis trabajado un montón en esto, espero que nadie se moleste.

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 17:11
por SeiTaN
jesus escribió:
3) Los ficheros JSON tienen varios inconvenientes frente a los XML. Si te dejas una coma no cargan, o si pones un caracter con el encoding erroneo no sale el canal. En los últimos pull requests he visto dos casos en los que ha habido que corregir esto (luego no soy el único al que le pasa), y revisando los json actuales me he visto obligado a tirar de log para entender por qué no cargaba el canal. De los canales que hay ahora en Github no me abre por ejemplo newpct1 debido a esto (no se si será esa "ñ").

Código: Seleccionar todo

File "/Users/jesus/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 89, in py_scanstring
content = unicode(content, encoding)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 1-4: invalid data
A mi me dió algo parecido, cambie la "ñ", pero después arregle lo que te comenté del launcher, me arrancó y posteriormente volví a dejar la "ñ" y me va bien.
jesus escribió: Como la ventaja de los JSON era poder generarlos fácilmente por código, y no va a ser necesario (ya que la configuración del canal irá en otro fichero en el userdata), no veo ninguna ventaja real en cambiar los XML.
¿No eran 3 ficheros? canal.py, canal.json (con los datos de configuración del canal que no cambian nunca, excepto el texto del cambio y la versión) y canal.data.json que va en userdata (que yo uso para que el canal funcione de una manera especifica y me haga cosas si existe el fichero).
jesus escribió: 4) Actualizar lanzando llamadas a GitHub con el hash me parece una solución muy pesada. Si cada vez que alguien abre pelisalacarta lanzamos centenares de llamadas a GitHub, eso son millones de llamadas al mes contra sus servidores... hay que buscar otra fórmula.
Habría que investigar si es como las APIS de google que tienen un limite de llamadas,.
jesus escribió: Intentando buscar un enfoque "divergente", se me ocurre que muchas de estas ideas vienen porque entendéis que si pasa mucho tiempo entre actualizaciones la utilidad de pelisalacarta se va deteriorando, y no tenéis forma de solucionarlas por vuestra cuenta hasta que yo no publico la nueva versión como pasa por ejemplo con los servidores.

¿No podría ser una buena opción publicar de forma automática, semanalmente o diariamente, una versión de pelisalacarta "nightly build" con lo que hay en GitHub?

De esta forma el usuario que tuviera la versión "oficial" sólo se actualizaría con la versión "oficial", y el que se instalara la "nightly" tendría actualizaciones más frecuentes con la posibilidad de que haya cosas que fallen.
De hecho puedes generar "releases" cuando quieras desde el propio GitHub, los compis italianos lo hacen.
Más que nightlies yo entiendo que hayan 3 ramas, "estable", "bugs" y "develop". Tambien lo que pasa es que la mayoría de cambios se hacen sobre canales y servidores, el resto del plugin son mejoras que no se tocarían tanto.
jesus escribió: Lo que vamos a hacer de momento es dejar la nueva versión 4.0.5 con los XML y el updater tal como estaba, ya que no voy a ser capaz de hacer que esto funcione a tiempo para publicar la nueva versión este fin de semana, voy a ver cómo demonios se hace en Github una rama para esto y vamos trabajando sobre ella.

Se que algunos habéis trabajado un montón en esto, espero que nadie se moleste.
¿Que va a traer la versión 4.0.5 con respecto a la actual?

Un saludo.

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 17:23
por jesus
SeiTaN escribió:
jesus escribió: Como la ventaja de los JSON era poder generarlos fácilmente por código, y no va a ser necesario (ya que la configuración del canal irá en otro fichero en el userdata), no veo ninguna ventaja real en cambiar los XML.
¿No eran 3 ficheros? canal.py, canal.json (con los datos de configuración del canal que no cambian nunca, excepto el texto del cambio y la versión) y canal.data.json que va en userdata (que yo uso para que el canal funcione de una manera especifica y me haga cosas si existe el fichero).
Eso es, luego tenemos un canal.py y un canal.xml que no cambia más que cuando el autor del canal lo edita. Y un tercer fichero en el userdata, que ese sí que se generará automáticamente.

Lo que había pensado para ese userdata es en dejar la sección "settings" con los parámetros por defecto:

Código: Seleccionar todo

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<channel>
	<id>animeflv</id>
	<name>AnimeFLV</name>
	<language>es</language>
	<active>true</active>
	<adult>false</adult>
	<fanart></fanart>
	<thumbnail>http://media.tvalacarta.info/pelisalacarta/squares/animeflv.png</thumbnail>
	<bannermenu>http://media.tvalacarta.info/pelisalacarta/bannermenu/animeflv.png</bannermenu>
	<update_url>https://raw.githubusercontent.com/tvalacarta/pelisalacarta/master/python/main-classic/channels/</update_url>
	<version>4</version>
	<date>14/11/2015</date>
    <changes>añadido mejoras para tratk.tv, si da error al mostrar los resultados, etc</changes>
	<categories>
		<category>anime</category>
	</categories>
	<settings>
		<include_in_global_search>true</include_in_global_search>
	</settings>
</channel>
Si luego el usuario cambia la configuración del canal, se crea en el userdata un fichero que tenga los nuevos valores.
SeiTaN escribió:
jesus escribió: 4) Actualizar lanzando llamadas a GitHub con el hash me parece una solución muy pesada. Si cada vez que alguien abre pelisalacarta lanzamos centenares de llamadas a GitHub, eso son millones de llamadas al mes contra sus servidores... hay que buscar otra fórmula.
Habría que investigar si es como las APIS de google que tienen un limite de llamadas,.
Aunque no lo tengan, me imagino un email de GitHub tarde o temprano advirtiéndome sobre esto...
SeiTaN escribió:
jesus escribió: Intentando buscar un enfoque "divergente", se me ocurre que muchas de estas ideas vienen porque entendéis que si pasa mucho tiempo entre actualizaciones la utilidad de pelisalacarta se va deteriorando, y no tenéis forma de solucionarlas por vuestra cuenta hasta que yo no publico la nueva versión como pasa por ejemplo con los servidores.

¿No podría ser una buena opción publicar de forma automática, semanalmente o diariamente, una versión de pelisalacarta "nightly build" con lo que hay en GitHub?

De esta forma el usuario que tuviera la versión "oficial" sólo se actualizaría con la versión "oficial", y el que se instalara la "nightly" tendría actualizaciones más frecuentes con la posibilidad de que haya cosas que fallen.
De hecho puedes generar "releases" cuando quieras desde el propio GitHub, los compis italianos lo hacen.
Más que nightlies yo entiendo que hayan 3 ramas, "estable", "bugs" y "develop". Tambien lo que pasa es que la mayoría de cambios se hacen sobre canales y servidores, el resto del plugin son mejoras que no se tocarían tanto.
Sí, la ventaja sobre todo es simplificar el tema de las actualizaciones que estamos hablando haciendo esa versión automáticamente.
SeiTaN escribió:
jesus escribió: Lo que vamos a hacer de momento es dejar la nueva versión 4.0.5 con los XML y el updater tal como estaba, ya que no voy a ser capaz de hacer que esto funcione a tiempo para publicar la nueva versión este fin de semana, voy a ver cómo demonios se hace en Github una rama para esto y vamos trabajando sobre ella.

Se que algunos habéis trabajado un montón en esto, espero que nadie se moleste.
¿Que va a traer la versión 4.0.5 con respecto a la actual?

Un saludo.
Hace tiempo la frecuencia de las nuevas versiones era semanal y con menos actualizaciones en cada una, era muy cómodo porque siempre estábamos más o menos al día y preparar la actualización costaba poco. Con la 4.0.4 me pegué un par de días solo probando...

La idea es volver a eso, añadiendo los canales arreglados/mejorados que habéis subido a GitHub, más algunos que tengo yo por aquí y pequeñas mejoras aquí y allá. Yo creo que esta semana en la 4.0.5 acabarán entrando como 5 canales nuevos y una docena de actualizados :)

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 17:29
por super_berny
Jesús antes de tomar ninguna decisión ¿has probado la versión de divadr?

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 17:40
por jesus
Aún no, y tampoco he tomado ninguna decisión :)

Simplemente en la versión actual lo dejamos como está para no bloquear la publicación de la nueva versión, y pasamos a darle caña a este tema en una rama nueva de GitHub.

Cuando haya publicado la nueva versión creo esa rama, subimos ahí los cambios y lo probaré desde ahí.

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 19 Dic 2015, 17:55
por SeiTaN
Yo de momento me voy a estar quieto porque tengo cosas en local a la espera de si se usa xml, json si se va a guitools sino.. si se va a usar updater... :? :? Con tanta prueba tengo que readaptar lo que tengo hecho y es un rato.

Re: Actualizaciones automaticas y channelselector dinamico

Publicado: 20 Dic 2015, 01:15
por divadr
2 cosas... son dos llamadas s la api.. una para canales y otra para servidores... cada vez que se entra (incluso se podria configuara que espere un tiempo entre comprobaciones por ejemplo 24h)

Y si.. sin logearse en github son maximo 50 llamadas a la api por dia / ip... lo se porque haciendo pruebas las je agotado mas de una vez
No creo que github diga nada ya que el acceso es publico y tu no puedes controlar lo que hace la gente...

Tengo el portatil estropeado cuando lo arregle volvere a conectarme en unos dias... :o