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"
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.