Página 2 de 6

Re: Item

Publicado: 22 Mar 2015, 07:35
por supercopito
Yo en mi caso pienso y coincido con robalo y sobre todo en la versión html de que sirve los fanart y demás extras contra más sencillo vayan las cosas mejor, porque si alguien quiere después mejorar algo que sepa como meterle mano, y respecto a los servidores online también coincido con él plenamente en el canal newpct1 sobre todo para ver cosas en hd 720p porque 1080p no he visto nada y lo mismo pasa con el sonido ac3 tiene que ser o bien torrent o bien servidores de descarga, yo en mi paso puede hablar de esto porque si he tenido algunas veces realdebrid o alldebrid para pruebas y hacen eso esos servidores, respecto a lo del torrent para versión html es o era una gran idea que coincidió robalo conmigo respecto a libtorrent. Para que plugins tan complicados que uno no sabe hacer nada con ellos por lo menos en mi parecer.

Re: Item

Publicado: 30 Mar 2015, 07:56
por super_berny
Bueno aun nos quedan algunos campos por definir, ¿nadie mas sabe para q sirven los q faltan?

Por otro lado he estado viendo los canales multicolor del compañero nemo1978, y me preguntaba ... si los items representan elementos de un menu ¿no seria coherente añadirles un campo COLOR y que fuera el launcher el responsable de "pintar" el item al mostrarlo?

Re: Item

Publicado: 30 Mar 2015, 12:17
por robalo
En referencia al color, si lo piensas bien, no hay porqué añadir code extra al launcher.

Lo que si se debe hacer, no sólo para los colores, también para todos los datos extras que nos gusta poner al título, es reservar el scrapedtitle para show.

Para los que nos gusta los colores tambén deberiamos tener el detalle de pensar en otras plataformas, como html, para que se vierán los colores y no [COLOR .....]... con algo parecido a esto:

Código: Seleccionar todo

if (config.get_platform().startswith("mediaserver"):
    title = bbcode_kodi2html(text)
[......]
def bbcode_kodi2html(text):

    text = re.sub(r'\[COLOR\s([^\]]+)\]',
                  r'<span style="color: \1">',
                  text)
    text = text.replace('[/COLOR]','</span>')
    text = text.replace('[CR]',' <br>')
    text = text.replace('[B]',' <b>')
    text = text.replace('[/B]','</b>')
    text = text.replace('"color: yellow"','"color: gold"')
    text = text.replace('"color: white"','"color: auto"')

    return text

Re: Item

Publicado: 30 Mar 2015, 14:20
por divadr
No acabo de entender que quereis hacer con los colores... Pintar algún ítem con un color distinto o mas bien algunos datos extra del titulo?

Esque si es para los datos extra (Calidad, duración, etc) yo veo mas practico poner esos datos en capos para ellos, y luego cada platadorma en función de la configuración de usuario, se encargue de mostrarlo, y añadirle los colores que el usuario haya configurado.

En cambio si lo que pretendes es que todo el ítem lo pinte de un color, yo veo mas practico añadir un campo color, y que cada launcher lo interprete, y si no soporta esa función, pues lo mostrara del color por defecto, y dejar el título para lo que es...

Pensad que una cosa es el ítem.title, y otra el texto que se pinta en pantalla, no tienen porque coincidir.


Yo pienso lo siguiente:

ítem.title: el titulo de la película (que no se cambie para nada y que solo contenga el titulo)

ítem.fulltitle: en caso de que quieras mostrar otra cosa que no sea el titulo (por ejemplo "ver en [servidorx]") si el campo ítem.fulltitle contiene algo, significa que el canal quiere que se pinte el texto de una determinada manera y en ese caso el launcher pinta ese texto, pero el ítem.title sigue intacto. y cuando le demos a descargar por ejemplo, el titulo que saldrá será el de la peli y no "ver en [servidorx]" ...

Si no se especifica nada en el ítem.fulltitle, el launcher pinta en función de la configuración, algo asi: "Titulo de la película" + "[DVD-RIP]" + "(1:10:25)" y aquí seria donde se añaden los colores, para cada información un color y el usuario podría elegirlos en la configuración.

pero todo la cuestión de colores e información extra estaría en el launcher, y si el launcher lo soporta lo mostrará... sino pues mostrara el title o fulltitle tal cual y ya esta.


No hay que olvidarse que hay mas plataformas que kodi y HTML... y si las cosas comunes no se hacen pensado mas en global, luego nos complicamos mucho la vida...

Re: Item

Publicado: 30 Mar 2015, 14:51
por robalo
A eso voy, en mi launcher del html tengo:

Código: Seleccionar todo

        respuesta = bbcode_kodi2html( respuesta.replace("{$itemlist}",itemlist_string) )

    except:
        import sys
        for line in sys.exc_info():
            logger.error( "%s" % line )

    return respuesta

def bbcode_kodi2html(text):

    import re
    text = re.sub(r'\[COLOR\s([^\]]+)\]',
                  r'<span style="color: \1">',
                  text)
    text = text.replace('[/COLOR]','</span>')
    text = text.replace('[CR]',' <br>')
    text = text.replace('[B]',' <b>')
    text = text.replace('[/B]','</b>')
    text = text.replace('"color: yellow"','"color: gold"')
    text = text.replace('"color: white"','"color: auto"')
    return text
Pero para el que no lo tiene no cuesta mucho ponerlo en el canal al igual que ocurre con añadir una película a la biblioteca, tampoco cuesta añadir un par de procedimientos para que añada la película con todos los enlaces de servidores y múchísimas cosas más que se hacen.

Demomento a modo perosonal, con los atributos que tiene actualmente la clase Item, voy sobrao y si le quitas unas pocas también.

Yo esperaría a la versión 4 y ver el planteamiento

Re: Item

Publicado: 30 Abr 2015, 20:22
por neno1978
Hola, soy nemo, ;)
Yo personalmente creo al contrario q el master, q no estaría de mas algún atributo q otro para item, aunq tiene toda la razón en lo referente a los item extra y la amplitud q se le puede dar con split, la verdad es q en mis canales q comentabais , aveces siento q se me qedan cortos los atributos y utilizo algunos q no tienen esa función, algo q no me acaba de gustar. Quizás implementar la posibilidad de usar extra1, extra2 , tampoco estaría tan mal. Eso , si , coincidiendo plenamente con el master Robalo, creo q deberíamos esperar a ver la nueva versión .
En lo referente a los colores robalo, con el código q has expuesto; se solucionaría para las otras plataformas?

