This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Moodbar mit openSUSE 11.2 (und ein altes Ruby-Script)

Tags: None
(comma "," separated)
User avatar
Jumpy
Registered Member
Posts
13
Karma
0
OS
Hallo

Da ja nun die Moodbar zurückgekehrt ist, musste ich sie haben :D

Unter http://download.opensuse.org/repositori ... SUSE_11.2/ steht die moodbar auch für openSUSE 11.2 bereit!
Aus alten (1.4.x und dcop) Tagen habe ich noch ein Ruby-Script: moodbar_util.rb
Ob es nun (für jemanden der es kann) lohnt es an 2.2.2 und dbus anzupassen, kann ich nicht beurteilen.

Code: Select all
#!/usr/bin/ruby

# Simple moodbar file management utility by Joe Rabinoff
# This is also my first ever ruby script so bear with me


$moodbar_folder = "#{ENV['HOME']}/.kde/share/apps/amarok/moods/"


def usage()
    print "This is the moodbar file management utility\n"
    print "\n"
    print "Usage is:\n"
    print "   moodbar_util.rb -rename    Rename mood files" \
                 + " from any old naming scheme to the current one\n" \
        + "                              (not applicable when mood" \
                 + " files are stored with music)\n"
    print "   moodbar_util.rb -calcall   Calculate all un-calculated" \
                  + " mood files\n"
    exit(1)
end


def check_amarok_running()
    result = `dcop 'amarok*'`.split("\n")
    return (result.length > 0)
end


def get_devices()
    result = `dcop amarok collection query 'SELECT id, lastmountpoint FROM devices;'`.split("\n")
    ret = Hash.new()
    result.each_index do |i|
        ret[result[i].to_i] = result[i+1] if i % 2 == 0
    end
    return ret
end


