import dbus; import dbus.service import dbus.glib from dbus import DBusException from plugins.events import EventPlugin class DBusSignalFull(EventPlugin, dbus.service.Object): PLUGIN_ID = 'DBus Signals' PLUGIN_NAME = 'DBus Signals' PLUGIN_DESC = 'Emit DBus signals' PLUGIN_VERSION = '0.0.1' def __init__(self): try: bus = dbus.SessionBus() name = dbus.service.BusName('net.sacredchao.QuodLibet', bus=bus) path = '/net/sacredchao/QuodLibet/DBusSignalFull' dbus.service.Object.__init__(self, name, path) except DBusException: pass @dbus.service.signal(dbus_interface='net.sacredchao.QuodLibet') def SongStarted(self, song): pass @dbus.service.signal(dbus_interface='net.sacredchao.QuodLibet') def SongEnded(self, song, stopped): pass @dbus.service.signal(dbus_interface='net.sacredchao.QuodLibet') def SongPaused(self): pass @dbus.service.signal(dbus_interface='net.sacredchao.QuodLibet') def SongUnpaused(self): pass @dbus.service.signal(dbus_interface='net.sacredchao.QuodLibet') def SongSeeked(self, song, ms): pass def __dict(self, song): dict = {} for key, value in (song._song or {}).items(): if isinstance(value, unicode): dict[key] = value.encode('utf-8') elif not isinstance(value, str): dict[key] = str(value) else: dict[key] = value return dict def plugin_on_seek(self, song, ms): self.SongSeeked(self.__dict(song), ms) def plugin_on_song_started(self, song): self.SongStarted(self.__dict(song)) def plugin_on_song_ended(self, song, stopped): self.SongEnded(self.__dict(song)) def plugin_on_paused(self): self.SongPaused() def plugin_on_unpaused(self): self.SongUnpaused()