Filter gegen Trommelfeuer
Neben der Zuordnung der Buddies zu den Geräuschen unter dem Eintrag »sound_map« setzt die YAML-Datei auch noch den Parameter »interval«, damit das System nicht bei jeder eintrudelnden Nachricht ein Geräusch abspielt. Steht »interval« auf 60, ist die Mindestzeitspanne zwischen zwei Geräuscheinspielungen 60 Sekunden. Kommen in diesem Zeitraum mehrere Nachrichten an, unterdrückt das System das abzuspielende Geräusch, denn schließlich soll der arme User kein akustisches Trommelfeuer ertragen, sondern arbeiten.
YAML-Daten lassen sich eins zu eins in Perl importieren, die Funktion »LoadFile()« aus dem YAML-Modul wandelt sie in die in Abbildung 4 gezeigte Struktur um. In dem darauf folgenden Schritt steht nun die Konvertierung der Daten in aufgeblähtes XML an.
Abbildung 4: Mit »LoadFile()« eingelesen ergeben die YAML-Daten aus der Abbildung 3 diese Datenstruktur in Perl.
Von YAML nach XML
Das von Pidgin verwendete XML-Format (Abbildung 2) definiert für jeden Pounce ein Konstrukt, das in »<pounce>«-Tags eingeschlossen ist. Die Gesamtheit aller dieser Tags steht innerhalb eines Sammel-Tags mit dem Namen »<pounces>«. Dies ist einfach mittels Reverse Engineering herauszufinden, in dem man mehrere Pounces mit Pidgins grafischer Oberfläche definiert und anschließend die automatisch neu geschriebene XML-Datei inspiziert.
Das Skript »pounce-yml-to-xml« in Listing 1 wandelt nun die kompakte YAML-Datei in Abbildung 3 in ausführliche XML-Instruktionen für Pidgin um, die es anschließend in »~/.purple/pounces.xml« speichert. Die For-Schleife ab Zeile 17 iteriert über die Einträge im »sound_map«-Hash der YAML-Datei, die allesamt im Format »protocol:account« vorliegen. Darunter befindet sich ein weiterer Hash, der den Onlinepartnern (Buddies) Geräusche zuordnet.
|
Listing 1: |
|---|
01 #!/usr/local/bin/perl -w
02 use strict;
03 use Sysadm::Install qw(:all);
04
05 use YAML qw(LoadFile);
06 use Template;
07
08 my($home) = glob "~";
09 my $path = "$home/.pidgin-pounce";
10 my $yaml = LoadFile( "$path/pounce.yml" );
11
12 my $xml_file = "$home/.purple/pounces.xml";
13 my $SOUND_CMD = "~/bin/pounce-sound";
14
15 my @pounces = ();
16
17 for my $account (
18 keys %{ $yaml->{sound_map} }) {
19
20 my($proto, $recv) = spl it /:/, $account;
21
22 for my $buddy (keys %{
23 $yaml->{sound_map}->{$account} }) {
24
25 push @pounces,
26 mk_pounce($buddy, $recv, $proto);
27 }
28 }
29
30 binmode STDOUT, ":utf8";
31
32 my $xml = q{
33 <?xml version='1.0' encoding='UTF-8' ?>
34 <pounces version='1.0'>
35 [% FOR pounce IN pounces %]
36 [% pounce %]
37 [% END %]
38 </pounces>
39 };
40
41 my $tmpl = Template->new();
42
43 mv $xml_file, "$xml_file.old" if
44 -f $xml_file;
45
46 $tmpl->process( $xml,
47 { pounces => @pounces },
48 $xml_file ) or die $tmpl->error;
49
50 ###########################################
51 sub mk_pounce {
52 ###########################################
53 my($buddy, $recv, $prot) = @_;
54
55 return qq{
56 <pounce ui='gtk-gaim'>
57 <account
58 protocol='prpl-$prot'>$recv</account>
59 <pouncee>$buddy</pouncee>
60 <options/>
61 <events>
62 <event type='sign-on'/>
63 <event type='message-received'/>
64 </events>
65 <actions>
66 <action type='execute-command'>
67 <param name='command'
68 >$SOUND_CMD $prot:$recv $buddy</param>
69 </action>
70 </actions>
71 <save/>
72 </pounce>
73 }
74 }
|
Die Keys-Funktion gibt eine Liste dieser Partner zurück. Zeile 26 ruft für jeden die ab Zeile 51 definierte Funktion »mk_pounce()« auf. Als Parameter erhält sie den Namen des Buddy, den Namen des Accounts (»recv« genannt, weil dieser später Nachrichten von den Buddies empfängt) sowie das verwendete Protokoll (»yahoo«, »aim« oder dergleichen). Die Funktion gibt dann jeweils einen XML-String zurück, der einem Eintrag in Pidgins Konfigurationsdatei »pounces.xml« entspricht.
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...





