Zip-Player spielt Musik aus Zip-Archive: Teil 2

von Daniel Meiß-Wilhelm (Leiche)

In der Mai Ausgabe des neuen PCLinuxOS Magazins, haben wir gelernt, wie man ein Script erstellt, um Musik mit XMMS aus Zip-Archiven abzuspielen.

Bevor wir nun starten, habe ich noch ein Nachtrag für den letzten Artikel: Ich vergaß diese Zeile zu schliessen:

SAVE=$(kdialog --title "zip-player" --getopenfilename "open…"

Richtig ist:

SAVE=$(kdialog --title "zip-player" --getopenfilename "open…")

Nun werden wir ein Servicemenu für KDE 4 erstellen.

Was ist ein Servicemenu?

Das Servicemenu ist ein Eintrag für das Rechtsklick Menü (Kontextmenu) und hilft dabei Anwendungen einfacher zu starten, außerdem können weitere spezielle Funktionen bei bestimmten Dateien integriert werden.

Wenn Sie nur für sich ein Servicemenu erstellen wollen, reicht es wenn Sie es in das folgende Verzeichnis speichern:
/home/<user>/.kde4/share/kde4/services/ServiceMenus/.

Wenn Sie das Servicemenu für alle Benutzer bereit stellen möchten, so speichern sie das Textdokument unter dem Verzeichnis /usr/share/kde4/services/ServiceMenus/ Das Dokument sollten sie speichern als zip_player.desktop.

Was sollte in dem Dokument stehen?

Wenn wir eine andere .desktop Datei öffnen, als Beispiel die dropbox.desktop mit Kwrite, so sehen wir:

pic

und das Rechtsklick Menü sieht wie folgt aus:

pic

In der ersten Zeile finden wir [Desktop Entry] als Kopfzeile und darunter befinden sich weitere Einträge:

Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=all/all;
Actions=getPublicURL;copyPublicURL;
X-KDE-Submenu=Dropbox
X-KDE-StartupNotify=false
X-KDE-Priority=TopLevel

Als erstes müssen wir einige Einträge ändern:

Type=Service
Name=Zip_Player
Encoding=UTF-8
ServiceTypes=application/zip
Actions=zip_player
X-KDE-ServiceTypes=KonqPopupMenu/Plugin
MimeType=all/allfiles;

Anmerkung: Es ist völlig egal in welcher Reihenfolge die Einträge stehen.

Wir benötigen nicht alle Einträge und somit löschen wir X-KDE-Submenu=Dropbox, da wir nur einen Eintrag für unser Servicemenu haben. X-KDE-Priority=TopLevel wird auch nicht mehr benötigt. Die ServiceTypes ändern wir in application/zip. Auch fügen wir Encoding=UTF-8 hinzu. Bei den Eintrag MimeType=all/allfiles; wird unser Servicemenu bei allen Dateien im Rechtsklick Menü angezeigt. Die Actions=zip_player Zeile ist Namensgeber und bestimmt die nächsten Einträge.

[Desktop Action zip_player]
Name=Zip Player
GenericName=Zip_Player
Exec=zip_player
Icon=xmms.png

In diesem Abschnitt der Kopfzeile lesen wir Desktop Action zip_player, die eigentliche Aktion für das Servicemenu.

Name=Zip Player zeigt den Namen Zip Player beim öffnen des Servicemenu in KDE 4 an.

GenericName=Zip_Player wird nicht benötigt und wird auch nicht auf dem Desktop angezeigt.

Exec=zip_player gibt das auszuführende Programm an. (Normalerweise befindet es sich in /usr/bin, ist es nicht in /bin, so müssen Sie das Verzeichnis zu dem Programm /home/USER/documente/zip_player mit angeben).

Icon=xmms.png zeigt ein Symbol im Rechtsklick Menü an.

Wenn Sie es in ihrem Homeverzeichnis gespeichert haben
.kde4/share/kde4/services/ServiceMenus/, und nun mit einem Rechtsklick auf ein Ziparchiv klicken, wird das neu erstellte Servicemenu unter "Aktion > Zip Player" angezeigt. Fühlen Sie sich frei es anzuklicken, aber was ist das?

Wieso wird der Dateien Browser geöffnet?

Es soll doch nun das Archiv mit XMMS öffnen und nicht den Dateien Browser. Also benötigt unser Script ein paar Veränderungen führen wir diese durch. Öffnen Sie das Script mit Kwrite:

#!/bin/bash
#
mkdir $HOME/.zplayer
SAVE=$(kdialog --title "zip-player" --getopenfilename "open…"
unzip $SAVE -d $HOME/.zplayer && xmms $HOME/.zplayer && rm -fr $HOME/.zplayer  | exit

Als erstes (wo habe ich nur mein Kopf) fügen wir Encoding=UTF-8 hinzu, somit wird die korrekte Schriftart gesetzt.

#!/bin/bash
#
Encoding=UTF-8
mkdir $HOME/.zplayer
SAVE=$(kdialog --title "zip-player" --getopenfilename "open…" )
unzip $SAVE -d $HOME/.zplayer && xmms $HOME/.zplayer && rm -fr $HOME/.zplayer  | exit

Wir benötigen als Funktion den FileOpenParameter. Kurze Rede langer Sinn, fügen Sie die folgenden Zeilen in das Script ein:

usage ()
{
echo "No File"
exit 1
}
#
if [ $# -eq 0 ];
then
usage
fi
#
FileOpenParameter="$1"
#

und löschen Sie:

SAVE=$(kdialog --title "zip-player" --getopenfilename "open…" )

In dieser Zeile ändern wir $SAVE in "$FileOpenParameter".

Unser Script sieht nun wie folgt aus:

Encoding=UTF-8
#Funktion
usage ()
{
echo "No File"
exit 1 #Beendet Script
}
#
if [ $# -eq 0 ];
then
usage
fi
#
FileOpenParameter="$1"
#
if [ ! -d $HOME/.zplayer ]; then
mkdir $HOME/.zplayer
fi
#Archiv entpacken in Ordner, öffnen mit xmms, nach Beendigung Ordner löschen.
unzip  "$FileOpenParameter" -d "$HOME/.zplayer" && xmms $HOME/.zplayer && rm -fr $HOME/.zplayer | exit
#
exit 0
pic

Speichern Sie es und versuchen Sie erneut ein Zip-Archiv mit Zip Player zu öffnen. Es sollte nun gehen.