Página 1 de 1

Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 16 Dic 2016, 19:06
por super_berny
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.
  • ¿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.
Teneis ya todo el codigo disponible en github incluido el canal Pelispedia adaptado con estos cambios.


Editado para adaptar la explicacion a los ultimos cambios

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 17 Dic 2016, 14:37
por super_berny
cmos en Github escribió:En primer lugar gracias por todo el curro que te has metido con esto, se nota que está muy meditado y trabajado :wink:

Como te he comentado por correo hay todavía algunas cosas que no funcionan bien, pero más allá de eso, creo que es un cambio tan profundo en algo tan importante como son las vistas del addon que debería establecerse un consenso para aceptar esto o no. Me gusta mucho que las vistas se adapten al contenido cuando es inequívoco de cuál se trata, y queda muy bien en aquellos canales donde se puede identificar bien si se trata de una película, serie, temporada... Pero cuando no es así, en mi opinión, todo cambia demasiado respecto a como se veía antes, no por la vista que se coloca por defecto, sino porque al no indicarse el contenido como movie, la cantidad de vistas a elegir se reducen muchísimo y se pierden varias que habrá gente que use.

El problema es que con estos cambios los que prefieran el sistema de vistas antiguos se tendrán que "aguantar" porque no hay manera de volver a ellos y no sé hasta qué punto eso es recomendable.
Si, es fundamental que el contentType del item padre este correctamente identificado, pero no solo para las vistas tb para la biblioteca, el menu contextual, las descargas etc...

Otra opcion que estube barajando es que al forzar la vista en lugar de selecionar una vista por cada uno de los viewcontent lo que se hiciera es fijar viewcontent como 'movies' (independientemente del contenido) y la vista como 'thumbnail' que viene a ser lo q se hacia hasta ahora si no se usaba viewmode. O incluso cambiar el setting de un booleano a una lista: No forzar, Siempre Miniaturas, Segun mis preferencias (o algo asi, no se si me explico)

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 17 Dic 2016, 14:59
por Cmos
super_berny escribió:Si, es fundamental que el contentType del item padre este correctamente identificado, pero no solo para las vistas tb para la biblioteca, el menu contextual, las descargas etc...
Entonces te refieres a que, poniendo el ejemplo de gnula que te comenté, si la "ruta" que sigue el .py es mainlist-peliculas-findvideos, para que los items que se listan en peliculas aparezcan con el viewmode correcto, el item que tiene que tener el contentType fijado como "movie" es el que se crea en mainlist, no? Pues es que entonces me parece todavía más lioso, ahora no solo hay que tener en cuenta el contentType del item del método en el que "estás", sino también del anterior...esto lo cumplen dos canales y medio xD Soy yo que lo tengo reciente porque lo estoy probando y pillo a medias la diferencia entre viewmode, viewcontent, contentType y cómo afecta a las vistas...

Entonces también en gnula aunque el item que se crea en mainlist tiene como viewmode "movie", no cambiaría nada, no? Como no tiene contentType el viewmode se ignora...al menos eso es lo que pasa en las pruebas que he hecho.
super_berny escribió:Otra opcion que estube barajando es que al forzar la vista en lugar de selecionar una vista por cada uno de los viewcontent lo que se hiciera es fijar viewcontent como 'movies' (independientemente del contenido) y la vista como 'thumbnail' que viene a ser lo q se hacia hasta ahora si no se usaba viewmode. O incluso cambiar el setting de un booleano a una lista: No forzar, Siempre Miniaturas, Segun mis preferencias (o algo asi, no se si me explico)
Esa opción me parecería mucho más adecuada, así cada cual puede elegir si seguir con las vistas como hasta ahora o utilizar el nuevo sistema.

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 17 Dic 2016, 17:06
por super_berny
Cmos escribió:Soy yo que lo tengo reciente porque lo estoy probando y pillo a medias la diferencia entre viewmode, viewcontent, contentType y cómo afecta a las vistas...
:lol: :lol: :lol:
Ya he dicho en alguna ocasion q el concepto es un poco lioso, pero fijate: en cada item ponemos los parametros necesarios para el siguiente paso: la accion que se ejecutar, la url q se abrira, el fanart q se utilizara en la proxima ventana, etc... Es decir SIEMPRE ponemos en el item lo necesario para crear la siguiente 'ventana'. En este caso tb
Cmos escribió:Esa opción me parecería mucho más adecuada, así cada cual puede elegir si seguir con las vistas como hasta ahora o utilizar el nuevo sistema.
A ver si mañana tengo un rato y le doy otra vuelta a esto

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 17 Dic 2016, 20:01
por Lortropic
Han mergeado el commit y este ignora que no tengo activado el "Forzar vista". Ahora me sale todo diferente (y he ido a un canal adaptado y veo que está forzando las vistas).

