Kodi, skins y vistas disponibles: viewcontent y viewmode
Publicado: 16 Dic 2016, 19:06
Kodi cuenta con gran variedad de skins que nos proporcionan una serie de vistas para adaptar los listados de contenidos según nuestras preferencias personales. Sería imposible personalizar Pelisalacarta para adaptarlo a todos los skins disponibles. Por eso hemos intentado idear un sistema que en principio cubra dos de los skins estandars (confluence y estuary), pero que pueda ser ampliable y personalizable en el futuro.
Es importante entender los conceptos que hay detrás de los nuevos atributos viewcontent y viewmode del objeto Item y no confundirlos con item.contentType, que indica el tipo de contenido que representa un determinado ítem (“list”, “movie”, “tvshow”, “season” o “episode”).
Todas las vistas incluidas en un determinado skin se agrupan en función del tipo de contenido que han de mostrar, de tal modo que hay vistas que están disponibles para mostrar listados de temporadas, pero no lo estarán si el tipo de contenido es un listado de películas, por ejemplo. Cada uno de estos subgrupos de vistas es un viewcontent diferente (en python se fijan mediante xbmcplugin.setContent). Todos los skins tienen los mismos viewcontent y aunque hay algunos mas, nosotros solo utilizaremos cuatro: "files", "movies", "tvshows", "seasons" y "episodes".
En confluence y estuary podemos cambiar la vista entre todas las disponibles dentro de un viewcontent mediante el menú lateral izquierdo (vista ver: xxxx).
Los nombres de las vistas incluidas en cada viewcontent no tienen porque ser iguales todos los skins. Incluso dos vistas con el mismo nombre en diferentes viewcontent, del mismo o diferente skin, no tiene porque ser iguales, aunque generalmente serán parecidas. Es por esto que no podemos utilizar directamente un nombre (o su equivalente numérico en python) para seleccionar la vista concreta en la que deseamos que los usuarios vean nuestro canal. Para solucionar esto hemos creado viewmode que es una simplificación a tres tipos de vistas estandars: "list", "movie_with_plot" y "thumbnails". El código, en función del skin, convierte cada uno de estos viewmode en un número y fija la vista mediante Container.SetViewMode.
Editado para adaptar la explicacion a los ultimos cambios
Es importante entender los conceptos que hay detrás de los nuevos atributos viewcontent y viewmode del objeto Item y no confundirlos con item.contentType, que indica el tipo de contenido que representa un determinado ítem (“list”, “movie”, “tvshow”, “season” o “episode”).
Todas las vistas incluidas en un determinado skin se agrupan en función del tipo de contenido que han de mostrar, de tal modo que hay vistas que están disponibles para mostrar listados de temporadas, pero no lo estarán si el tipo de contenido es un listado de películas, por ejemplo. Cada uno de estos subgrupos de vistas es un viewcontent diferente (en python se fijan mediante xbmcplugin.setContent). Todos los skins tienen los mismos viewcontent y aunque hay algunos mas, nosotros solo utilizaremos cuatro: "files", "movies", "tvshows", "seasons" y "episodes".
En confluence y estuary podemos cambiar la vista entre todas las disponibles dentro de un viewcontent mediante el menú lateral izquierdo (vista ver: xxxx).
Los nombres de las vistas incluidas en cada viewcontent no tienen porque ser iguales todos los skins. Incluso dos vistas con el mismo nombre en diferentes viewcontent, del mismo o diferente skin, no tiene porque ser iguales, aunque generalmente serán parecidas. Es por esto que no podemos utilizar directamente un nombre (o su equivalente numérico en python) para seleccionar la vista concreta en la que deseamos que los usuarios vean nuestro canal. Para solucionar esto hemos creado viewmode que es una simplificación a tres tipos de vistas estandars: "list", "movie_with_plot" y "thumbnails". El código, en función del skin, convierte cada uno de estos viewmode en un número y fija la vista mediante Container.SetViewMode.
- ¿Todos los ítem de nuestro canal deben tener declarado el atributo viewcontent? Sí y no. Por defecto el código intenta asignar las vistas disponibles para un listado en función del tipo de contenido (contentType) del ítem padre (el que ha provocado la visualización del listado). El grado de acierto o fallo dependerá en gran medida en que ese contentType este correctamente asignado. El consejo a la hora de crear un canal es q lo hagáis fijando contentType, pero obviando en un primer momento viewcontent. Cuando ya lo tengáis medio montado es momento de comprobar si hay que forzar un viewcontent y vievmode particular o el calculado por defecto ya está bien.
- ¿Qué sucede si no está bien asignado viewcontent? Pues que las vistas disponibles no serán las mejores posibles, pero el canal continuara funcionando.
- ¿Y qué pasa con viewmode? ¿Hay que declararlo siempre? No, en este caso se trata de un atributo opcional, si no está declarado se escogerá una vista por defecto en función del viewcontent para cada skin.
- ¿Y si el usuario no quiere que el plugin escoja la vista? Para eso existe una parámetro en las preferencias de Pelisalacarta llamado “Forzar el modo de vista”. Si este parámetro está desactivado, el plugin ignorara los atributo viewcontent y viewmode y fijara el tipo de vistas a mostrar en todos los canales como 'movies'.
- ¿Qué sucede si el usuario utiliza un skin diferente a los dos citados? Si el skin no está contemplado se devuelven los identificadores de las vistas propias de confluence, y si el skin no las soporta se asigna la vista ‘lista’ por defecto.
- ¿Cómo podemos añadir los identificadores de las vistas de otro skin? En próximas versiones es posible que la estructura que soporta todo esto se encuentre en un archivo externo y que se creen métodos para que los usuarios puedan fijar sus vistas por defecto. Pero de momento dicha estructura es un diccionario estático llamado viewmode_json y definido en platformtools.get_viewmode_id(). Este diccionario tiene un elemento por skin cuya clave es su propio nombre (actualmente ‘skin.confluence’ y ‘skin.estuary’) y cuyo valor es otro diccionario con las siguientes claves (todas obligatorias) y valores:
- ‘default_files’, ‘default_movies’, ‘default_tvshows’, ‘default_seasons’ y ‘default_episodes’ con los identificadores para las vistas por defecto para cada viewcontent.
- ‘view_list’, ‘view_thumbnails’ y ‘view_movie_with_plot’ con los identificadores para las vistas que se mostraran al asignar estos valores a viewmode.
Editado para adaptar la explicacion a los ultimos cambios