Entradas archivadas en "Desarrollo"

Guía de desarrollo de pelisalacarta: Componentes internos del plugin

Martes, abril 26th, 2011

Esta entrada forma parte de una serie.

Puedes leer la entrada anterior de la serie en “Cómo funciona la actualización automática”

Si te interesa no te pierdas la sección guías de desarrollo

Hacer un plugin de XBMC es muy sencillo, lo que queda patente si echamos un vistazo al escaso número de líneas de código de algunos de los plugins más populares. Otra cosa es que la documentación que hay es escasa, y no muy buena.

Para simplificar el desarrollo de canales en pelisalacarta añadí en las primeras versiones algunos módulos comunes, recogiendo operaciones básicas como la descarga de páginas o la actualización automática. De esta forma me evitaba tener que pensar en resolver problemas comunes, y de paso simplificaba la vida a los colaboradores en el desarrollo.

Ahora en la nueva rama 3.X para no liarse mucho con el funcionamiento en cada plataforma he agrupado un poco mejor los elementos.

El paquete “core”

En esta nueva versión los módulos independientes de la plataforma se han agrupado todos en un paquete “core”, para organizar el código fuente y simplificar las dependencias entre módulos.

Podemos encontrar módulos para resolver muchas de las necesidades básicas de pelisalacarta:

  • config: Permite leer parámetros de configuración de forma independiente de la plataforma donde se ejecuta el plugin. La magia consiste en identificar en qué plataforma está corriendo y abrir el módulo “config” apropiado en el paquete “platform”. No funciona mal, aunque a medida que se van añadiendo plataformas la cosa se complica.
  • logger: Un sistema sencillo para escribir información de depuración, pero que sorprendentemente también cambia mucho de una plataforma a otra.
  • downloadtools: Herramientas para descargar los ficheros, algo que en Python no está realmente bien resuelto. Este módulo tiene también funciones auxiliares interesantes para tratar el encoding.
  • library: La aportación de Jurrabi para añadir series a la biblioteca de XBMC.
  • samba: Un wrapper sobre smb/nmb, dos librerías de Python para tratar la conectividad con carpetas compartidas de Windows.
  • updater: Verifica cada vez que inicias el plugin si hay nuevas versiones, y en caso afirmativo las descarga. La descompresión del ZIP se hace con el módulo ziptools, cuyo códig saqué buscándolo en Google
  • xbmctools: Es donde está el menú que sale cuando eliges una película. Ha crecido tanto que hay que reescribirlo, no es un buen ejemplo de programación en Python :(
  • scrapertools: Básicamente está todo lo necesario para la descarga de las páginas, se encarga de cosas tan exóticas como cambiar las cabeceras, gestionar las cookies, envios POST/GET, etc. Todo lo necesario para hacer creer a los sitios que en realidad XBMC es un navegador estándar.

El paquete “pelisalacarta/channels”

Contiene un módulo Python (un fichero .py) para cada canal y un ficheros xml asociado a cada uno de ellos para la actualización automática individual. Se llama así en lugar de llamarse simplemente “channels” con la idea de que algún día pelisalacarta, tvalacarta y otros plugins podrían llegar a ocupar la misma base de código fuente.

El paquete “platform”

La capacidad multiplataforma de pelisalacarta se basa en dos aspectos:

  • Python: Es un lenguaje interpretado, que funciona en todas las plataformas gracias a que hay un intérprte para prácticamente cualquier sistema. Además es fácilmente empotrable dentro de otras aplicaciones, lo que lo convierte en una elección muy popular para hacer extensiones de sistemas existentes.
  • El paquete estándar “platform” que proporciona al plugin funciones comunes de forma que no es necesario conocer su implementación específica en cada plataforma.

Hay un directorio para cada plataforma, que es ejecutado de forma selectiva desde diferentes puntos del plugin, y que proporciona:

  • Programa principal: Es aquí donde se almacena el punto inicial de ejecución.
  • Configuración: Es donde de verdad se implementa el acceso a los parámetros de configuración, traducciones y a parámetros genéricos. Es importante especialmente la función “get_data_path” para obtener una ruta donde poder escribir ficheros, y la función “get_runtime_path” para saber cual es la ruta principal del plugin.
  • Logging: Desde un simple “print” en unas plataformas, hasta sistemas más exóticos como el de XBMC o Plex.

El paquete “server”

Este paquete ya estaba en versiones anteriores, y agrupa los conectores de los diferentes servidores. Es aquí donde está el importante módulo “servertools” que se encarga de la detección de vídeos en una página: Basta con que le des una cadena con una página HTML y te devuelve un listado de los vídeos que encuentra incluyendo además en qué servidor están alojados.

El directorio “resources”

Además de recoger las imágenes como en versiones anteriores, en este directorio se almacenan ahora los ficheros adicionales requeridos por las diferentes plataformas. Es como el cuarto trastero :)

El script build.xml

