El caso es que recientemente he terminado con los exámenes y me he puesto a modificar algunas cosillas de tvalacarta y pelisalacarta con la intención de aportar mi granito de arena para agradeceros vuestro trabajo y ayudaros en cosas simples. Las modificaciones las he probado y las he subido a mis respectivos forks, pero antes de hacer un PR en sus respectivos repositorios me gustaría comentaros lo que he hecho y, si fuera posible, que me dijerais si esta bien, mal o como podría simplificarlo/mejorarlo (cuellos de botella, bucles innecesarios, etc.). Esto es mi primer paso con python, así que es posible que haya fallos de esos que hacen llorar a los veteranos.
tvalacarta
Modificaciones:
- Poder usar direcciones con el protocolo "special://" en la configuración: Al usar direcciones con el protocolo special en "Configuración" el Add-on no podia arrancar, daba un error y había que usar forzosamente una dirección rudimentaria. Esto en un ordenador o en un dispositivo cuyo sistema de archivos no suele variar no importa, pero en iOS con cada actualización de Kodi cambia el nombre de la carpeta de los datos de la app de Kodi, y en Android, si se "cambia" entre ROMs de distintas "fuentes", posiblemente el sistema de archivos cambiara, así que el usuario empezara a ver errores, y salvo que sepa que pasa esto probablemente mas de uno acabara desesperado y hará algo drástico (como yo al principio). NOTA: Si esto os gusta y funciona en tvalacarta lo podría agregar a pelisalacarta tambien, por que, aunque esto ya funciona con la biblioteca, creo que no esta implementado para el canal "descargas" y "favoritos".
- Ahora aparece "tvalacarta" en el titulo de las ventanas temporales que aparecen al entrar a los canales en vez de "pelisalacarta". Un fix menor.
- Algunas correcciones de PEP8 y del logger (por canales que han cambiado a channels pero ponia "core" en el logger)
pelisalacarta
Modificaciones:
- Al salir de ajustes no se crea una nueva ventana: Tras el reciente cambio en "channelselector" y el movimiento de canales a "channels", parece ser que si no se pone en el "itemlist", "xmbctools" crea una nueva carpeta tras salir de la configuración. No he comprobado si da el tipico error/adventerncia en el log de "Invalid handle -1" por haber hecho esto.
Código: Seleccionar todo
folder=False
- Mejoras en el canal ayuda:
- Al modificar advancedsettings.xml ya no "machaca" el archivo por completo, ahora hace una copia del actual, lo abre, lo lee y solo modifica los apartados del advancedsettings.xml de jesus, lo demás lo deja como estaba, cincluso si habia otros ajustes dentro entre "<network>" y "</network>". Cuando conocí del potencial de Kodi (allá por Febrero) y use esta funcion dentro de "Ayuda" se substituyo el archivo de mi TV-Box por el de pelisalacarta, y dicho archivo tenia lineas importantes que estaban establecidas por el fabricante para optimizar el uso de Kodi. Hasta varias semanas después no me di cuenta y costo bastante conseguir el archivo original para devolver esas lineas (que en realidad eran 4 tonterías, pero eran necesarias). Ya no pasa mas.
- Reestructuracion del canal y separacion de las funciones con espacios en blanco. Creo que es mas util la estructura nueva.
- Al pulsar para actualizar los episodios y la biblioteca ya no se produce un bucle infinito. Esto en la TV-Box no daba problemas, pero en iOS se ha llegado a provocar varios crashes por este bucle. He hecho falta crear una función en "library_service.py", pero no ha tenido impacto alguno sobre su funcionamiento, o eso creo. NOTA: Todavía tengo varias cosas en proceso para mejorar esta característica dentro del canal.
- He agregado un itemlist junto con su función para restaurar el backup de advancedsettings.xml que exista (y sino existe se notifica)
- Cambio en library.py: Antes de esta solución de Seitan a un problema que habia con "library.py", este iniciaba el procedimiento de convertir "series.xml" a "series.json" y se quedaba a medias, con lo que en en la función "convert_xml_to_json" agregué lo que se puede observar en este commit (en la parte de library.py) con el objetivo de que si se vuelve a quedar a medias por un problema se borre "SERIES_OLD" antes de intentar renombrarlo (por que si la carpeta no esta vacía "os.rename" no es capaz de renombrarla y no es capaz de continuar) y ademas haga una limpieza de la librería al finalizar (por que la función no "respeta" los archivos ".strm" que ya existen y al cambiar la dirección Kodi deja de saber donde están)
- "JSON.ObjectFromString" y "JSON.StringFromObject", de "jsontools.py" no existen. He agregado un "FIXME" delante de cada uno de ellos.
- Hay un problema con json a la hora de leer los archivos de "settings_channel" en "filtertools.py". La verdad es que no he dedicado mucho tiempo a buscar como solucionarlo, pero los archivos json que intenta leer no existen en la carpeta, así que podría ser un problema sencillo a solucionar con un "if os.path.exists(fname): ...". Os dejo el log por si sirve de algo:
...
[filtertools.py] get_filtered_tvshows
NOTICE: [filtertools.py] read_file
NOTICE: Traceback (most recent call last):
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/core/jsontools.py", line 110, in load_json
json_data = simplejson.loads(data, object_hook= to_utf8)
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/__init__.py", line 318, in loads
return cls(encoding=encoding, **kw).decode(s)
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 335, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 353, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
23:09:48 T:123145321213952 NOTICE: pelisalacarta.core.jsontools.load_json Probando simplejson incluido en el interprete
23:09:48 T:123145321213952 NOTICE: Traceback (most recent call last):
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/core/jsontools.py", line 119, in load_json
json_data = simplejson.loads(data, object_hook=to_utf8)
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/__init__.py", line 318, in loads
return cls(encoding=encoding, **kw).decode(s)
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 335, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/lib/simplejson/decoder.py", line 353, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
NOTICE: pelisalacarta.core.jsontools.load_json Probando json incluido en el interprete
NOTICE: Traceback (most recent call last):
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/core/jsontools.py", line 128, in load_json
json_data = json.loads(data, object_hook=to_utf8)
File "/Users/Shared/jenkins/workspace/OSX-64/tools/depends/xbmc-depends/macosx10.10_x86_64-target/lib/python2.6/json/__init__.py", line 318, in loads
File "/Users/Shared/jenkins/workspace/OSX-64/tools/depends/xbmc-depends/macosx10.10_x86_64-target/lib/python2.6/json/decoder.py", line 319, in decode
File "/Users/Shared/jenkins/workspace/OSX-64/tools/depends/xbmc-depends/macosx10.10_x86_64-target/lib/python2.6/json/decoder.py", line 338, in raw_decode
ValueError: No JSON object could be decoded
NOTICE: pelisalacarta.core.jsontools.load_json Probando JSON de Plex
NOTICE: Traceback (most recent call last):
File "/Users/__/Library/Application Support/Kodi/addons/plugin.video.pelisalacarta/core/jsontools.py", line 137, in load_json
json_data = JSON.ObjectFromString(data, encoding="utf-8")
NameError: global name 'JSON' is not defined
NOTICE: pelisalacarta.core.jsontools.load_json No se ha encontrado un parser de JSON valido
NOTICE: pelisalacarta.core.jsontools.load_json -> (nada)
NOTICE: [filtertools.py] check_json_file
NOTICE: Error al cargar el json del fichero /Users/__/Library/Application Support/Kodi/userdata/profiles/Development/addon_data/plugin.video.pelisalacarta/settings_channels/seriesblanco_data.json
NOTICE: Está vacÃo el fichero: /Users/__/Library/Application Support/Kodi/userdata/profiles/Development/addon_data/plugin.video.pelisalacarta/settings_channels/seriesblanco_data.json
NOTICE: json_series: {}
NOTICE: pelisalacarta.platformcode.library title_to_filename
NOTICE: pelisalacarta.platformcode.library elimina_tildes
NOTICE: pelisalacarta.platformcode.library savelibrary_tvshow
NOTICE: pelisalacarta.platformcode.library title_to_filename
NOTICE: pelisalacarta.platformcode.library elimina_tildes
NOTICE: pelisalacarta.platformcode.library savelibrary_episodes
...
Enlace a commit 2
Enlace a commit 3(con la utlima version de ayuda.py)
Dudas/Propuestas/...
- Se podría poner como ruta predeterminada "special://profile/addon_data/plugin.video.(pelisalacarta o tvalacarta)/(lo que toque)" como ruta predeterminada en los ajustes? Si con la modificación que he hecho en tvalacarta todo funcionase bien seria mucho mas cómodo.
- En pelisalacarta mas que en tvalacarta: Para trabajar uso SublimeText (gracias por recomendarlo) junto con el package "Anaconda" y "kodistubs" (complemento de "anaconda" para tener la documentación de la api de kodi). Hay archivos en los que mas de la mitas de las lineas me salen marcadas (lo hace "Anaconda") por tener "errores" relacionados con PEP8 o por falta de espacios o por que los hay donde no debieran o por que se usa "<>" en vez de "!=", etc. Como no he pedido permiso no he tocado nada, así que os pregunto: Lo dejo como esta o tengo permiso ara "limpiarlo"?
- En pelisalacarta y tvalacarta: Hace unos años el equipo de Kodi decidió "abandonar" las traducciones con "strings.xml" y pasarse a "strings.po" (la diferencia se puede observar aqui, y el proyecto no parece haber tenido el existo que esperaban por falta de colaboracion (aparentemente), asi que dejaron presente la compatibilidad con el antiguo sistema. Este sistema funciona con los addons, y aunque aun se "permite" la compatibilidad con "strings.xml" recomiendan usar el nuevo método. Hay incluso una herramienta que sirve para convertir de ".xml" a ".po". Mi duda es: Es mejor dejarlo todo como esta por que todo funciona bien así o se podría intentar pasar al nuevo sistema? En teoria si se cambia a "strings.po" no habría que modificar absolutamente nada mas.
- En pelisalacarta: No se si vosotros lo habréis experimentado, pero me pasa con frecuencia que intentar lanzar un capitulo no muestra los enlaces hasta que entre en el Add-on, entro en el canal y en la serie y pulso sobre un capitulo cualquiera, tras lo cual todo funciona a las mil maravillas. Esto por que podría ser?
- Cuando se hace el cambio de xml a json, en la ventana que aparece (por cierto, menudo pedazo de curro), no se acierta siempre (por ejemplo con "Doctor Who" y el nuevo método no lo elegí bien, mientras que con la lista "fea" que sale al hacerlo manualmente desde "archivos"(como había que hacer hasta ahora si Kodi no detectaba la serie) no hay problema alguno. El asunto es que desde que seleccione esa opción de forma incorrecta no he encontrado forma de cambiarlo (aunque supongo que podría cambiar el ID en "series.json"), y ademas no ha actualizado la información de los archivos "strm" por lo que no aparece en la biblioteca. Como podría modificar la información de una serie después de seleccionarla por primera vez?
Muchas gracias por todo lo que hacéis y perdón por el toston.

Un saludo.