• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 1 Hlas(ů) - 1 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Easy metoda modifikace doplňků
#1
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... 4

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

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
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.
[attachment=10998]

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
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:
  • # 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.
1000 záznamů na stránku pak v SCC může vypadat nějak takto:
[attachment=10999]

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é...  1
 
Citovat
#2
Ahoj , kedy asi plánuješ pustiť skript do éteru ?

Ďakujem

Martin
 
Citovat
  


Přejít na fórum:


Prochází: 1 host(ů)