Tal vez en vez de "beta" se le tendría que llamar alpha. No paran de entrar novedades, cuando la beta debería de ser para tener un producto listo, que se prueba para depurar bugs. Pero cuando se tiene ya una versión que hasta podría ser RC1.... aparece algo nuevo. (aunque bueno, es cierto que, excepto los zip's sacados por seitan, oficialmente no se ha sacado una beta, simplemente la hemos pillado del repo).

Tal vez se debería llevar 4.2 a master y dejar ya develop para que se le pongan funcionalidades nuevas (como esto) y que los commits pequeños de fixes para 4.2 se hagan sobre master.

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 18 Dic 2016, 12:41
por Lortropic
El problema principal está aquí:
Antes la vista solo se establecía si estaba configurado forceview (algo normal: solo tocar la vista si se quiere forzar, si no, deja a Kodi)

Código: Seleccionar todo

-    if config.get_setting("forceview") == "true":
 -        if parent_item.viewmode == "list":
 -            xbmc.executebuiltin("Container.SetViewMode(50)")
 -        elif parent_item.viewmode == "movie_with_plot":
 -            xbmc.executebuiltin("Container.SetViewMode(503)")
 -        elif parent_item.viewmode == "movie":
 -            xbmc.executebuiltin("Container.SetViewMode(500)")
Sin embargo, ahora se establece siempre. El forceview se usa en otro sitio, pero sigue retornando valores de cosas y se hace el SetViewMode siempre. Eso hace que siempre se reescriba las vistas. Simplemente entrando al addon ya te cambia la vista.

Por ahora me he tenido que cartar la config de Kodi (por sueter lo he probado en el PC que solo uso para probar estas cosas, no lo uso con Kodi) y poner un apaño que proteja el setviewmode.

Código: Seleccionar todo

    # Fijar la vista:
    if config.get_setting("forceview") == "true":
        viewmode_id = get_viewmode_id(parent_item)
        xbmc.executebuiltin("Container.SetViewMode(%s)" % viewmode_id)
Ahora bien, entiendo que esto tampoco debería estar así ya que si forceview == true, dentro del get_viewmode_id siempre se hace el "if", no el else.

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 18 Dic 2016, 17:36
por super_berny
super_berny escribió:A ver si mañana tengo un rato y le doy otra vuelta a esto
Quizas fui demasiado agresivo con esto, espero q ahora os guste mas.
He descartado esto:
super_berny escribió:‘user_files’, ‘user_movies’, ‘user_tvshows’, ‘user_seasons’ y ‘user_episodes’ con los identificadores para las vistas forzadas por el usuario para cada viewcontent.
Ahora si forceview = False fijamos viewcontent como 'movies' (excepto si estamos o venimos de channelselector que sera 'files') e ignoramos viewmode, mientras q si forceview = True viewcontent y viewmode se fijan segun lo que indique el item padre.

Os lo paso por aqui antes de subirlo a Github, por si quereis proponer algun cambio mas:
https://raw.githubusercontent.com/super ... rmtools.py

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 24 Dic 2016, 10:55
por Lortropic
A ver, que ahora le estoy dando un vistazo.

Si no entiendo mal:
viewcontent = El tipo de contenido que tendrá. Kodi en función del tipo de contenido permite poner unas vistas o otras, se ve claramente en la biblioteca, además, observo que esto usa por defecto las vistas que tengo en la biblioteca.

Podemos poner como tipo de contneido:
  • files
  • movies
  • tvshows
  • seasons
  • episodes
Si yo pongo (solo) viewcontent = files
Imagen

Si pongo movies:
Imagen

Si pongo seasons:
Imagen


viewmode = Esto fuerza tipos de vistas hadcoded ignorando el viewcontent (pero que tiene que ser una vista del viewcontent indicado)
  • list
  • thumbnails
  • movie_with_plot
Así aquí tengo la de "season" que arriba se ve, pero yo ahora voy y le endiño un "viewmode = thumbnails", entonces se fuerza esta vista:
Imagen


Me gusta la idea pero creo que no me gusta como está planteada ahora mismo del todo. Concretamente me chirría el viewmode. Fuerza demasiado la vista, no se ve muy configurable, o al menos los strings usados son poco "generales", el caso más claro es "thumbnails".

En un primer vistazo da la impresión de que solo con el viewcontent el resultado es más satisfactorio (¿tal vez permitir definir vistas sobrescritas para pelisalacarta en función del viewcontent, por si no quieren usar las mismas de la biblioteca?). Sin embargo, entiendo que no todos los lugares tienen la misma información para mostrar la misma vista (tal vez la de series, o episodios) igual de bien, aquí un claro ejemplo:
Imagen

Tal vez se podría definir "listado de series con info" "listado de series sin info" "Listado de temporadas" "listado de películas con info" "listado de películas sin info".... que fueran configurables:

Es decir, no se establece un "aquí quiero poner thumbnails" si no "aquí se va a mostrar tvshows que tendrán info (¿viewcontent = "tvshows", viewmode="with_info" / "without_info"?)

setContent(item.viewcontent)
setView(videwmode + "_" + viewcontent) (ej vista = with_info_tvshows)

Y en el menú de config poderlo configurar:
- Configuración de vistas:
· Listado de series
* Con info
* Sin info
· Listado de episodios
· Listado de películas
* Con info
* Sin info

Re: Kodi, skins y vistas disponibles: viewcontent y viewmode

Publicado: 24 Dic 2016, 15:56
por super_berny
Lortropic escribió:viewcontent = El tipo de contenido que tendrá. Kodi en función del tipo de contenido permite poner unas vistas o otras
Correcto
Lortropic escribió:además, observo que esto usa por defecto las vistas que tengo en la biblioteca.
Supongo q casualidad o q ambos tenemos las mismas preferencias :lol: :lol:
Lortropic escribió:Si yo pongo (solo) viewcontent...
Y tenemos activada la opcion de Forzar vistas en preferencias, no lo olvidemos... lo que pasa es q la vista se calcula en funcion del viewcontent y el skin q tengamos:

Código: Seleccionar todo

viewName = "default_" + parent_item.viewcontent
Lortropic escribió:viewmode = Esto fuerza tipos de vistas hadcoded ignorando el viewcontent (pero que tiene que ser una vista del viewcontent indicado)
Fuerza la vista, si, pero realmente no ignora viewcontent. Para probarlo prueba de cambiar viewcontent y mantener por ejemplo viewmode = thumbnails. Veras q la vista es parecida, pero no igual.
Lortropic escribió:Me gusta la idea pero creo que no me gusta como está planteada ahora mismo del todo. Concretamente me chirría el viewmode.
Ok, como todo es discutible. Pero vamos a ver primero, si te parece, de donde venimos:
  • Si Forzar vistas esta desactivado (tanto antes como ahora), El tipo de vistas viewcontent se fija siempre como 'movies' (excepto si estamos o venimos del channelselector) y la vista por defecto 'list' (aunq kodi cachea las preferencias y si entras en una ventana y cambias la vista, la proxima vez q entres mostrara esa vista). Esto da lugar a q por ejemplo, aunque estes visualizando una serie no puedas poner nunca (me refiero manualmente mediante el menu lateral izquierdo) la vista de tu ultima captura con la informacion correcta aunq el item la tenga (ya q setContet = 'movies'). Otro ejemplo son vistas poco afortunadas, por ejemplo vista Fanart cuando el contenido es un listado (siento no poder poner capturas)
  • En versiones anteriores si Forzar vistas estaba activado, el tipo de vistas continuaba siendo 'movies' (excepto si estamos o venimos del channelselector), pero el creador del canal podia forzar a q en lugar de la vista por defecto 'list' se muestre siempre una vista determinada (viewmode) al entrar en un item (incluso obviando el cacheo de kodi q comente antes). Estas vistas eran 3: list, movie_with_plot y movie (q en esta version he remplazado por thumbnails q me parece mas explicita, aunq se reconoce 'movie' por retrocompatibilidad). Claro q esto solo funcionaba en el skin confluence.
  • En esta version, mi propuesta, es q si Forzar vistas esta activado, se fija el tipo de vista como bien has dicho con viewcontent. Esto soluciona el problema de q haya vistas q no se adapten al contenido o q no podamos seleccionar una determinada vista por q esta mal fijado el contenido. Ahora bien, ¿como fijamos el contenido? pues podemos forzarlo mediante el atributo viewcontent indicando de q tipo sera la vista q se abra al seleccionar este item o podemos clonarlo como todos los atributos del Item o bien podemos dejar q el plugin lo intente adivinar segun el contentType q tenga fijado el item en cuestion. Pero esto tiene sus limitaciones, por ejemplo, si el contentType = 'tvshow', el plugin no puede saber si la ventana q se abrira seran episodios o temporadas (por defecto se fija como episodios).
    Una vez fijado el tipo de vistas en funcion del contenido hay q decidir q vista mostramos entre todas las disponibles. ¿por q mostrar por defecto siempre 'list' como haciamos antes? Mostraremos por defecto una vista q personalmente he considerado q se adapta mejor al tipo de contenido, y para ello el codigo tiene en cuenta el skin q estamos usando, ya q no todos tiene las mismas vistas.
    Pero mis gustos personales no tiene por q coincidir con los del creador del canal (q antes podia forzar la vista), asi q mantenemos tb esa opcion permitiendo a los creadores continuar forzando las mismos 3 vistas q antes (pero ahora funcionara tb en los skins q se vayan incluyendo en la variable/archivo viewmode_json).
Lortropic escribió:Tal vez se podría definir ...
Podemos definir todas las vistas q querais como viewmode, pero debeis tener en cuenta q ha de haber una vista equivalente en todos los skins para asociarla a ese nombre.
Por otra parte "listado de series con info" y "listado de películas con info" es la 'misma' vista pero de diferentes viewcontent y se llama viewmode= 'movie_with_plot' (podemos rebautizarla como si quereis como he hecho con movie y thumbnails, pero no es necesairo crear una 'thshow_with_plot')
Lortropic escribió:Y en el menú de config poderlo configurar...
Antes dije q mi gusto personal no tenia por q coincidir con los creadores, tampoco con los usuarios. Asi q la idea es , cuando sepa como hacerlo, q el usuario pueda fijar sus valores preferidos en cada uno de los 'default_xxxx' para de este modo se muestre SU vista preferida para cada tipo de contenido por defecto (si no existe viewmode)

Y despues de todo este rollo: FELIZ NAVIDAD A TODOS!!!