What I'm Doing...

Powered by Twitter Tools

Amarok – XChat

Oft sieht man im IRC diese schönen “now playing”-Nachrichten, und letzt hab ich mir gedacht “Kaba, hol dir auch eins”.

Da ich eigentlich nur noch (ok, außer zum Zocken) im Linux bin, also XChat und amaroK nutz, wurde nach “amarok xchat” in Google gesucht – wer hätts gedacht…

Natürlich hab ich auch was gefunden, aber die Ausgabe beim Befehl /amarok hat mir einfach nicht gepasst… hier die Form:

Kabarakh is listening to Band – Album – Titel

Hat mir gar nicht gefallen, also hab ich gleich die Datei geöffnet und geschaut, ob ich das ändern kann. Nach anfänglichen Schwierigkeiten (Python hat keine {}-Anweisungsblöcke, sondern Einrückungen – hab ich spät gemerkt) kam dann ein umgeordnetes Script raus.

Aber auch damit war ich nicht zufrieden, also ab in die Datei, schauen, über welche Befehle Amarok angesprochen wird und versuchen, diese nachzuahmen… heraus kommen nun Ausgaben in folgender Form:

Kabarakh is listening to title[Titel] artist[Artist] album[Album] duration[derzeitige Zeit/Gesamtzeit]

Außerdem wird bei Pause und bei ausgeschaltetem Amarok angezeigt, dass nichts gespielt wird…

Meine Vorlage war übrigens consistencies.net, eine Lizensierung stand nicht dabei, aber Python und die XChat-Scripts sind ja Quelloffen… also denke ich dass es nichts macht, wenn ich meine Version hier zum Download reinstelle und wahrscheinlich zwischendurch mit neuen Funktionen versorge… meldet euch bei Fehlern! (Der Befehl ist übrigens immer noch /amarok)

Download

Edit: Nun ist auch ein Fortschrittsbalken implementiert, den man durch ändern einer Variable im Script (siehe Kommentare) ändern kann.

Außerdem habe ich (sry Chimera) die “based on”-Hinweise gelöscht, da in dem Script außer dem befehl “me is listening to” und den dcop-Kommandos, welche nicht anders gehen, kein Urpsrungscode mehr enthalten ist…

Edit: Und wieder eine neue Version, diesesmal wird auch erkannt, wenn Amarok nicht gestartet ist und ausgegeben, dass kein Lied läuft (also wie bei Pause)

Edit (mal wieder): Neue Version, jetzt kann man zwischen 3 Varianten des Fortschrittsbalken wählen, indem mal in der Zeile

bar = bar3(percent)

die Zahl vor (percent) ändert. Sie unterscheiden sich nur in der Anzahl der Felder und darin, wann eine Raute und wann ein Minus erscheint. Hier die 3 Varianten:

  1. 0-10% = keine Raute, ab 10% eine Raute pro 10%, somit bei 90-99% 10 Rauten –> Maximum
  2. 0-4% = keine Raute, ab 5% eine Raute pro 10%, somit 95-99% 10 Rauten –> Maximum
  3. 0-4% = keine Raute, ab 5% eine Raute pro 5%, somit 95-99% 20 Rauten –> Maximum

edit once again: nun wurde das design von der Progressbar leicht geändert (nachdem die Raute jeder hat…) – jetzt erscheinen anstelle der Raute fette Doppelpunkte, macht sich besser find ich…

Außerdem hab ich gemeinerweise den Befehl /amaversion erstellt, mit dem man Werbung machen kann ;) ruhig oft verwenden ^^

