10.5.2024, 16:24
Migrace knihovní python metody ListItem.setInfo() na InfoTagVideo - čas běží...
Stále se nám nějak nedaří založit na zdejším fóru sekci věnovanou vývoji doplňků, tak jsme se rozhodl příspěvek umístit sem. Je to ze všech možností ta nejméně kontrovezní. Značná část doplňků, jejichž autory jsou členové české a slovenské komunity Kodi sice v tomto repozitáři nakonec končí, jsou ale i autoři, kteří z nějakého důvodu umísťují své doplňky jinde. O specifických doplňcích, jejichž autoři si pro ně vybudovali vlastní zázemí, tím mám na mysli především SC a SCC, ani nemluvě.
Stručně, o co jde.
V Kodi 20 se objevila nová možnost (python metoda definovaná v xmbc knihovně) pro ukládání specifických parametrů a atributů obsahu do kontejnerů Kodi. Stručně řečeno, původní metoda ListItem.setInfo() byla nahrazena metodou novou, InfoTagVideo. Samozřejmě ne tak, že by původní metioda byla zrušena, ale současně je možné použít obě. Tedy jak tu původní, tak i tu novou. Motivací k tomuto kroku bylo několik, nejvýznamnější snad je ta, že by nová metoda měla přinést vyšší výkon při právě časově nejkritičtějších operací, při kterých se sestavují seznamy (kontejnery). Znáte to asi všichni. Když si v Kodi otevřete nějaký seznam (či se má zobrazit Widget), jehož obsah plní nějaký doplněk typu plugin, může to trvat někdy nepříjemně dlouho. Poměrně zásadní při tom je, jak výkonný HW (CPU, paměťové a diskové operace) máme v systému, na kterém Kodi provozujeme, k dispozici. Hezky je to vidět v případě, kdy porovnáme Kodi běžící na HW platformách Android boxů (*ELEC), kde je výkon zmíněného typu HW přeci jen znatelně nižší, než např. u klasického PC. Ty rozdíly mohou být i násobné. Seznam na PC se např. sestaví (a zobrazí) do 1 vteřiny, ten samý seznam na Android boxu připojeného do stejné sítě, zabere někdy i několikanásobek tohoto času.
V současné době, u verzí 20 a 21, je použití staré metody, tedy ListItem.setInfo(), stále ještě tolerováno. Vidět to můžete v logu Kodi, kde se každé použítí této metody projeví varovnou (warning) hláškou:
Nehledě na to, že i opakovaný výskyt této hlášky nějaký čas a výkon zabere, může to, při případné analýze logu, působit rušivě a pro neznalé uživatele to může být i matoucí.
Poučme se z historie!
Někdo možná namítne, že to zas takový problém není, což může být i pravda, a není to tedy nutné řešit hned, nicméně otázkou je, co se stane, až ona toleance k používání staré metody skončí. Všichni si podobné případy z historie Kodi pamatujeme a jistě si i pamatujeme, jak to nakonec dopadlo. S příchodem major verze, ve které s dostatečným předstihem avizovaná změna a s ní spojená tolerance skončila, nastal chaos. Neupravené doplňky, ačkoliv na jejich úpravu měli autoři čas většinou přes dvě major verze Kodi, přestaly fungovat, uživatelé se bouřili, nadávali, odmítali přejít na novou verzi, protože, dle jejich názoru, "byla plná bugů".
Co tedy s tím?
Zajímalo mne, kdy v tomto případě skončí tolerance na používání metody ListItem.setInfo(). Poslal jsme pro to dotaz do fóra Kodi.tv, ale zatím jsem se jendoznačné odpovědi nedočkal. Máme tedy minimálně čas po celé trvání verze 21. Jestli se ona tolerance přehoupne i do verze 22 se teď s jistotou říci nedá. Jsme zatím ve velmi rané fázi práce na verzi 22 a stát se může cokoliv.
Padne možná otázka, proč tedy o tom píši? Z jednoho jednoduchého důvodu a to, aby se autoři zamysleli, a pokud plánují nějakou zásadní změnu ve svých doplňcích, tak zvážili, jestli není čas starou metodu opustit a doplňky přepsat s použitím té nové. Tady by ale měla zaznít jedna ne příliš dobrá zpráva, Změna metody se v kódu projeví poměrně zásadně a podle názoru některých opravdu zkušených python programátorů a autorů doplňků, je jen velmi obtížné napsat kód, který se bude sám, podle verze Kodi, adaptovat na použití staré nebo nové metody. Vedou se o tom diskuse a padají návrhy na řešení, které je možné vidět v v20 - ListItem.setInfo() to InfoTagVideo migration discussion. Doporučuji autorům, pokud ho už neznají, si téma přečíst. Je zajímavé, že autor doplňku SC se této diskuse účastní, takže se změnou pravděpodobně počítá. U hlavního autora SCC si tím nejsme tak jistý. Filosofie SCC doplňku je taková, že je psaný "multiverzově", takže je schopný se, počínaje Kodi verzí 17, na hostitelský systém a jeho knihovny, omezení a pravidla adaptovat. To by v tomto případě, jak vyplývá z odkazovamé diskuze, mohl být oříšek. Na druhou stranu způsob, jaký je naporgramován SCC je minimálně "o ligu výše" než je to u SC, takže bych případnou adaptaci na novou metodu zas tak nerealisticky neviděl.
Já sám jsem se zatím několika doplňky, které jsme napsal a používám, z pohledu této problematiky nezabýval, ale brzy se na to chystám. Plánuji je také umístit do repozitáře a chtěl bych, aby už, ať už úpravu provedu jakkoliv, odpovídaly aktuálním pravidlům a zásadám Kodi.
Závěrem.
V té souvislosti apeluji na správce repozitáře @wombat: a možná taky na @XBMC-Kodi, aby uvedenou problematiku také sledovali. Je možné (a podle mne dost pravděpodobné), že pro některé autory bude lepší variantou přepsat celý jejich doplněk pro verzi používající pouze novou metodu a pak bude potřeba vytvořit i verzi repozitáře Kodi 21, která bude originální (ne tak, jako je to pro Kodi 20, která pouze odkazuje do verze 19) a ve které budou umístěny doplňky používající již jen novou metodu.
Ostatně, když už jsme u toho doporučení pro @wombat:... Myslím si, a nejsme sám, že by mělo být na místě tu verzi repozitáře pro Kodi 21 dořešit hned a to ať už jakkoliv! Řada uživatelů je zmatena a když vidí v popisu repozitáře, že existují verze 18, 19 a 20, a tak pochopitelně hledají i tu pro verzi 21. Zbytečně se to pak komplikuje.
Stále se nám nějak nedaří založit na zdejším fóru sekci věnovanou vývoji doplňků, tak jsme se rozhodl příspěvek umístit sem. Je to ze všech možností ta nejméně kontrovezní. Značná část doplňků, jejichž autory jsou členové české a slovenské komunity Kodi sice v tomto repozitáři nakonec končí, jsou ale i autoři, kteří z nějakého důvodu umísťují své doplňky jinde. O specifických doplňcích, jejichž autoři si pro ně vybudovali vlastní zázemí, tím mám na mysli především SC a SCC, ani nemluvě.
Stručně, o co jde.
V Kodi 20 se objevila nová možnost (python metoda definovaná v xmbc knihovně) pro ukládání specifických parametrů a atributů obsahu do kontejnerů Kodi. Stručně řečeno, původní metoda ListItem.setInfo() byla nahrazena metodou novou, InfoTagVideo. Samozřejmě ne tak, že by původní metioda byla zrušena, ale současně je možné použít obě. Tedy jak tu původní, tak i tu novou. Motivací k tomuto kroku bylo několik, nejvýznamnější snad je ta, že by nová metoda měla přinést vyšší výkon při právě časově nejkritičtějších operací, při kterých se sestavují seznamy (kontejnery). Znáte to asi všichni. Když si v Kodi otevřete nějaký seznam (či se má zobrazit Widget), jehož obsah plní nějaký doplněk typu plugin, může to trvat někdy nepříjemně dlouho. Poměrně zásadní při tom je, jak výkonný HW (CPU, paměťové a diskové operace) máme v systému, na kterém Kodi provozujeme, k dispozici. Hezky je to vidět v případě, kdy porovnáme Kodi běžící na HW platformách Android boxů (*ELEC), kde je výkon zmíněného typu HW přeci jen znatelně nižší, než např. u klasického PC. Ty rozdíly mohou být i násobné. Seznam na PC se např. sestaví (a zobrazí) do 1 vteřiny, ten samý seznam na Android boxu připojeného do stejné sítě, zabere někdy i několikanásobek tohoto času.
V současné době, u verzí 20 a 21, je použití staré metody, tedy ListItem.setInfo(), stále ještě tolerováno. Vidět to můžete v logu Kodi, kde se každé použítí této metody projeví varovnou (warning) hláškou:
Kód:
warning <general>: Setting most video properties through ListItem.setInfo() is deprecated and might be removed in future Kodi versions. Please use the respective setter in InfoTagVideo.
Poučme se z historie!
Někdo možná namítne, že to zas takový problém není, což může být i pravda, a není to tedy nutné řešit hned, nicméně otázkou je, co se stane, až ona toleance k používání staré metody skončí. Všichni si podobné případy z historie Kodi pamatujeme a jistě si i pamatujeme, jak to nakonec dopadlo. S příchodem major verze, ve které s dostatečným předstihem avizovaná změna a s ní spojená tolerance skončila, nastal chaos. Neupravené doplňky, ačkoliv na jejich úpravu měli autoři čas většinou přes dvě major verze Kodi, přestaly fungovat, uživatelé se bouřili, nadávali, odmítali přejít na novou verzi, protože, dle jejich názoru, "byla plná bugů".
Co tedy s tím?
Zajímalo mne, kdy v tomto případě skončí tolerance na používání metody ListItem.setInfo(). Poslal jsme pro to dotaz do fóra Kodi.tv, ale zatím jsem se jendoznačné odpovědi nedočkal. Máme tedy minimálně čas po celé trvání verze 21. Jestli se ona tolerance přehoupne i do verze 22 se teď s jistotou říci nedá. Jsme zatím ve velmi rané fázi práce na verzi 22 a stát se může cokoliv.
Padne možná otázka, proč tedy o tom píši? Z jednoho jednoduchého důvodu a to, aby se autoři zamysleli, a pokud plánují nějakou zásadní změnu ve svých doplňcích, tak zvážili, jestli není čas starou metodu opustit a doplňky přepsat s použitím té nové. Tady by ale měla zaznít jedna ne příliš dobrá zpráva, Změna metody se v kódu projeví poměrně zásadně a podle názoru některých opravdu zkušených python programátorů a autorů doplňků, je jen velmi obtížné napsat kód, který se bude sám, podle verze Kodi, adaptovat na použití staré nebo nové metody. Vedou se o tom diskuse a padají návrhy na řešení, které je možné vidět v v20 - ListItem.setInfo() to InfoTagVideo migration discussion. Doporučuji autorům, pokud ho už neznají, si téma přečíst. Je zajímavé, že autor doplňku SC se této diskuse účastní, takže se změnou pravděpodobně počítá. U hlavního autora SCC si tím nejsme tak jistý. Filosofie SCC doplňku je taková, že je psaný "multiverzově", takže je schopný se, počínaje Kodi verzí 17, na hostitelský systém a jeho knihovny, omezení a pravidla adaptovat. To by v tomto případě, jak vyplývá z odkazovamé diskuze, mohl být oříšek. Na druhou stranu způsob, jaký je naporgramován SCC je minimálně "o ligu výše" než je to u SC, takže bych případnou adaptaci na novou metodu zas tak nerealisticky neviděl.
Já sám jsem se zatím několika doplňky, které jsme napsal a používám, z pohledu této problematiky nezabýval, ale brzy se na to chystám. Plánuji je také umístit do repozitáře a chtěl bych, aby už, ať už úpravu provedu jakkoliv, odpovídaly aktuálním pravidlům a zásadám Kodi.
Závěrem.
V té souvislosti apeluji na správce repozitáře @wombat: a možná taky na @XBMC-Kodi, aby uvedenou problematiku také sledovali. Je možné (a podle mne dost pravděpodobné), že pro některé autory bude lepší variantou přepsat celý jejich doplněk pro verzi používající pouze novou metodu a pak bude potřeba vytvořit i verzi repozitáře Kodi 21, která bude originální (ne tak, jako je to pro Kodi 20, která pouze odkazuje do verze 19) a ve které budou umístěny doplňky používající již jen novou metodu.
Ostatně, když už jsme u toho doporučení pro @wombat:... Myslím si, a nejsme sám, že by mělo být na místě tu verzi repozitáře pro Kodi 21 dořešit hned a to ať už jakkoliv! Řada uživatelů je zmatena a když vidí v popisu repozitáře, že existují verze 18, 19 a 20, a tak pochopitelně hledají i tu pro verzi 21. Zbytečně se to pak komplikuje.