Página 1 de 4

Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 09:38
por divadr
Hola, antes de nada quisiera decir que yo acabo de llegar y no pretendo, en absoluto, decir cómo se tienen que hacer las cosas. Sin embargo, dado que he estado intentando rehacer el Launcher de XBMC simplificándolo y optimizándolo al máximo, me permito el lujo de abrir este hilo, explicando que criterios he seguido, para así poder discutirlos, he intentar unificar criterios en los launchers de las distintas plataformas.

También tengo que decir que no considero que esté terminado... pero que en el estado en el que esta ya es hora que otros lo prueben y hagan sus criticas / aportaciones / etc...

FALTA por poner algunos campos nuevos en la config, pero no he encontrado donde hay que ponerlos, por eso si alguien puede indicarme lo agradecería.

1. Estructura:
La estructura de este launcher es muy simple:
Función principal {Extraer ítem -> Ejecutar su función{Ejecuar funciones en el lugar apropiado} -> Mostrar los Resultados}

La Función principal es la encargada de gestionar el funcionamiento y llamar a las otras funciones.

ExtraerItem: Se encarga de devolver el Ítem desde el que se realizó la petición (en XBMC mediante sys.argv[2], en HTML seria mediante la url, etc…) lo importante es que la función devuelva un ítem, con TODOS los datos que contenga en el origen.

EjecutarFuncion: Se encarga de analizar el Item recibido y en función de ciertos criterios realizar la función adecuada, salvo excepciones expresas, necesarias para funciones especiales como puedes ser search, play, etc… que o bien no tienen que devolver ningún itém por que reproduce el vídeo o porque tiene que intercalar un teclado, etc…, todas las demás busca la función en el canal del ítem.channel, si existe la ejecuta y si no existe la busca en el launcher, y por ultimo si tampoco existe en el launcher, informa en el log que no se ha encontrado la función.
Después se modifican ciertos valores de los ítems, por ejemplo, aplicar fanarts genéricos si el ítem no tiene ninguno, aplicar menús contextuales genéricos como puede ser “agregar la serie a la librería” en caso de que el ítem.show contenga el nombre de la serie…, etc…

MostrarResultados: Se encarga de mostrar el itemlist resultante de la función anterior en pantalla, también se encarga de construir los menús contextuales.

Resto de funciones: El resto de funciones del launcher son funciones secundarias que se llaman desde la función "EjecutarFuncion" para tareas concretas como el menú de reproducción, añadir a descargas, añadir a librería, descargar, findvideos, etc…, para no tener el código amontonado entre un monton de "if else", y asi se vea mas claro.

2. Características:
Para desarrollar este launcher he seguido la estrucutra anterior, para que todo funcione correctamente he tenido que modificar algunos archivos como: ítem.py, library.py, channelselector.py, configuración.py, buscador.py... para convertir sus funciones en genéricas y que acepten el ítem como argumento.

En principio funciona todo en la última versión de Kodi (salvo algo que me haya olvidado probar) las principales características son:

1. Hace las peticiones usando el ítem serializado (función que previamente he modificado para que mediante una función serialice todos los campos, de manera que si se añaden mas campos no hay que modificar las funciones), así todos los parámetros se pasan correctamente.

2. Al crear el listitem en xbmc edita el title y le añade la duración del video, calidad, etc..., Opciones configurables desde la configuración (aun por hacer) siempre que los canales envíen esa información en el campo destinado para ello y no en el title. de esta manera podemos unificar la forma en que vemos los resultados, y poder configurarlo a nuestro gusto en los ajustes. y es mas sencillo conseguirer el título limpio para acciones como buscar un tráiler, añadir a librería, etc...

3. Acción findvideos genérica mejorada:
• Si solo devuelve un vídeo directamente te manda al menú de reproducción, evitando una segunda lista con un solo elemento.
• Servicio LongUrl para usar con acotador de urls (función que ya implemente en el canal shurweb que edite hace un tiempo) pero ahora directamente desde el findvideos. (Quiza sería mejor ponerlo directamente en el servertools.py) el funcionamiento es el siguiente: cuando descargas una página le pasas el contenido y analiza todos los enlaces, si aluno coincide con un servidor soportado por LongUrl, te sustituye el enlace por el real. Y te devuelve el contenido modificado.

4. Si el canal devuelve los datos en su sitio (title, server, thumbnail, etc) los datos llegan correctamente hasta al reproductor, de manera que se ve el título correcto, el thumnail, etc…

5. Corregida la opción de enviar a jDownloader, para que funcione de nuevo y descarge el vídeo, thumbnail y subtitulos, si existen.

6. Corregida la opción de enviar a pyLoad, para que funcione de nuevo y descarge el vídeo, thumbnail y subtitulos, si existen.

7. Añadido el menú contextual de Buscar Tráiler a todos los ítems que su action sea findvideos o play, asi podemos buscar un tráiler de una peli sin tener que llegar al menú de reproducción.

8. Añadido el Menu contextual de "Añadir serie a la biblioteca" y "Descargar todos los episodio de la serie" a todos los ítems que el ítem.show contenga algo.

9. He quitado todo el código de xbmc del channelselector y de otros módulos del core. para que este todo en el launcher

10. En Favoritos, lista de descargas, biblioteca, etc... en los archivos guarda el ítem serializado, para poder tener toda la info disponible, en vez de unas líneas de texto como guardaba antes, el problema es que los favoritos antiguos y los strm, antiguos no funcionaran y muy probablemente de algún error, por eso recomiendo quitarlos para probar esta versión. estoy pendiente de hacer una herramienta, para traducir esos archivos al nuevo sistema.

11. Seguro que algo se me olvida.

Para que todo esto funcione correcto, es necesario que todos los canales sean genéricos, y que devuelvan los datos en su sitio… muchas funciones findvideos de canales los devuelven mal, y luego los títulos no se ven limpios, mi idea es ir corrigiendo los canales que no están correctamente ya que con la nueva función findvideos, los más probable es que prácticamente ningún canal necesite una propia, y si aun así la necesita, hacer que devuelva los valores correctamente.

NO he dado soporte para canales que no sean genéricos, ya que considero mas sencillo modificar algún canal que tarde o temprano habrá que modificarlo, que tener que adaptar el launcher para que haga funciones obsoletas.

Como veis para que todo esto funcione bien y se vea bien, es importante que cada dato esté en su sitio en el Ítem. por eso yo si que lo doy importancia a eso, el problema es que no hay documentación sobre como debe usarse cada campo, yo propongo pensar que campos serian necesario añadir o quitar (si alguno no se necesita) y dejar los necesarios, y abrir un hilo indicando para que sirve cada uno y datos deben contener así es mas fácil para todos editar canales y seguir los mismos criterios, hacer las cosas bien no cuesta mas ni menos, simplemente es cuestión de saber como hay que hacerlo y hacerlo todos igual.

Como también podréis ver, no soy amigo de los "try: except:" yo soy mas partidario de comprobar las cosas en vez de intentar hacerlas y si fallan intentar de otra manera, en otras palabras, prefiero un "if else" que un "try except" si es posible, asi que veréis que he eliminado gran cantidad de ellos.

Me gustaría que lo probéis y opinéis, también que busquéis fallos (seguro que los hay) y que seáis exigentes, si algo puede funcionar mejor prefiero que funcione mejor. Es posible que algún canal no funcione correctamente porque tuviera código especifico para el en el launcher y ahora no está, pero en esos casos prefiero modificar el canal que modificar el launcher, si veis alguno que no va, y antes si que iba, decídmelo e intentare corregirlo.

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 10:11
por alpelmir
Enhorabuena por el trabajazo y espero que sea aprovechado.

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 10:51
por alpelmir
Disculpa tengo un problema Kodi no me reconoce el addon. Lo he puesto en la carpeta pero no lo ve.
¿Que he hecho mal? C:\Users\user\AppData\Roaming\Kodi\addons

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 11:16
por supercopito
divadr no me imagino las horas que habras hechado para tanto modificación mas o menos te coje con todas las modificaciones, voy a probarla en la versión html y te comento lo que vea. Gracias por tu gran esfuerzo.

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 11:52
por supercopito
Rectifico ya he visto que solo es para kodi, y por ahi no paso lo lamento no podré comentar nada, prefiero la versión html, es una pena si alguna vez te decides con ella encantando de hacerte de betatester.

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 13:41
por divadr
Si... demomento solo he tocado la version para kodi... solo he puesto los archivos modificados... hay que sobreescribir sobre los archivos que ya hay para que lo reconozca

La idea es hacer lo mismo para la html... pero primero paso a paso...

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 14:33
por alpelmir
Me da este error:

14:28:18 T:5696 ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.TypeError'>
Error Contents: getmainlist() takes no arguments (1 given)
Traceback (most recent call last):
File "C:\Users\us\AppData\Roaming\Kodi\addons\plugin.video.pelisalacarta\default.py", line 27, in <module>
launcher.run()
File "C:\Users\us\AppData\Roaming\Kodi\addons\plugin.video.pelisalacarta\platformcode\xbmc\launcher.py", line 32, in run
itemlist = EjecutarFuncion(item)
File "C:\Users\us\AppData\Roaming\Kodi\addons\plugin.video.pelisalacarta\platformcode\xbmc\launcher.py", line 97, in EjecutarFuncion
exec "itemlist = channelmodule." + item.action + "(item)"
File "<string>", line 1, in <module>
TypeError: getmainlist() takes no arguments (1 given)
-->End of Python script error report<--
14:28:18 T:5696 INFO: Python script stopped
14:28:18 T:5696 DEBUG: Thread LanguageInvoker 5696 terminating

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 15:27
por divadr
Has puesto todos los archivos? Ese error tiene pinta que estas utilizando el xhannelselector antiguo

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 16:44
por alpelmir
divadr escribió:Has puesto todos los archivos? Ese error tiene pinta que estas utilizando el xhannelselector antiguo
Gracias

Re: Desarrollando el Launcher “Perfecto” para Pelisalacarta

Publicado: 13 Mar 2015, 21:38
por super_berny
Personalmente me parece un trabajo de limpieza impecable. Felicidades

A falta el veredicto de Jesus no podria estar mas de acuerdo con el planteamiento que haces.

Y creo que ahora lo fundamental seria establecer que argumentos deberia tener el objeto Item, documentarlo e ir adaptando los canales al nuevo launcher (mis canales newpct y peliserie no funcionan bien ya que hay una reasignacion item.extra en la linea 116 que me hace polvo los canales :lol: )

Y ahora viene la pregunta ¿que hace a este launcher especifico de xbmc? Las llamadas al teclado, a los cuadros de dialogo, el añadir items (addDirectoryItem) y en general todo lo q utiliza las librerias xbmcgui, xbmcplugin y xbmc ¿no? Y no podria crearse una libreria por plataforma para estas cosas y dejar tb el launcher generico?