ftblog

:: widerstand zwecklos ::
email jabber gpgkey
hackergotchi

February 02, 2007

scrobble cmus, scrobble!

Filed under: computer -- 13:23

Mahlzeit!

Lebenszeichen und so....
War (oder bin) beschäftigt mit Klausurvorbereitungen, Leben und all dem Kram
der einem immer wieder in den Weg kommt. Anyway, heute gibt's mal wieder was.

Und zwar gibt es eine Erweiterung für cmus, den netten Audioplayer aus eurer
Nachbarschaft. Und zwar gibt es ja diese Seite last.fm, zu der man schicken
kann, was man grad so gehört hat, und die erstellen einem dann Statistiken,
verlinken zu Leuten, die auch so absonderliches Zeug wie man selbst hören,
und so weiter und so fort.

cmus hat dafür keine Unterstützung. Man kann sich mit Skripten behelfen, die
als status-display-program eingebunden werden können. Allerdings ist das ganze
nicht flexibel genug, um audioscrobbler (die Technik hinter last.fm)
vernünftig zu implementieren.

Nun hab ich das Problem im letzten Monat mit etwas Zeit und Code beworfen, um
es in die Knie zu zwingen. Und mittlerweile funktioniert das auch ganz gut.
Es ist noch nicht alles was ich haben will drin, aber unter normalen
Bedingungen funktioniert es bisher tadellos, so das man das nun mal testen
sollte.

Lange Rede, kurzer Sinn:
Ich habe einen Patch gegen den aktuellen git-head[1] und gegen das
2.1.0 Release[2] von cmus erstellt. Getestet habe ich selbst nur mit
dem git-head. Beide Patches bringen die cmus Quellen auf den gleichen Stand.
Und ja, der Code ist recht groß. Das liegt daran, daß ich keine der bisherigen
cmus Funktionen für Netzwerk bzw. Stringbehandlung verwende, da ich beide
nicht für optimal halte. Und der Code zieht keine Abhängigkeit gegen
Bibliotheken wie curl hinter sich her.

Nach dem man eine gepatchte Version kompiliert hat, braucht man nur folgendes:

:set as_user=username
:set as_pass=password
:set as_enable=true

Danach geht's dann los.
Ihr seid herzlich zum testen eingeladen.
Sollte das Ganze irgendwas nicht machen wie ihr wollt, dann sagt mir das
bitte[3]. Sollte der Code cmus zum sterben zwingen, dann bitte die 'cmus-debug'
Datei und den gdb-Backtrace (bt full) an mich[3] (Ach ja, sagte ich, das ihr mit
DEBUG=2 kompilieren sollt?).

Wenn Interesse besteht, wäre ich evtl. auch bereit ein Debian Paket zu bauen.
Allerdings nur für i386, da mir keine andere Architektur zur Verfügung steht.

[Update]

Tjaja...
Man sollte nicht davon ausgehen, daß ein Datentyp signed ist, wenn man sich
nicht sicher ist. So geschehen in diesem Code.
Bei mir ist cmus nämlich gerade mit dem Patch mitten im as_submit()
abgeschmiert. Grund?
Ganz einfach: read() gab etwas negatives zurück, das wurde in meine size_t
Variable gespeichert, die ja unsigned ist, und was passiert dann?
Genau, Komplementdarstellung von negativen Werten und so... Im unsigned
Bereich ist das dann mal eben ein richtig hoher Wert.
Dadurch dachte mein Stringhandling Code dann, daß der aktuelle String bereits
unfaßbar lang ist, und wollte da noch was dranhängen. Das geht dann natürlich
richtig derbe in die Hose. Mit segfault und allem was dazu gehört.
Ich hab dafür mal einen mickrigen (aber nötigen) Patch[4] fertig gemacht.

[1] Patch gegen git-head
[2] Patch gegen 2.1.0 Release
[3] Mich wegen dem Patch beschimpfen
[4] Patch für das size_t Problem

Powered by zblog
valid css | valid xhtml | utf-8 encoded | best viewed with anybrowser