Re: Item

Publicado: 30 Abr 2015, 22:13
por robalo
Si te refieres a añadirlo en los canales, sí, para html y plex.

Re: Item

Publicado: 22 Nov 2015, 13:39
por SeiTaN
Pues voy a meterme en este charco yo tb...

como la clase Item solo tiene atributos de tipo str, tuve que liar una bastante grande para poder hacer mi filtrado de enlaces por serie.

Código: Seleccionar todo

Item.extra = str(listado_de_filtros) + "##" + nombre_serie + "##" + str(conf_serie_actual)

Cada vez que tenía que tratar con algún tipo de dato tenía que estar dividiendo "extra" en elementos y luego dependiendo del elemento pasarlo a dict y luego para pasarlo el proceso contrario.

Por lo que se me ha ocurrido hacer dos modificaciones en Item.

1) añadir un campo diccionario.

Código: Seleccionar todo

class Item(object):
    channel = ""
    title = ""
    url = ""
    page = ""
    thumbnail = ""
    plot = ""
    duration = ""
    fanart = ""
    folder = ""
    action = ""
    server = "directo"
    extra = ""
    show = ""
    category = ""
    childcount = 0
    language = ""
    type = ""
    context = ""
    subtitle = ""
    totalItems =0
    overlay = None
    password = ""
    fulltitle = ""
    viewmode = "list"
    dictionary = {}
De esta manera no tenemos que estar en plan... "coñe es que me hace falta un campo para hacer tal cosa para un canal", metes dentro lo que te haga falta y ya está.

Esto vendría bien por el tema de navegacion entre menús, ya que "action" es muy genérico y se utiliza entre los metodos de los canales y otras partes del plugin. Y nos provoca el problema ya que es una navegación lineal y no nos permite hacer saltos.

Código: Seleccionar todo

{"navegacion": {"from": "metodo_de_donde_vengo", "to": "metodo_al_que_voy"}}
También se podría añadir la estructura de los menús que se posee pero bueno ya se sabe "sky is the limit" :lol:

2) Implementar un método que permita a través de un diccionario que setee los campos cuyo "key" exista en Item.

