#!/usr/bin/env python

### BEGIN PLUGIN INFO
# [plugin]
# plugin_format: 0, 0
# name: Gajim tune
# version: 0, 0, 1
# description: Update the MPRIS (in Gajim etc.) tune information.
# author: Fomin Denis
# author_email: fominde@gmail.com
# url: http://sonata.berlios.de
# license: GPL v3 or later
# [capabilities]
# enablables: on_enable
# playing_song_observers: on_song_change
### END PLUGIN INFO

import gtk, pango
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop

songlabel = None
lasttune = ''
tune = None

# this gets called when the plugin is loaded, enabled, or disabled:
def on_enable(state):
    global tune
    if state and not tune:
        tune = mpdtune()
        dbus.SessionBus(mainloop = DBusGMainLoop())
    else:
        if tune:
            title = artist = album = ''
            tune.TrackChange(dbus.Dictionary(
                        {'title' : title, 'artist' : artist, 'album' : album}
                        ))


def on_song_change(songinfo):
    global tune, lasttune
    if lasttune == songinfo:
        return
    lasttune = songinfo
    title = artist = album = ''

    if not songinfo:
        # mpd stopped
        if tune:
            tune.TrackChange(dbus.Dictionary(
                        {'title' : title, 'artist' : artist, 'album' : album}))
        return

    if 'title' in songinfo:
        title = songinfo['title']
    if 'artist' in songinfo:
        artist = songinfo['artist']
    if 'album' in songinfo:
        album = songinfo['album']
    if 'name' in songinfo and artist =='':
        artist = songinfo['name']
    if 'file' in songinfo and title =='':
        album = songinfo['file']
        if not album.startswith('http:'):
            title = album.rpartition('/')[2]
    if tune:
        tune.TrackChange(dbus.Dictionary(
                    {'title' : title, 'artist' : artist, 'album' : album}
                    ))

class mpdtune(dbus.service.Object):
    def __init__(self):
        dbus.service.Object.__init__(self, dbus.SessionBus(), '/Player')
    @dbus.service.signal(dbus_interface = 'org.freedesktop.MediaPlayer')
    def TrackChange(self, trackinfo):
        return

