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 | Výběrový blog

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í.
  1. Uspat počítač
  2. Vypnout počítač
  3. 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.
  1. SidePanel pro vytvoření a správu postranního panelu s tlačítky
  2. TimeDialog pro zobrazení dialogového okna pro potvrzení nebo zrušení akce a pro odpočítávání 30 sekund
  3. 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á.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Ruža Becelin avatar 16.5.2013 12:26 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: Totem player a automatické vypnutí počítače
Odpovědět | Sbalit | Link | Blokovat | Admin

Dobra prace.:-)

 

Par napadu:

- misto "Power off" bych dal Shutdown, je to ustalena konvence

- misto "Do nothing" by nebyl spatny checkbox, ktery bych zapnul/vypnul zbyvajici volby

20.5.2013 10:59 HUFU | skóre: 2 | blog: Ripping_yarns
Rozbalit Rozbalit vše Re: Totem player a automatické vypnutí počítače
Díky za podnět, jakmile bude chuť, něco s tím udělám.
vencour avatar 16.5.2013 14:36 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Totem player a automatické vypnutí počítače
Odpovědět | Sbalit | Link | Blokovat | Admin
Přidal jsem do výběru.
Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
18.5.2013 08:53 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Totem player a automatické vypnutí počítače
Odpovědět | Sbalit | Link | Blokovat | Admin
mplayer * && sleep 30 && sudo poweroff
If you hold a Unix shell up to your ear, you can you hear the C.
21.5.2013 20:59 HUFU | skóre: 2 | blog: Ripping_yarns
Rozbalit Rozbalit vše Re: Totem player a automatické vypnutí počítače
No jo, ale mplayer není totem a spouštění videa z příkazové řádky je sice jednoduché, ale BFU to děsí. Navíc vyvolat příkazem uspání počítače není tak triviální jako vypnutí.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.