Skip to content

Funzionamento

mac12m99 edited this page May 30, 2021 · 4 revisions

Prima di leggere questa sezione dai un'occhiata alla sezione sviluppo add-on ufficiale di kodi.

Come avrete letto dalla wiki di kodi, un addon viene chiamato ogni qualvolta si clicca un item in una sua sezione (o viene richiamato esternamente), effettua delle operazioni ed eventualmente ritorna altri item.

Ad esempio, quando si naviga all'interno delle varie sezioni, ogni volta che si clicca, l'addon viene chiamato e termina la sua esecuzione mostrando gli item sottostanti.

Per fare in modo che l'addon sappia cosa deve fare, ogni item ha un URL fatto in questo modo:
plugin://plugin.video.nome/?parametri
Questa sezione spiega il processo di serializzazione usato da KoD per salvare nei suoi item tutte le info necessarie, per poi ricostruirle quando quegli item vengono selezionati (deserializzazione).

Le logiche utilizzate sono state ereditate dall'addon Alfa, che a sua volte le ha ereditate dal defunto pelisalacarta. Per quanto vecchie sono ancora molto efficaci.

La classe Item

Gli oggetti di questa classe rappresentano i singoli item presenti in tutte le sezioni, ovvero i ListItem di kodi.
Per poter passare tutti i parametri necessari, gli oggetti di questo tipo vengono convertiti in URL e poi ri-convertiti in oggetti quando l'utente li seleziona (serializzazione e deserializzazione, come indicato prima).
Oltre a tutti i parametri "fissi" che vengono letti ed interpretati da kodi (title, thumbnail ecc..) è possibile inserire altri parametri a piacere, l'importante è che siano convertibili in JSON(poi vedrete perchè)

it = Item(title="titolo mostrato in kodi", thumbnail="URL della thumbnail che kodi visualizzerà")
it.parametro = ['1', '2']  # assegno un parametro arbirario, posso usare una lista perchè convertibile in JSON 

Creazione e lettura URL

Gli oggetti di tipo Item, per essere rappresentati sottoforma di URL vengono prima convertiti in JSON e poi in base64 (in modo che diventi un URL valido), esempio:

plugin://plugin.video.kod/?ewogICAgImNoYW5uZWwiOiAic2VhcmNoIiwKICAgICJhY3Rpb24iOiAibmV3X3NlYXJjaCIsCiAgICAibW9kZSI6ICJhbGwiCn0=

Se decodificate la parte dopo il ? vedrete che si tratta di questo JSON

{
    "channel": "search",
    "action": "new_search",
    "mode": "all"
}

Lanciare comandi specifici

Ciò che dice a KoD quale comando eseguire sono i parametri "channel" e "action": channel indica di quale canale si tratta (ovvero file .py in channels/ on in specials/) e "action" la funzione da chiamare. Per tutte le funzioni "extra" basta usare action, siccome non si riferiscono a nessun canale in particolare.

Il modulo che si occupa di decidere cosa fare in base all'oggetto item selezionato è platformcode.launcher.

Oltre a lanciare la funzione selezionata gli passa anche l'oggetto Item, cosicchè possa ottenere ulteriori istruzioni, se presenti. Nell'esempio visto prima verrà chiamata la funzione new_search del modulo specials.search, il quale otterrà come parametro l'item e da esso ricaverà "mode" (che gli indica che tipo di ricerca effettuare).

Gli infoLabels

Ogni oggetto Item ha al suo interno un'altro oggetto chiamato infoLabels, che estende dict e contiene le informazioni che le skin leggono

Queste info possono essere inserite manualmente accedendo all'oggetto ed utilizzandolo come dict

item.infoLabels["title"] = "TITOLO"

Tipicamente viene compilato dagli scraper dei canali con le info presenti sul sito e poi sovrascritto dallo scraper di TMDb nel caso venga trovata una corrispondenza.

Per semplicità sono state create proprietà speciali di Item che vanno a modificare direttamente gli infoLabels

"contentTitle", "contentPlot", "contentSerieName", "show", "contentType", "contentEpisodeTitle",
"contentSeason", "contentEpisodeNumber", "contentThumbnail", "plot", "duration", "contentQuality",
"quality"