07.8.2020, 21:28
Spouštění traileru z widgetu
Snažím se, aby ovládání Kodi bylo pokud možno konzistentní ve všech svých částech a funkcích. Samozřejmě to nejde vždy, ale každé řešení, kterým se k tomu přiblížím, považuji za úspěch. Už dlouho používám addon typu script, PlayTrailer (addon id context.trailer), který do kontextového menu přidává možnost spuštění traileru. Tento addon najdete v repozitáři Kodi Add-on Repositories. Funguje dobře pro filmy, ale... To "ale" ale není nijak kritické, jde o to, že nefunguje pro seriály a také, že se možnost spuštění traileru neobjeví v okažiku, pokud kontetxové menu otevřete z položky widgetu. Obojí lze jednoduše vyřešit. Stačí v podmínce zobrazení položky menu v addon.xml tohoto addon odstranit podmínku na test typu položky. Tedy místo:
mezi tagy <visible> ponechat pouze:
Ale ani teď to není dokonalé. Nedokonalost se projeví v případě, budete-li si chtít spustit trailer u seznamu nebo widgetu z SCC. Díky specifickému výkladu pravidel a zásad Kodi autoři toho jinak skvělého díla s položkou, do které se ukládá adresa traileru, nepracují tak, jak zvyklosti a autoři skinů počítají. Píši o tom zde. Oprava je snadná. Již jednou výše upravenou podmínku doplníme o další test:
Sice stále ještě k dokonalosti chybí krůček, a tím je, že se po spuštění traileru z SCC přes kontext menu se neobjevuje jeho správný popis, ale to plánuji časem také opravit.
Podobně, jako v kontex menu, je pro potřeby 100% správného chování v tomto případě upravit i skin. V Estuary (a prakticky ve všech dalších skinech) se položka Trailer testuje a pokud je prázdná, tak se nabídka na spuštění traileru v příslušném místě neobjeví. Ne tak, pokud jde o SCC. Tam se nabídka na spuštění traileru objeví vždy, ale trailer se spustí pouze tehdy, pokud v obsahu položky není výše testovaný řetezec. Což znamená, že v databázi SCC odkaz na trailer není. Je tedy třeba podobnou podmínku doplnit i do skinu v těch definičních souborech, ve kterých je spuštění traileru definováno.
U Estuary je to na Info stránce (tlačítko Info na ovladdači, položka Info v kontext menu nebo klávesa i) filmu nebo seriálu, tedy v definičním souboru DialogVideoInfo.xml. Původní sekvence definující zobrazení možnosti spuštění traileru vypadá takto:
a je tedy třeba ji upravit nějak takto (je to podobné jako výše u definice kontext menu, tedy test na substring "video_url=None"):
To ale dnes není všechno. Informace o tom, zda film má k dispozici trailer může být zajímavá. Zejména u přehršle novinek ve widgetech, aby měl uživatel rychle přeheld, u kterého titulu si trailer může pustit. Doplnil jsme tedy zobrazení příznaku (badge) do posteru jak u filmů, tak seriálů. Úprava je rozdělená na dvě části. V první se definuje include, které zobrazí vlastní badge, v druhé se toto include použije v příslušeném místě.
Definici include, které jsem pojmenoval TrailerBadge, je vhodné ideálně umístit do souboru includes.xml.
Obrázek vlastního badge jsem si vytvořil a místil do vytvořeného podadresáře badges v adrsáři extras skinu, tedy úplná adresa ve special protokolu je special://skin/extras/badges/. Obrázek přikládám, je ho možné stáhnout.
Volání výše uvedného include je pak třeba umístit do View_54_InfoWall.xml, případně dalších, pokud chcete badge s informací vidět i v jiných náhledech. Naopak, kromě widgetů teď uvidíte badge ve všech náhledech, které zobrazení posterů typu "zeď" používají. Kód:
umístěte do include InfoWallMovieLayout, například do tohoto místa (umístění není úplně kritické):
Pozn. Ještě jsem zobrazení o tom, že vybraný titul má trailer, doplnil do místa, které zobrazuje parametry videa daného titulu. Je to vidět na přiložených screenshotech. Tohle už tu popisovat nebudu, zveřejním to až tehdy, pokud někdo bude mít zájem.
Na závěr několik screenshotů k tématu:
a ještě tradiční video s ukázkou:
Snažím se, aby ovládání Kodi bylo pokud možno konzistentní ve všech svých částech a funkcích. Samozřejmě to nejde vždy, ale každé řešení, kterým se k tomu přiblížím, považuji za úspěch. Už dlouho používám addon typu script, PlayTrailer (addon id context.trailer), který do kontextového menu přidává možnost spuštění traileru. Tento addon najdete v repozitáři Kodi Add-on Repositories. Funguje dobře pro filmy, ale... To "ale" ale není nijak kritické, jde o to, že nefunguje pro seriály a také, že se možnost spuštění traileru neobjeví v okažiku, pokud kontetxové menu otevřete z položky widgetu. Obojí lze jednoduše vyřešit. Stačí v podmínce zobrazení položky menu v addon.xml tohoto addon odstranit podmínku na test typu položky. Tedy místo:
Kód:
<visible>String.IsEqual(ListItem.dbtype,movie) + !String.IsEmpty(ListItem.Trailer)</visible>
Kód:
<visible>!String.IsEmpty(ListItem.Trailer)</visible>
Kód:
<visible>!String.IsEmpty(ListItem.Trailer) + !String.Contains(ListItem.Trailer,video_url=None)</visible>
Podobně, jako v kontex menu, je pro potřeby 100% správného chování v tomto případě upravit i skin. V Estuary (a prakticky ve všech dalších skinech) se položka Trailer testuje a pokud je prázdná, tak se nabídka na spuštění traileru v příslušném místě neobjeví. Ne tak, pokud jde o SCC. Tam se nabídka na spuštění traileru objeví vždy, ale trailer se spustí pouze tehdy, pokud v obsahu položky není výše testovaný řetezec. Což znamená, že v databázi SCC odkaz na trailer není. Je tedy třeba podobnou podmínku doplnit i do skinu v těch definičních souborech, ve kterých je spuštění traileru definováno.
U Estuary je to na Info stránce (tlačítko Info na ovladdači, položka Info v kontext menu nebo klávesa i) filmu nebo seriálu, tedy v definičním souboru DialogVideoInfo.xml. Původní sekvence definující zobrazení možnosti spuštění traileru vypadá takto:
Kód:
<include content="InfoDialogButton">
<param name="id" value="11" />
<param name="icon" value="icons/infodialogs/trailer.png" />
<param name="label" value="$LOCALIZE[20410]" />
<param name="visible" value="!String.IsEmpty(ListItem.Trailer) + ![String.StartsWith(Container.FolderPath,plugin://) + String.Contains(Container.FolderPath,trailer)]" />
</include>
Kód:
<include content="InfoDialogButton">
<param name="id" value="11" />
<param name="icon" value="icons/infodialogs/trailer.png" />
<param name="label" value="$LOCALIZE[20410]" />
<param name="visible" value="!String.IsEmpty(ListItem.Trailer) + !String.Contains(ListItem.Trailer,video_url=None) + ![String.StartsWith(Container.FolderPath,plugin://) + String.Contains(Container.FolderPath,trailer)]" />
</include>
To ale dnes není všechno. Informace o tom, zda film má k dispozici trailer může být zajímavá. Zejména u přehršle novinek ve widgetech, aby měl uživatel rychle přeheld, u kterého titulu si trailer může pustit. Doplnil jsme tedy zobrazení příznaku (badge) do posteru jak u filmů, tak seriálů. Úprava je rozdělená na dvě části. V první se definuje include, které zobrazí vlastní badge, v druhé se toto include použije v příslušeném místě.
Definici include, které jsem pojmenoval TrailerBadge, je vhodné ideálně umístit do souboru includes.xml.
Kód:
<include name="TrailerBadge"> <!-- EASY+ -->
<definition>
<control type="image">
<left>35</left>
<top>10</top>
<width>60</width>
<height>60</height>
<aspectratio>keep</aspectratio>
<animation effect="fade" time="0" condition="$PARAM[animation]">VisibleChange</animation>
<texture>special://skin/extras/badges/trailer.png</texture>
<visible>!String.IsEmpty(ListItem.Trailer) + !String.Contains(ListItem.Trailer,video_url=None)</visible>
</control>
</definition>
</include>
Volání výše uvedného include je pak třeba umístit do View_54_InfoWall.xml, případně dalších, pokud chcete badge s informací vidět i v jiných náhledech. Naopak, kromě widgetů teď uvidíte badge ve všech náhledech, které zobrazení posterů typu "zeď" používají. Kód:
Kód:
<control type="group">
<left>0</left>
<top>0</top>
<include>TrailerBadge</include>
</control>
Kód:
<control type="progress">
<left>35</left>
<top>350</top>
<width>250</width>
<height>1</height>
<texturebg></texturebg>
<midtexture colordiffuse="button_focus" border="3">progress/texturebg_alt_white.png</midtexture>
<info>ListItem.PercentPlayed</info>
<visible>!Integer.IsEqual(ListItem.PercentPlayed,0)</visible>
</control>
<control type="group">
<left>0</left>
<top>0</top>
<include>TrailerBadge</include>
</control>
Pozn. Ještě jsem zobrazení o tom, že vybraný titul má trailer, doplnil do místa, které zobrazuje parametry videa daného titulu. Je to vidět na přiložených screenshotech. Tohle už tu popisovat nebudu, zveřejním to až tehdy, pokud někdo bude mít zájem.
Na závěr několik screenshotů k tématu:
a ještě tradiční video s ukázkou: