You are not logged in.

#1 2009-05-17 06:08:52

Vipermaseg
Member
From: Spain
Registered: 2008-12-12
Posts: 62

Amarok2 in Conky

Hi!

I'm trying to display the data of the actual song in amarok2 in conky.

I don't have any problem getting the common information by the command qdbus, but I still want to know the total time of the song and the reproduced portion.

Here my script:

#!/bin/bash
# amaroK info display script by eirc <eirc.eirc@gmail.com>
#
# requirements: amaroK (!)
# for Collection stats to work amarok must be using
# mySQL to store it's collection

case "$1" in

# Now Playing Info
artist) 
    str=`qdbus org.kde.amarok /Player GetMetadata | grep artist`
    #if (( $str )); then    
        echo ${str:0:40}
    #else
    #    str=`dcop amarok player path | gawk 'BEGIN {FS="/"} {print $(NF-1);}'`
    #    echo ${str:0:40}
    #fi
    ;;
title)  
    str=`qdbus org.kde.amarok /Player GetMetadata | grep title`
    #if (( $str )); then
           echo ${str:0:40}
    #else
    #    str=`dcop amarok player path | gawk 'BEGIN {FS="/"} {print $NF;}'`
    #    echo ${str:0:40}
    #fi
    ;;
album)  qdbus org.kde.amarok /Player GetMetadata | grep album ;;
year)   qdbus org.kde.amarok /Player GetMetadata | grep year ;;
genre)  qdbus org.kde.amarok /Player GetMetadata | grep genre ;;
progress)
    curr=`dcop amarok player trackCurrentTime` #<----- To be fixed
    tot=`dcop amarok player trackTotalTime` #<----- To be fixed
    if (( $tot )); then
        expr $curr \* 100  / $tot
    fi
    ;;
currenttime)
    tmp=`dcop amarok player trackCurrentTime` #<----- To be fixed
    min=`expr $tmp / 60`
    sec=`expr $tmp % 60`
    c=`expr $sec \< 10`
    if (($c)); then
        echo $min:0$sec
    else
        echo $min:$sec
    fi
    ;;
totaltime)
    tmp=`dcop amarok player trackTotalTime` #<----- To be fixed
    min=`expr $tmp / 60`
    sec=`expr $tmp % 60`
    c=`expr $sec \< 10`
    if (($c)); then
        echo $min:0$sec
    else
        echo $min:$sec
    fi
    ;;

# Collection Info
#totalArtists)      dcop amarok collection totalArtists ;;
#totalAlbums)       dcop amarok collection totalAlbums ;;
#totalTracks)       dcop amarok collection totalTracks ;;
#totalGenres)       dcop amarok collection totalGenres ;;
#totalCompilations) dcop amarok collection totalCompilations ;;

