Portál AbcLinuxu, 2. května 2025 10:06
Totem player a automatické vypnutí počítače
16.5.2013 10:29
| Přečteno: 1195×
| Linux
|
Kdysi před rokem jsem tu zveřejnil první verzi pluginu do Totemu pro vypínání počítače na konci přehrávání. Bohužel zrovna v době jeho vzniku se začalo přecházet pomalu na Gnome Shell a GTK3 a také Totem s verzí 3 poměrně dost změnil API. Situace se zastaráváním mého Ubuntu 10.04 se stala neúnosná a tak jsem musel provést update i já a to s sebou přineslo nutnost přepsat také tento plugin, protože si na něj zvykla celá rodina a ani mě se nechtělo hledat náhradu, protože pravděpodobně ani neexistuje. Po deštivém víkendu stráveném nad jazykem Python a dokumentací je to tu.
Poweroff plugin 2
Co to je?
Nová verze poskytuje stejné možnosti a rozhraní jako předchozí. Uživatel má na výběr ze tří akcí, které se automaticky vyvolají po skončení přehrávání.
- Uspat počítač
- Vypnout počítač
- Nedělat nic
Nejedná se o žádnou minutku, plugin skutečně reaguje na událost konce datového proudu poslední položky v playlistu. Po detekci této události se zobrazí dialogové okno, které čeká 30 sekund na zrušení akce a v případě jejího potvrzení nebo vypršení časového limitu se provede.
Instalace
Plugin je ke stažení na domovské stránce projektu na sourceforge.org. Na stejném místě se také nachází wiki projektu s návodem k instalaci. Nejjednodušší cesta je použít instalační skript, který by určitě měl fungovat na debian-like systémech. Jak jsou na tom s adresářovou strukturou ostatní distribuce netuším, ale předpokládám, že se neliší. Pokud by ale z nějakého důvodu nefungoval, je tam i návod na ruční instalaci.
Po instalaci se plugin aktivuje v české lokalizaci volbou menu Upravit->Zásuvné moduly->Vypínací plugin.
Boční panel s nabídkou akcí se aktivuje volbou Zobrazit->Po skončení přehrávání
Implementace
Plugin je psaný v jazyce Python, využívá pro uživatelské rozhraní knihovnu pyGtk, pro paralelní běh časovače vedle potvrzovacího dialogu knihovnu Threading, pro spuštění procesu s akcí je využívána knihovna subprocess a podporu pro jazykovou lokalizaci přináší knihovna gettext.
Kód pluginu se skládá celkem ze tří tříd.
- SidePanel pro vytvoření a správu postranního panelu s tlačítky
- TimeDialog pro zobrazení dialogového okna pro potvrzení nebo zrušení akce a pro odpočítávání 30 sekund
- StarterPlugin pro vlastní logiku a napojení na Totem
StarterPlugin
Každý plugin pro Totem musí obsahovat jednu hlavní třídu, která implementuje rozhraní Peas.Activatable a je potomkem GObject. Peas.Activatable definuje dvě funkce, pomocí kterých je možné plugin spustit v Totemu. První do_activate se volá při aktivaci pluginu a druhá do_deactivate vždy při deaktivaci.
V do_activate se přiřadí handler k události end of stream a přidá se boční panel do přehrávače.
Při deaktivaci v do_deactivate se boční panel odebere.
Funkce eosHandler slouží jako obsluha události end of stream. Kontroluje, zde byl dosažen konec proudu v posledním souboru ve frontě, vyčte zvolenou akci z formuláře v bočním panelu, zobrazí dialog s odpočítáváním času a nakonec spustí nový proces, ve kterém se odešle příkaz pro d-bus s příslušnou akcí.
TimeDialog
V konstruktoru se nejprve vytvoří nový objekt pro GTK dialog, poté se zaregistruje nové vlákno pro běh časového odpočtu a nakonec se založí jeden zámek pro zabránění aktivního čekání.
Funkce run slouží k aktivaci vlákna pro odpočet času a zobrazení dialogu. Potom čeká na jeho skončení buď tím, že uživatel klikne na nějaké tlačítko, čímž dialog zavře a vrátí se hodnota accept nebo reject, nebo vyprší čas - dialog je násilně ukončen a vrací hodnotu none. Návratová hodnota funkce je uživatelova reakce na dialogové okno (reject, accept, none).
Funkce timer se spouští v novém vlákně a odpočítává čas. Vlákno se zablokuje na zámku na zadaný čas a po jeho uplynutí a nebo uvolnění zámku, což značí, že uživatel ukončil dialogové okno kliknutím na reject nebo accept, zabije dialog a skončí.
SidePanel
V konstruktoru je vytvořen jednoduchý GTK formulář s jedním nadpisem a třemi tlačítky pro boční panel.
Funkce getSelectedAction slouží pro zjištění čísla aktuálně vybrané akce.
Jazyková lokalizace
Oproti minulé verzi, která byla jen v anglickém jazyce, umí tato verze zobrazovat texty v jazyce podle uživatelova místního nastavení. Python má pro tyto účely implementovanou knihovnu gettext, která je podobná GNU gettext API.
Všechny texty určené k lokalizaci jsou v programu označené podržítkem, např. _('Hello'). Zdrojový kód se potom projede programem pygettext, jehož výstupem je katalog textů k překladu do jednoho jazyka s koncovkou pot. Zde překladatel vyplní přeložené fráze a výsledný soubor se převede programem msgfmt do binární podoby s koncovkou mo, která se už může nahrát do složky s jazykovými soubory ostatních programů (/usr/share/locale) a plugin si jí odtud načte.
Další záležitostí je doplnění překladů do souboru .plugin, které se musí provést nezávisle na lokalizaci samotného pluginu.
Pokračování projektu
No je to spíš takový miniprojektík, ale bylo by fajn sehnat nějaké dobrovolníky na překlad do různých jazyků. Těch textů je fakt málo, ale nevím, jestli by si s tím poradil třeba google translator.
Potom bych chtěl ten plugin nějak zviditelnit, protože vím, že byla tahle funkce na některých fórech celkem žádaná. Jenže na internetu je už tolik bordelu, že se těžko hledá.
Tiskni
Sdílej:
Komentáře
Vložit další komentář
16.5.2013 14:36
vencour | skóre: 56
| blog:
Tady je Vencourovo
| Praha+západní Čechy
Re: Totem player a automatické vypnutí počítače
18.5.2013 08:53
Semo | skóre: 45
| blog:
Semo
Re: Totem player a automatické vypnutí počítače
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.