def mood_name(url, deviceid)
    ret = url.gsub(/\//, ',')
    return deviceid.to_s + "," + ret
end


def rename()   
    print "Renaming mood files from outdated naming schemes...\n"

    # As far as I can tell, the best way to do this is just select all
    # tracks, check the old possible moodbar names, and rename them
    tracks = `dcop amarok collection query 'SELECT url, deviceid FROM tags;'`.split("\n")
    devices = get_devices

    0.step(tracks.length-1, 2) do |i|
        url      = tracks[i].sub(/\.[^\.]*$/, '.mood')
        deviceid = tracks[i+1].to_i

        path = url.sub(/\./, '')
   if devices.has_key?(deviceid)
       path = devices[deviceid] + path
   end
        moodfile  = $moodbar_folder + mood_name(url, deviceid)
        moodfile1 = $moodbar_folder + path.gsub(/\//, ',')

        next if FileTest.exists?(moodfile)
       
        if FileTest.exists?(moodfile1)
            system("mv", "-f", moodfile1, moodfile)
            print "Moved ", moodfile1, " to ", moodfile, "\n"
        end

    end
   
end


def calcall()
    print "Calculating all nonexisting moodbars...\n\n"

    tracks = `dcop amarok collection query 'SELECT url, deviceid FROM tags;'`.split("\n")
    devices = get_devices
    withMusic = (`dcop amarok script readConfig MoodsWithMusic`.chomp == "true")
   
    0.step(tracks.length-1, 2) do |i|
        url      = tracks[i]
        deviceid = tracks[i+1].to_i
       
        moodfile = ""
       
        songpath = url.sub(/\./, '')
        if devices.has_key?(deviceid)
            songpath = devices[deviceid] + songpath
        end

        if withMusic
            moodfile = songpath.sub(/\.[^\.]*$/, '.mood')
            moodfile = File.dirname(moodfile) + "/." + File.basename(moodfile)
        else
            moodfile = $moodbar_folder \
                + mood_name(url.sub(/\.[^\.]*$/, '.mood'), deviceid)
        end

        next if FileTest.exists?(moodfile) && FileTest.size(moodfile) > 0
        next unless FileTest.exists?(songpath)
       
        print "Saving moodbar for ", songpath, "\n"
        print "   to file ", moodfile, "\n"
        system("moodbar", "-o", moodfile, songpath)
        print "\n"

    end

end


$mode = ARGV[0]

if !check_amarok_running
    print "Amarok is not running!  Please start Amarok and re-run " \
          "this script.\n"
end

if $mode == "-rename"
    rename
elsif $mode == "-calcall"
    calcall
else
    usage
end
User avatar
Jumpy
Registered Member
Posts
13
Karma
0
OS
prospectzone01 wrote:Removed by Forum Administrator

Ist das jetzt SPAM oder nur dumm gelaufen?

Last edited by bcooksley on Wed Dec 30, 2009 10:23 pm, edited 1 time in total.
Reason: Remove spam quoting
User avatar
neverendingo
Administrator
Posts
2136
Karma
17
OS
Offensichtlich war es Spam. Beim nächsten Mal, es gibt einen "report post" button unter den posts, den kann man benutzen um ihn einfach zu melden. Die Admins oder Mods entscheiden dann ob es wirklich spam ist ;)


New to KDE Software? - get help from Userbase or ask questions on the Forums
Communicate.
Image
User avatar
Jumpy
Registered Member
Posts
13
Karma
0
OS
Hallo

Ich habe festgestellt das bei mir alle ".*.mood"-Dateien genau 3000 Bytes groß sind.
Die wenigen die beim überprüfen eine andere Größe hatten, haben nachdem sie neu angelegt wurden auch 3000 Bytes.

Meine Frage:
Sind die mood-Dateien BS- und Umgebungsunabhängig immer genau 3000 Bytes groß?

In einem in Amarok laufendem Script, das mood-Dateien anlegt, will ich kontrollieren ob eine evtl. vorhandene mood-Datei i.O. ist (wenn nicht wird diese neu angelegt).

Gibt es eine bessere Möglichkeit die mood-Dateien auf Korrektheit zu überprüfen?

Code: Select all
Importer.loadQtBinding( "qt.core" );

function makemoodbar()
{
   var source = new QFileInfo(Amarok.Engine.currentTrack().path);
   // Dem Dateinamen einen "."voranstellen und die ".Dateierweiterung" durch ".mood" ersetzen
   var destination = new QFileInfo(source.absolutePath() + '/.' + source.completeBaseName() + '.mood');
   if (!destination.exists()) {
      // Die mood-Datei existiert nicht und wird erstellt
      QProcess.execute('moodbar', new Array('-o', destination.absoluteFilePath(), source.absoluteFilePath()));
   } else {
      if (destination.size() != 3000) {
         // Die Datei hat hat nicht die richtige Größe von 3000 Bytes und wird gelöscht
         if (QFile.remove(destination.absoluteFilePath())) {
            // Die mood-Datei wird neu erstellt
            QProcess.execute('moodbar', new Array('-o', destination.absoluteFilePath(), source.absoluteFilePath()));
         }
      }
   }
}

Amarok.Engine.trackChanged.connect(makemoodbar);
seldor
Registered Member
Posts
3
Karma
0
Danke für dein Script wegen der moodbar, doch frage ich mich, ob es möglich wäre, die .mood Dateien wie früher irgendwo ins home/.kde4/.../amarok Verzeichnis zu speichern, was den Vorteil hätte, dass die Musiksammlung nicht von tonnenweise Zusatzdateien zugemüllt würde.
Weisst du, ob man in deinem Script einfach einen anderen Pfad angeben kann respektive wie man amarok sagen kann, wo es nach den .mood Dateien überhaupt sucht? Habe diesbezüglich leider nichts gefunden....
Wäre toll, wenn sie wieder im home sein könnten statt die Musiksammlung vollzupappen..

Vielen Dank
User avatar
Jumpy
Registered Member
Posts
13
Karma
0
OS
seldor wrote:Danke für dein Script wegen der moodbar, doch frage ich mich, ob es möglich wäre, die .mood Dateien wie früher irgendwo ins home/.kde4/.../amarok Verzeichnis zu speichern, was den Vorteil hätte, dass die Musiksammlung nicht von tonnenweise Zusatzdateien zugemüllt würde.
Weisst du, ob man in deinem Script einfach einen anderen Pfad angeben kann respektive wie man amarok sagen kann, wo es nach den .mood Dateien überhaupt sucht? Habe diesbezüglich leider nichts gefunden....
Wäre toll, wenn sie wieder im home sein könnten statt die Musiksammlung vollzupappen..

Vielen Dank

Den Speicherort kann man im Script anpassen, wie man aber Amarok veranlasst die mood-Datei der entsprechenden Media-Datei zuzuordnen ist mir nicht bekannt.


Bookmarks



Who is online

Registered users: Bing [Bot], Google [Bot], Yahoo [Bot]