# Collection Stats
#most_songs_by_artist) dcop amarok collection query 'SELECT t1.name FROM artist t1 INNER JOIN tags t2 ON t1.id = t2.artist GROUP BY t2.artist ORDER BY COUNT(t2.artist) DESC LIMIT 1;' ;;
#most_songs_by_artist_n) dcop amarok collection query 'SELECT count(t2.artist) FROM artist t1 INNER JOIN tags t2 ON t1.id = t2.artist GROUP BY t2.artist ORDER BY COUNT(t2.artist) DESC LIMIT 1;' ;;
#most_songs_are_genre) dcop amarok collection query 'SELECT t1.name FROM genre t1 INNER JOIN tags t2 ON t1.id = t2.genre GROUP BY t2.genre ORDER BY COUNT(t2.genre) DESC LIMIT 1;' ;;
#most_songs_are_genre_n) dcop amarok collection query 'SELECT count(t2.genre) FROM genre t1 INNER JOIN tags t2 ON t1.id = t2.genre GROUP BY t2.genre ORDER BY COUNT(t2.genre) DESC LIMIT 1;' ;;
#most_songs_during_year) dcop amarok collection query 'SELECT t1.name FROM year t1 INNER JOIN tags t2 ON t1.id = t2.year GROUP BY t2.year ORDER BY COUNT(t2.year) DESC LIMIT 1;' ;;
#most_songs_during_year_n) dcop amarok collection query 'SELECT count(t2.year) FROM year t1 INNER JOIN tags t2 ON t1.id = t2.year GROUP BY t2.year ORDER BY COUNT(t2.year) DESC LIMIT 1;' ;;
#most_albums_by_artist) dcop amarok collection query 'SELECT name FROM artist WHERE id=(SELECT t1.artist from (SELECT artist FROM tags GROUP BY album) AS t1 GROUP BY t1.artist ORDER BY count(artist) DESC LIMIT 1);' ;;
#most_albums_by_artist_n) dcop amarok collection query 'SELECT count(artist) from (SELECT artist FROM tags GROUP BY album) AS t1 GROUP BY t1.artist ORDER BY count(artist) DESC LIMIT 1;' ;;
#most_albums_are_genre) dcop amarok collection query 'SELECT name FROM genre WHERE id=(SELECT t1.genre from (SELECT genre FROM tags GROUP BY album) AS t1 GROUP BY t1.genre ORDER BY count(genre) DESC LIMIT 1);' ;;
#most_albums_are_genre_n) dcop amarok collection query 'SELECT count(genre) from (SELECT genre FROM tags GROUP BY album) AS t1 GROUP BY t1.genre ORDER BY count(genre) DESC LIMIT 1;' ;;
#most_albums_during_year) dcop amarok collection query 'SELECT name FROM year WHERE id=(SELECT t1.year from (SELECT year FROM tags GROUP BY album) AS t1 GROUP BY t1.year ORDER BY count(year) DESC LIMIT 1);' ;;
#most_albums_during_year_n) dcop amarok collection query 'SELECT count(year) from (SELECT year FROM tags GROUP BY album) AS t1 GROUP BY t1.year ORDER BY count(year) DESC LIMIT 1;' ;;

esac

As you can see, I am just trying to adapt an amarok1 script.

Thanks a lot.

Offline

#2 2009-05-17 14:35:31

jwcxz
Member
Registered: 2008-09-23
Posts: 239
Website

Re: Amarok2 in Conky

Here's what I used (Python); sorry it's a bit messy:

#!/usr/bin/env python

import dbus

wdt = 25

bus = dbus.SessionBus()
obj = bus.get_object('org.mpris.amarok', '/Player')
mtd = obj.get_dbus_method('GetMetadata', 'org.freedesktop.MediaPlayer')
nfo = mtd()

if nfo.has_key('title'):
        print "\n"
        print nfo['title'].center(wdt)
        if nfo['artist'] != "":         print nfo['artist'].center(wdt)
        if nfo['album']  != "":         print nfo['album'].center(wdt)

You can always get more information than what I have there.  Just use any DBUS viewer (qdbusviewer is pretty nice) and you'll find out what you can display.


-- jwc
http://jwcxz.com/ | blog
dotman - manage your dotfiles across multiple environments
icsy - an alarm for powernappers

Offline

#3 2009-05-17 16:20:24

Vipermaseg
Member
From: Spain
Registered: 2008-12-12
Posts: 62

Re: Amarok2 in Conky

Thanks, it seems that the progress of the song is not displayed in dbus, so I guess that it is impossible.

Offline

#4 2009-05-17 16:41:49

jwcxz
Member
Registered: 2008-09-23
Posts: 239
Website

Re: Amarok2 in Conky

Actually, it's in Player/ with method PositionGet.
It returns the number of milliseconds that have elapsed.

You can get the total time from the object that GetMetadata returns under the index mtime.

Edit: quick 'n' dirty script to display the percent of the song completed:

#!/usr/bin/env python

import dbus

bus = dbus.SessionBus()
obj = bus.get_object('org.mpris.amarok', '/Player')
mtd = obj.get_dbus_method('GetMetadata', 'org.freedesktop.MediaPlayer')
nfo = mtd()

if nfo.has_key('mtime') and nfo['mtime'] != 0:
    a = obj.get_dbus_method('PositionGet', 'org.freedesktop.MediaPlayer')
    b = a()
    print float(b) / float(nfo['mtime'])*100

Just use that in combination with ${execbar [script]} and you have a nice progress bar.

Last edited by jwcxz (2009-05-17 16:57:19)


-- jwc
http://jwcxz.com/ | blog
dotman - manage your dotfiles across multiple environments
icsy - an alarm for powernappers

Offline

Board footer

Powered by FluxBB