Código: Seleccionar todo

    def from_dict(self, dictionary):
        for k, v in dictionary.items():
            setattr(self, k, v)
esto es más por comodidad que por otra cosa, teniendo en cuenta que cuando tratamos con los canales siempre estamos pasando un objeto Item.
si tenemos un diccionario con los datos necesarios, estos se setearian automaticamente y con los campos que no existieran en Item no pasaría nada.


Ejemplos:

Código: Seleccionar todo

def prueba():

    logger.info("--- pruebaaaa")

    # dict constructor con dict literal
    dictionary1 = dict(title="titulo", url="url", idioma="idioma", action="action",
                       dictionary={"cadena1": "mierda", "cadena2": {"idioma": "es",
                                                                    "calidad_no_permitida": ["sd", "hditunes"]}})
    # dict literal
    dictionary2 = {"title": "titulo", "cadena2": {"idioma": "es", "calidad_no_permitida": ["sd", "hditunes"]},
                   "dictionary": {"campo1": "valor1", "campo2": "valor2", "campo3": ["valor3_1", "valor3_2"]}}

    # dict literal con dict literal
    dictionary3 = {"title": "titulo", "cadena2": {"idioma": "es", "calidad_no_permitida": ["sd", "hditunes"]},
                   "dictionary": {"url": "url", "campo2": "valor2", "campo3": ["valor3_1", "valor3_2"]}}

    # dict literal con dict constructor
    dictionary4 = {"title": "titulo", "cadena2": {"idioma": "es", "calidad_no_permitida": ["sd", "hditunes"]},
                   "dictionary": dict(url="url", campo2="valor2", campo3=["valor3_1", "valor3_2"])}

    logger.info("--- pruebaaaa defino el dictionary")

    item1 = Item()
    item1.from_dict(dictionary1)

    item2 = Item()
    item2.from_dict(dictionary2)

    item3 = Item()
    item3.from_dict(dictionary3)

    item4 = Item()
    item4.from_dict(dictionary4)

    logger.info("--- pruebaaaa item1 to string: {0}".format(item1.tostring()))
    logger.info("--- pruebaaaa item2 to string: {0}".format(item2.tostring()))
    logger.info("--- pruebaaaa item3 to string: {0}".format(item3.tostring()))
    logger.info("--- pruebaaaa item4 to string: {0}".format(item4.tostring()))
LOG escribió: 12:56:59 T:8288 NOTICE: --- pruebaaaa
12:56:59 T:8288 NOTICE: --- pruebaaaa defino el dictionary
12:56:59 T:8288 NOTICE: --- pruebaaaa item1 to string: title=[titulo], url=[url], thumbnail=[], action=[action], show=[], category=[], dictionary=[{'cadena1': 'mierda', 'cadena2': {'calidad_no_permitida': ['sd', 'hditunes'], 'idioma': 'es'}}]
12:56:59 T:8288 NOTICE: --- pruebaaaa item2 to string: title=[titulo], url=[], thumbnail=[], action=[], show=[], category=[], dictionary=[{'campo1': 'valor1', 'campo2': 'valor2', 'campo3': ['valor3_1', 'valor3_2']}]
12:56:59 T:8288 NOTICE: --- pruebaaaa item3 to string: title=[titulo], url=[], thumbnail=[], action=[], show=[], category=[], dictionary=[{'url': 'url', 'campo2': 'valor2', 'campo3': ['valor3_1', 'valor3_2']}]
12:56:59 T:8288 NOTICE: --- pruebaaaa item4 to string: title=[titulo], url=[], thumbnail=[], action=[], show=[], category=[], dictionary=[{'url': 'url', 'campo2': 'valor2', 'campo3': ['valor3_1', 'valor3_2']}]
Saludos.

Re: Item

Publicado: 23 Nov 2015, 00:56
por robalo
:lol: :lol: :lol: Que te gusta el trajín

Se que es gusta mucho el tema json pero si se pasa de todo lo que savemos y cuando lees json entiendes array de repente te das cuenta que no necesitas librerías json para hacer lo que hacemos.

Para pasar un array en un atributo tipo string solo se tendría que escribir 'atributo=str(array)' y para recuperarlo 'exec "array = " + item.atributo'

Re: Item

Publicado: 23 Nov 2015, 09:16
por SeiTaN
@robalo no he hablado de JSON en ningún momento para lo de Item, he dicho de usar un dict.
Ves fantasmas xD