Ich wollte ja schon immer mal so ein paar Linux-Sachen veröffentlichen. Und weil ich heute wieder was dazugelernt habe, poste ich das gleich mal.
Die Aufgabe war, nach der Umstellung von Amarok 1.4 auf Banshee die Mediadatenbank mit zu nehmen. Das klappt ganz gut, nur die Punkte der Tracks gehen verloren. Dazu habe ich eine Abhilfe gesucht.
Gefunden habe ich zunächst ein Programm namens sqlitebrowser, mit dem man sqlite-Datenbanken bearbeiten kann. Damit ruft man einfach die Banshee-Datenbank auf und macht sich an die Arbeit :) Im Prinzip ist es eine SQL-Datenbank. Vermutlich fehlt hier und da was, sonst hieße es ja nicht “lite”, aber das stört hier wohl nicht.
Mein Ziel war es jetzt, aus den vergebenen Bewertungen, dem Alter und dem letzten Hörvergnügen eine Kennzahl zu erstellen. Ich habe zunächst der Bewertung das meiste Gewicht verliehen (75%). Danach sollte die durchschnittliche Abspielerei pro Tag den Rest beisteuern und die Anzahl der Tage, an denen der Track nicht gespielt wurde, wieder abgezogen werden. Am Ende kam diese Formel dabei heraus:
UPDATE CoreTracks SET Score = (Rating*15)+(PlayCount/(1307739500-DateAddedStamp)/86400)-((1307739500-LastPlayedStamp)/86400*0.01)
Achtung: 1307739500 ist ein Unixzeitstempel von heute, ich weiß den SQL-Funktion für einen Unixzeitstempel nicht aus dem Kopf. Also hier entweder die Funktion einbauen oder den aktuellen Zeitstempel.
Jetzt meckert aber Banshee, also müssen noch die Werte gerundet werden, und zwar auf 0 Stellen hinter dem Komma:
UPDATE CoreTracks SET Score = round(Score,0)
Als letztes werden noch die Negativen Zahlen in positive verwandelt. Da jetzt Tracks mit -5 Punkten +5 Punkte haben, kann man anstelle des “Score*-1″ auch eine 0 schreiben. Der Track hat dann 0 Punkte. Mir war das egal. Bei der durchsicht war kein Track mit mehr als -9 Punkten dabei. Vertretbar, wie ich meine.
UPDATE CoreTracks SET Score = Score *-1 WHERE Score < 0
Eigentlich ganz einfach. Man kann an der Formel noch schrauben und alles mehrfach probieren. Erst am Ende speichert man ab. Alle Fehlversuche dazwischen fliegen damit raus.