30.11.2024, 14:48
(Tento příspěvek byl naposledy změněn: 30.11.2024, 15:58 uživatelem JiRo.
Důvod úpravy: Překlepy, doplnění informace.
)
Další z témat, které by se dalo zařadil do kategorie Easy TOOLS. Zatím jsem s ním ale ve fázi, kdy se o doplněk ještě nejedná, takže s finálním zařazením do této kategorie budu trochu opatrný. Má to ještě svůj čas...
Čas od času si pro sebe nebo mé přátele, vyrobím nějakou modifikaci pro doplněk, kterého nejsem autorem. Nebývá to nic velkého, nějaké drobné úpravy v kódu nebo možnostech nastavení atp. Dříve jsem to dělal tak, že jsem si pro daný doplněk, kterého se taková modifikace týkala, vyrobil jeho klon a pokaždé, když autor doplňku vydal verzi, upravil jsme ji a pak ji rozdistribuoval na všechna Kodi, kterých se týkala. Bylo to komplikované, otravné a čast to skončilo tak, že jsem se na ty modifikace nakonec vykašlal. Protože však byly některé modifikace hodně užitečné a uživatelé, včetně mě, na ně byli zvyklí, definoval jsme si jednodušší, můžeme ji klidně říkat poloautomatickou, metodu. Nelze ji použít vždy a všude, ale u těch pár doplňků, kde ji používám s vědomím toho, jaká má omezení, se mi zatím osvědčila.
Jaká jsou východiska a použité principy?
Metodu používámu u těch doplňků, které se nemění nijak zásadně. Většinou, dělám-li nějakou úpravu, mám zhruba přehled jak často a jak moc autoři do doplňku zasahují a hlavně, zda se ty zásahy týkají té části, kterou já chci modifikovat. Já metodu používám vesměs u Kodi instalací *ELEC. Jistě by ji šlo rozšířit i na jiné typy instalací, ale já na těchto instalacích žádné změny neprovádím, takže jsem se tím zatím nezabýval. Ale nějakou myšlenku, jak by se to mohlo realizovat, samozřejmě mám. Vrátím se k tomu v závěru tohoto příspěvku. Pro *ELEC instalace lze uvedený princip relizovat jednoduše s pomocí sh scriptů a příkazů/aplikací, které jsou běžnou součástí systému (sh, xmlstarlet). Prostě se držím zásady "Bojuji tam, kde můžu snadno a minimálními náklady vyhrát."
Princip je tedy takový, že při každém spuštění systému (ne tedy Kodi), pomocí volání v autostart.sh, spustím postupně pro všechny doplňky, kterých se to týká, script, který si ověří, zda je aktuální verze doplňku již modifikovaná, a pokud ne, tak ji pomocí jednoduchých kroků modifikuje. Součástí modifikace je i úprava čísla verze doplňku v addon.xml, podle které se pak pozná, že doplněk byl již modifikován.
Jak to funguje v praxi?
Předpokládejme, že mám připavenou modifikaci pro nějaký doplněk. Script, tandardně nazávým easymod.sh a které umísťuji ho do datového adresáře doplňku, kterého se modifikace týká. U *ELEC je to tedy adresář /storage/.kodi/userdata/addon_data/<id doplňku>. V autostart.sh pak mám vložené volání (uvádím příklad pro doplněk SCC):
U doplňku mám pak vždy vypnuté nastavení Automatická aktualizace. Jak v doplňku v Kodi, tak v tomto případě (SCC) i v nastavení vlastního doplňku. V okamžiku, kdy nějaká aktualizace přijde, vím, že poté co ji spustím, tak po jejím skončení musím ještě restartovat systém. To zajistí, že se z autostart.sh spustí script, který provede příslušnou modifikaci.
Součástí modifikace je i změna verze doplňku, kterou provádím v duchu nepsaných zásad, jak je ostatně vidět i u doplňků Kodi v oficiálním repozitáři, a k verzi přidávám postfix, v tomto případě +easy. Podle upravného čísla verze jednak vidím, že doplněk byl již modifikován, a jednak se toto rozšíření čísla verze použije právě ve scriptu easymod.sh, kde se testuje, zda číslo verze má tento postfix.
Příklad
Uvedu jak vypadá modifikace doplňku Stream Cinema Community (SCC), jehož id je plugin.video.stream-cinema-2-release. Snažím se, aby scripty pro jednotlivé doplňky měly podobnou strukturu, což ulehčuje jejich správu i vytváření případně nových.
Script easymod.sh je umístěn v adresáři /storage/.kodi/userdata/addon_data/plugin.video.stream-cinema-2-release, a vypadá v současné chvíli nějak takto:
Pokud to někoho zajímá, co vlastně tato verze modifikace doplňku SCC provádí za modifikace, tak tady je jejich stručný popis:
Proč tento postup?
Někdo možná namítne, proč místo toho, abych vymýšlel nějaké scripty, raději uvedené úpravy nenabídnu autorům doplňků. K tomu dvě poznámky. Já některé úpravy a některým autorů nabízím. Zpravidla ale ne hned a ne vždy. Ne hned proto, že většinou počkám, až si já nebo i další uživatelé ověří, že úprava má smysl, je užitečná a při dlouhodobém používání se osvědčí. A ne vždy, protože existují autoři nebo komunity soustředěné kolem některých doplňků, kteří na snahu upravit nebo změnit funkce doplňku shlíží často (a z různých důvodů) odmítavě a někdy i s despektem. A na to, abych se v takových případech nějak snažil a někoho přesvědčoval chuť ani náladu opravdu nemám. Tak si to řeším po svém...
Co dál?
Mám v plánu posunout tuto funkci z výlučného řešení pro *ELEC s pomocí sh scriptů a systémových aplikací do verze addon Kodi. Ta by měla, jak předpokládám, celou řadu vylepšených funkcí, možnost jejich parametrizace, kontrol i větší míry automatizace. Její součástí by byla i periodická kontrola verzí doplňků, takže by například, při automatickém update doplňku, mohlo vše proběhnout bez zásahu uživatele. Volitelně samozřejmě třeba se závěrečným dotazem Byly aktualizovány doplňky s možností modifikace a dotazem, zda je možné, tedy pokud to bude potřeba, provést restart Kodi, s případnou volbou ho odložit o definovaný čas nebo např. až po skončení právě přehrávaného videa. V takovémto případě jsou možnosti, jak to celé pojmout, a např. které aspekty chování takového doplňku uživatelsky parametrizovat, téměř neomezené. Bude samozřejmě záležet na zájmu i na tom, kolik času tomu budu moci (a chtít) věnovat.
Jinak, pro výše zmíněný budoucí addon Kodi už mám alespoň jméno a id. Bude se pravděpodobně jmenovat Easy Mod a jeho id bude script.easymod. Tak, tohle bychom měli vyřešené...
Čas od času si pro sebe nebo mé přátele, vyrobím nějakou modifikaci pro doplněk, kterého nejsem autorem. Nebývá to nic velkého, nějaké drobné úpravy v kódu nebo možnostech nastavení atp. Dříve jsem to dělal tak, že jsem si pro daný doplněk, kterého se taková modifikace týkala, vyrobil jeho klon a pokaždé, když autor doplňku vydal verzi, upravil jsme ji a pak ji rozdistribuoval na všechna Kodi, kterých se týkala. Bylo to komplikované, otravné a čast to skončilo tak, že jsem se na ty modifikace nakonec vykašlal. Protože však byly některé modifikace hodně užitečné a uživatelé, včetně mě, na ně byli zvyklí, definoval jsme si jednodušší, můžeme ji klidně říkat poloautomatickou, metodu. Nelze ji použít vždy a všude, ale u těch pár doplňků, kde ji používám s vědomím toho, jaká má omezení, se mi zatím osvědčila.
Jaká jsou východiska a použité principy?
Metodu používámu u těch doplňků, které se nemění nijak zásadně. Většinou, dělám-li nějakou úpravu, mám zhruba přehled jak často a jak moc autoři do doplňku zasahují a hlavně, zda se ty zásahy týkají té části, kterou já chci modifikovat. Já metodu používám vesměs u Kodi instalací *ELEC. Jistě by ji šlo rozšířit i na jiné typy instalací, ale já na těchto instalacích žádné změny neprovádím, takže jsem se tím zatím nezabýval. Ale nějakou myšlenku, jak by se to mohlo realizovat, samozřejmě mám. Vrátím se k tomu v závěru tohoto příspěvku. Pro *ELEC instalace lze uvedený princip relizovat jednoduše s pomocí sh scriptů a příkazů/aplikací, které jsou běžnou součástí systému (sh, xmlstarlet). Prostě se držím zásady "Bojuji tam, kde můžu snadno a minimálními náklady vyhrát."
Princip je tedy takový, že při každém spuštění systému (ne tedy Kodi), pomocí volání v autostart.sh, spustím postupně pro všechny doplňky, kterých se to týká, script, který si ověří, zda je aktuální verze doplňku již modifikovaná, a pokud ne, tak ji pomocí jednoduchých kroků modifikuje. Součástí modifikace je i úprava čísla verze doplňku v addon.xml, podle které se pak pozná, že doplněk byl již modifikován.
Jak to funguje v praxi?
Předpokládejme, že mám připavenou modifikaci pro nějaký doplněk. Script, tandardně nazávým easymod.sh a které umísťuji ho do datového adresáře doplňku, kterého se modifikace týká. U *ELEC je to tedy adresář /storage/.kodi/userdata/addon_data/<id doplňku>. V autostart.sh pak mám vložené volání (uvádím příklad pro doplněk SCC):
Kód:
# SCC workarounds & hacks
/storage/.kodi/userdata/addon_data/plugin.video.stream-cinema-2-release/easymod.sh
Součástí modifikace je i změna verze doplňku, kterou provádím v duchu nepsaných zásad, jak je ostatně vidět i u doplňků Kodi v oficiálním repozitáři, a k verzi přidávám postfix, v tomto případě +easy. Podle upravného čísla verze jednak vidím, že doplněk byl již modifikován, a jednak se toto rozšíření čísla verze použije právě ve scriptu easymod.sh, kde se testuje, zda číslo verze má tento postfix.
Příklad
Uvedu jak vypadá modifikace doplňku Stream Cinema Community (SCC), jehož id je plugin.video.stream-cinema-2-release. Snažím se, aby scripty pro jednotlivé doplňky měly podobnou strukturu, což ulehčuje jejich správu i vytváření případně nových.
Script easymod.sh je umístěn v adresáři /storage/.kodi/userdata/addon_data/plugin.video.stream-cinema-2-release, a vypadá v současné chvíli nějak takto:
Kód:
#! /bin/sh
# EasyMod
revision=2.4.2
id=plugin.video.stream-cinema-2-release
echo EasyMod for ${id} version ${revision}
home=/storage/.kodi
addon=${home}/addons/${id}
data=${home}/userdata/addon_data/${id}
version=$(xml sel -t -v 'addon/@version' ${addon}/addon.xml)
easy=$(echo ${version} | sed -r "s/[0-9]*\.[0-9]*\.[0-9]*\+?(.*)/\1/")
echo EasyMod detected version ${version} of addon ${id}. Mod postfix: ${easy}
if [ ${easy} ] ; then
echo EasyMod nothing to do. Addon is already easy!
exit 2
fi
xml edit -L --update "addon/@version" --value "${version}+easy" ${addon}/addon.xml
echo EasyMod start
# Delete UpNext dependency
sed -i -e 's| <import addon="service.upnext" version="1.1.3"/>| |' ${addon}/addon.xml
# Setting reuselanguageinvoker to false
sed -i -e 's|<reuselanguageinvoker>true</reuselanguageinvoker>|<reuselanguageinvoker>false</reuselanguageinvoker>|' ${addon}/addon.xml
# Stop TVShows removing from library
sed -i -e 's| DB.TV_SHOWS_SUBSCRIPTIONS.delete(mediaid)| # DB.TV_SHOWS_SUBSCRIPTIONS.delete(mediaid)|' ${addon}/resources/lib/utils/addtolib.py
# VIP remaining days warning
sed -i -e 's|VIP_REMAINING_DAYS_WARN = 30|VIP_REMAINING_DAYS_WARN = 3|' ${addon}/resources/lib/const.py
# Maximum page limit
sed -i -e 's|MAX_PAGE_LIMIT = 500|MAX_PAGE_LIMIT = 1000|' ${addon}/resources/lib/const.py
sed -i -e 's/"20|50|100|150|200|250|500"/"20|50|100|150|200|250|500|1000"/' ${addon}/resources/settings.xml
sed -i -e "s|, '6': 500}|, '6': 500, '7': 1000}|" ${addon}/resources/lib/storage/settings.py
# Download folder split to Movies and TVShows
sed -i -e "s|SETTINGS.DOWNLOADS_FOLDER], download_folder,|SETTINGS.DOWNLOADS_FOLDER], 'TVShows', download_folder,|" ${addon}/resources/lib/stream_picker.py
sed -i -e "s|SETTINGS.DOWNLOADS_FOLDER], download_folder)|SETTINGS.DOWNLOADS_FOLDER], 'Movies', download_folder)|" ${addon}/resources/lib/stream_picker.py
echo EasyMod done
exit 0
- # Delete UpNext dependency - odstranění závislosti pro mne problematického a nepoužívaného doplňku UpNext. Umožňuje tento doplněk zakázat nebo odinstalovat.
- # Setting reuselanguageinvoker to false - změna nastavení parametru reuselanguageinvoker z true na false, která umožní u doplňku využívat dynamickou modifikaci v definičních souborech skinu prováděnou na základě nastavení doplňku. Bez tohoto nastavení např. při změně jazykové preference u novinek, které jsou zobrazené ve widgetu, dojde k pádu Kodi.
- # Stop TVShows removing from library - ruší funkci odstranění seriálu ze subscripce, pokud seriál není ve zdroji knihovny SCC nalezený. Ona ta funkce zas tak špatná není, ale v případech, kdy z nějakého důvodu není zdroj knihovny, který může být např. na NAS, dostupný, může dojít k vymazání kontrolovaných subscripcí. A to samozeřjmě člověk nechce.
- # VIP remaining days warning - změna počtu dní zbývajícího VIP přístupu, od kterých je zahájeno zobrazování varování, z původních 30 na 3. Vyžádali si to hlavně ti uživatelé, kteří si VIP platí příležitostně a na krátkou dobu, což bývá právě často jeden měsíc. V takovém případě je zobrazování varování každý den dost otravné.
- # Maximum page limit - umožňuje nastavit parametr Počet položek na stránku i na hodnotu 1000. Dosud je ten limit 500. Má samozřejmě smysl pouze u těch instalací, pro které nepředstavuje zobrazení seznamu s 1000 záznamy problém.
- # Download folder split to Movies and TVShows - ukládá stahované soubory do podadresářů Movies nebo TVShows podle toho, zda stahovaný stream je stream filmu nebo epizody seriálu.
Proč tento postup?
Někdo možná namítne, proč místo toho, abych vymýšlel nějaké scripty, raději uvedené úpravy nenabídnu autorům doplňků. K tomu dvě poznámky. Já některé úpravy a některým autorů nabízím. Zpravidla ale ne hned a ne vždy. Ne hned proto, že většinou počkám, až si já nebo i další uživatelé ověří, že úprava má smysl, je užitečná a při dlouhodobém používání se osvědčí. A ne vždy, protože existují autoři nebo komunity soustředěné kolem některých doplňků, kteří na snahu upravit nebo změnit funkce doplňku shlíží často (a z různých důvodů) odmítavě a někdy i s despektem. A na to, abych se v takových případech nějak snažil a někoho přesvědčoval chuť ani náladu opravdu nemám. Tak si to řeším po svém...
Co dál?
Mám v plánu posunout tuto funkci z výlučného řešení pro *ELEC s pomocí sh scriptů a systémových aplikací do verze addon Kodi. Ta by měla, jak předpokládám, celou řadu vylepšených funkcí, možnost jejich parametrizace, kontrol i větší míry automatizace. Její součástí by byla i periodická kontrola verzí doplňků, takže by například, při automatickém update doplňku, mohlo vše proběhnout bez zásahu uživatele. Volitelně samozřejmě třeba se závěrečným dotazem Byly aktualizovány doplňky s možností modifikace a dotazem, zda je možné, tedy pokud to bude potřeba, provést restart Kodi, s případnou volbou ho odložit o definovaný čas nebo např. až po skončení právě přehrávaného videa. V takovémto případě jsou možnosti, jak to celé pojmout, a např. které aspekty chování takového doplňku uživatelsky parametrizovat, téměř neomezené. Bude samozřejmě záležet na zájmu i na tom, kolik času tomu budu moci (a chtít) věnovat.
Jinak, pro výše zmíněný budoucí addon Kodi už mám alespoň jméno a id. Bude se pravděpodobně jmenovat Easy Mod a jeho id bude script.easymod. Tak, tohle bychom měli vyřešené...