8 Kommentare zu “Amarok – XChat”

  1. chimaera sagt:

    Hi, klar kannst du das Skript weiterverwenden. IIRC gibt es entweder auf der Seite von Amarok oder X-Chat noch eine sehr nette Version davon, die den Songtitel in zufällige und ganz lustige Ausprüche verpackt.

    Gruss

  2. BadBoy_ sagt:

    höhö….python is cool…
    ich nutz derzeit ne abgewandelte Version eines “Now Playing” scripts für XChat und Exaile…
    dank dem programm kann ich exaile nun über Strg+F1/F2/F3 steuern

  3. Kabarakh sagt:

    jo steuerungsscripts gehen dank dcop auch bei amarok leicht

    aber da man generell auf super+(z,x,c,v,b) die globalen tastenkombis hat, macht das bei amarok weniger sinn… ich überleg grad eh wie ich das script ver(schlimm)bessern kann

  4. Diogenes von Wien sagt:

    Servusm, Kabarakh!

    Ich hab’ mir Dein Skript gesaugt und folgendermaßen modifiziert. Ich hoffe, Du hast nixhts dagegen.

    # amarok_np.py 0.1
    # by Diogenes von Wien http://members.chello.at/diogenes
    # announces song played by amarok

    # based on *amarok_xchat_variant* by christian herberger (aka kabarakh)
    # which you can find at http://kabarakh.pytalhost.de/blog/2007/10/26/amarok-xchat/

    # installation: just copy this file to /xchat2 or whatever your xchat config directory is
    # use : command /ap

    __module_name__ = “amarok_np”
    __module_version__ = “0.1″
    __module_description__ = “python module for xchat to display facts about songs played”

    import xchat
    import commands

    def amarok_send(word, word_eol, userdata):
    if ( commands.getoutput(‘dcop amarok’) == “No such application: ‘amarok’” ) or ( commands.getoutput(‘dcop amarok’) == “ERROR: Couldn’t attach to DCOP server!” ):
    xchat.command(‘me isn\’t playing any song…’)
    else:
    if (commands.getoutput(‘dcop amarok player isPlaying’)==”true”):
    percent = (int)((float)(commands.getoutput(‘dcop amarok player trackCurrentTime’))/(float)(commands.getoutput(‘dcop amarok player trackTotalTime’)) * 100)
    if commands.getoutput(‘dcop amarok player album’) != ”:
    xchat.command(‘me l\xe4\xdft amarok 02′ + commands.getoutput(‘dcop amarok player title’) + “02 von 02″ + commands.getoutput(‘dcop amarok player artist’) + “02 auf 02″ + commands.getoutput(‘dcop amarok player album’) + “02 spielen.”)
    else:
    xchat.command(‘me l\xe4\xdft amarok 02′ + commands.getoutput(‘dcop amarok player title’) + “02 von 02″ + commands.getoutput(‘dcop amarok player artist’) + “02 spielen.”)
    else:
    xchat.command(‘me isn\’t playing any song…’)
    return xchat.EAT_ALL

    xchat.hook_command(‘ap’, amarok_send)

    xchat.prnt(‘amarok_np 0.1 loaded..’)

  5. Kabarakh sagt:

    Ich schau mirs mal morgen an ;) aber klar ist das in ordnung

  6. Tagtraeumer sagt:

    Hi!
    Hab das Script auch über google “amarok xchat” gefunden ;) mittlerweile Platz 1 glaub ich.
    ich habs auch gleich ausprobiert, doch bei mir zeigt der immer an, dass ich nichts höre. Ich habe herausgefunden, dass dcop mein amarok nicht findet (?), also habe ich so gut wie es ging das Script für (q)dbus umgeschrieben.
    war auch gleich das erste mal, dass ich python programmiert habe …

    def amarok_send(word, word_eol, userdata):
    global bar, switch, bar_mod
    if (commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata’)==”Service ‘org.kde.amarok’ does not exist.”):
    xchat.command(‘me isn\’t playing any song…’)
    else:
    if (commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata’)!=”"):
    if switch == True:
    percent = (int)((float)(commands.getoutput(‘qdbus org.kde.amarok /Player PositionGet’))/(float)(commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata | grep mtime:’).replace(‘mtime: ‘,”)) * 100)
    if bar_mode == 1:
    bar1(percent)
    elif bar_mode == 2:
    bar2(percent)
    else:
    bar3(percent)
    xchat.command(‘me is listening to title[02' + commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep title:').replace('title: ','') + "02] artist[02" + commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep artist:').replace('artist: ','') + "02] duration[02"+ str((int)((float)(commands.getoutput('qdbus org.kde.amarok /Player PositionGet')))/1000) + "s / " + str((int)((float)(commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep mtime:').replace('mtime: ','')))/1000) + "s02]” + bar)
    bar = “”
    else:
    xchat.command(‘me isn\’t playing any song…’)

    return xchat.EAT_ALL

    ist nur der def amarok_send block, wenn jemand also mit dem script probleme hat kann er das mal ausprobieren.

  7. Kabarakh sagt:

    joa danke, ich selbst nutze immer noch nen uralt-amarok und hab deswegen noch keine änderung gebraucht… hmm schade, die einrückungen sind weg bei deinem kommentar…

    mit deiner erlaubnis werd ich das script nehmen und als neue version hier veröffentlichen… ich korrigier auch die leerzeichen ;)

  8. Tagtraeumer sagt:

    klar darfst du das, dafür habe ich das ja auch als kommentar gepostet ;)
    ich habe nur keine funktion “isPlaying” oder dergleichen gefunden, daher erkennt das script nicht, ob amarok Spielt oder Pause ist, aber das ist eigentlich auch egal, denn wenn man Stop drückt gibt der qdbus befehl einen leeren string wieder.
    aber ausführlich getestet hab ich das nocht nicht.

Kommentieren