Schwarze Magie im Widget
Die ab Zeile 86 definierte Funktion »listbox_redraw()« frischt die Listbox auf, indem sie ihr einfach unter dem Eintrag »data« neue Werte in Form eines Array von zweielementigen Arrays unterschiebt. Schwarze Magie im Widget (eine mit »tie« gebundene Datenstruktur) löst ohne weitere Maßnahmen dann sofort ein Neuzeichnen der grafischen Darstellung aus. Die Funktion »timer()« ab Zeile 96 bringt den Zeitstempel einer Videodatei, der in der Einheit Sekunden vorliegt, in dem Format »hh:mm:ss« auf Vordermann.
Falls der User eine Listbox-Zeile mit der Maus doppelklickt, sorgt der Aufruf von »signal_connect« in Zeile 76 dafür, dass der POE-Zustandsautomat den Zustand »click« anspringt und damit die ab Zeile 44 definierte Funktion »click()« aufruft. Als einziges Argument übergibt er ihr in »ARG0« eine Referenz auf Listbox-Zustandsdaten, aus denen die Funktion »get_row_data_from_path()« genau jene Zeile hervorzaubert, auf die der User geklickt hat.
Das zweite Element der zurückkommenden Arrayreferenz ist der Dateiname des gewünschten Videos. Der Aufruf »yield()« weist den POE-Kernel in Zeile 53 an, den Zustand »play_video« anzuspringen und ihm den Dateinamen des abzuspielenden Videos zu überreichen.
Dies startet die Funktion »play_video()« ab Zeile 110, die zunächst herausfindet, ob in der globalen Variablen »$OFFSETS« ein Sekundenwert für das Video vorliegt, und dann über das Modul POE::Wheel::Run den externen Mplayer startet. Das Pro- gramm und die Argumente nimmt das Wheel, ein Rädchen im Getriebe des POE-Kernels, getrennt als »Program« und »ProgramArgs« entgegen. Die Option »-fs« startet Mplayer im Fullscreen-Modus für vollen Videogenuss, »-ss« gibt die Anzahl der Vorlauf-Sekunden vor.
Auf der Suche nach der vergangenen Zeit
Da der Mplayer die Ausgabe der Videosekunden nicht durch Zeilenumbrüche trennt, greift der normale zeilenbasierte Filter von POE::Wheel::Run nicht, also kommt in Zeile 127 POE::Filter::Stream zum Einsatz. Dieser Filter wartet nicht, bis eine Zeile vollständig ist, sondern lässt das Wheel den Ausgabezustand »output« anspringen, sobald ein neues Textschnipsel vorliegt.
Die in diesem Fall aufgerufene Funktion »stdout_handler()« ab Zeile 141 erhält damit immer ein Schnipsel der gerade neu aufgeschnappten Mplayer-Diagnoseausgaben und probiert dann mit dem regulären Ausdruck in Zeile 146, die in Abbildung 2 rot eingefärbten Videosekunden daraus zu extrahieren.
Hierzu sucht es zunächst die Zeichenkette »V:« entweder am Zeilenanfang oder nach einem Leerzeichen und fängt eine nachfolgende Fließkommazahl (»[d.]+)«) in einer Capture-Klammer ein. Der gefundene Wert steht anschließend in der Variablen »$1«, die den Treffer aus der ersten Klammer des regulären Ausdrucks aufnimmt. Diese erste Klammer dient lediglich der Gruppierung und hat selbst keine Capture-Funktion, was die Anweisung »?:« in dem regulären Ausdruck bewirkt.
Findet der Regex nun einen passenden Wert, dann legt »stdout_handler()« ihn unter dem Videonamen im globalen Hash ab, auf den die Referenz »$OFFSETS« zeigt. Diese Daten sichert das Skript jeweils am Schluss jedes Abspielvorgangs in der schon erwähnten YAML-Datei im Homeverzeichnis des Benutzers, wenn es den Close-Event »play_ended« und damit auch die Funktion »play_ended()« ab Zeile 35 anspringt.
Die Kernel-Methode »sig_child()« in der Zeile 134 weist den POE-Kernel umgehend an, den soeben gestarteten und später eventuell immer noch herumlungernden Fremdprozess mit dem Mplayer ohne Warnung abzuschießen, falls das Programm abbricht.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 4 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