Un script de ANT se encarga de empaquetar pelisalacarta en cada una de sus versiones. Esto simplifica mucho el trabajo a la hora de preparar las distribuciones más habituales (xbmc), y hace posible el empaquetado de las versiones más exóticas como la de Plex Media Server, que tiene una estructura de directorios muy peculiar. Y aún queda trabajo para perfeccionarlo.

Guía de desarrollo de pelisalacarta: Cómo funciona la actualización automática

Domingo, abril 24th, 2011

Esta entrada forma parte de una serie.

Puedes leer la entrada anterior de la serie en “Análisis de un canal multiplataforma”

Puedes leer la entrada siguiente en “Componentes internos del plugin”

Si te interesa no te pierdas la sección guías de desarrollo

Pelisalacarta 3.0 incorpora un mecanismo que permite a cualquier colaborador con acceso al SVN actualizar un canal que ha dejado de funcionar, o incluso modificar la lista de canales para añadir canales nuevos o quitar los que no funcionen.

El mecanismo es muy sencillo, y se basa en que hay un fichero junto a cada canal que identifica el número de versión. Si tienes un canal versión “2″ en tu pelisalacarta y alguien sube un canal con versión “3″, el plugin lo descarga y actualiza automáticamente.

Por supuesto esto sólo es posible si el usuario ha marcado esta opción entre los parámetros de configuración del plugin.

Actualizar un canal

Supongamos que queremos arreglar un fallo en cinetube, porque algún cambio en la página ha hecho que deje de funcionar o simplemente porque queremos añadir alguna mejora. Los pasos que hay que dar son sencillos:

  • Abrir el fichero cinetube.py y hacer las modificaciones
  • Subirlo el fichero cinetube.py al Subversion antes de publicar cualquier cambio
  • Abrir el fichero cinetube.xml e incrementar el número de versión. No hay versiones parciales, es un simple contador. Opcionalmente puede ponerse la descripción del cambio realizado, aunque actualmente no se utiliza. Si no hay fichero xml asociado al canal será necesario crearlo, poniendo como indicador de versión el “1″.
  • Subir el fichero cinetube.xml al Subversion. En este momento estará disponible para que todo el mundo se lo descargue.

Añadir un canal

Si lo que quieres es añadir un canal, el proceso es el mismo pero tienes que incrementar la versión de la lista de canales:

  • Crear el fichero .py del canal y grabarlo en el directorio “pelisalacarta/channels”.
  • Modificar el fichero channelselector.py para añadir el canal, indicando si es genérico o no. Si es un canal nuevo inclúyelo también en el apartado de “últimos canales”.
  • Subir el fichero channelselector.py al Subversion antes de publicar.
  • Modificar el fichero channelselector.xml para incrementar el número de la versión.
  • Subirlo al Subversion. En este momento estará disponible para todo el mundo.
  • Cuando un pelisalacarta vea que hay una nueva versión de la lista de canales se la descargará, y cuando el usuario elija el nuevo canal se lo descargará igualmente.

Eliminar un canal

Si bien es algo excepcional, también es posible eliminar canales que ya no van a funcionar de la lista de canales.

  • Modificar el fichero channelselector.py y comentar el canal que no funciona
  • Subir el fichero channelselector.py al Subversion.
  • Modificar el fichero channelselector.xml para incrementar el número de la versión.
  • Subirlo al Subversion.

Mod del skin Rapier v3.06 en XBMC Dharma

Domingo, agosto 29th, 2010

Si como yo usas la versión modificada del skin Rapier que permite ver los argumentos de los vídeos en tvalacarta y pelisalacarta, aquí tienes una actualización para soportar el sistema de addons del nuevo XBMC Dharma.

Lo único que he hecho es añadir a la versión anterior los ficheros adicionales requeridos, que he descargado de este otro sitio tras buscar un poco.

Puedes descargarlo aquí.

Mod del skin Confluence para ver argumentos de los vídeos

Jueves, mayo 6th, 2010

Si usas el skin Rapier y te gusta pelisalacarta, espero que a estas alturas ya tengas instalado el mod que publiqué hace un tiempo para poder ver el argumento de las pelis al seleccionarlas.

Si por el contrario prefieres el skin Confluence que viene por defecto con XBMC, ahora estás de suerte. El compañero Wolfk ha preparado un mod de este skin con algunos cambios interesantes.

El que más me gusta es el que permite que un vídeo seleccionado en pelisalacarta muestre el argumento sobre la carátula, de forma que se simplifica bastante el navegar entre grandes colecciones de vídeos.

Pero hay alguna mejora más:

  • Vistas en miniaturas en modo “biblioteca” para que el que usa banners pueda seguir viendolos
  • Nueva vista “Replicante”
  • Nueva vista “Replicante 2″ parecida a “Fanarts” pero para todas las vistas de biblioteca

Gracias a Wolfk por este regalito. Podéis descargarlo pulsando aqui, y a disfrutarlo :)