From: Adam Z. <ada...@sf...> - 2006-05-30 04:16:52
|
Hi everyone, I'm writing a small program in python to update gaim's away/friendly messages with the currently playing song from rhythmbox (like the gaim-rhythmbox plugin, but for gaim 2). The problem I'm having is that nothing is being updated. Afterwards if I choose to set the msn friendly name, however, the updated name appears in the dialog (I assume the same thing is happening with the away messages, as the program gets the "proper" message the next time). Is there another dbus method I have to call to actually update everything? Thanks in advance. (please CC me on replies, as I'm not subscribed to the list) -Adam Here's the code. Most of it is copied from an example rhythmbox python script, and gaim-remote.py: #!/usr/bin/python # Update gaim messages and friendly names with information for currently playing song import dbus import dbus.glib import gobject class IMAccount: # empty class to put account variales into pass bus = dbus.SessionBus() rbshellobj = bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Shell') rbshell = dbus.Interface(rbshellobj, 'org.gnome.Rhythmbox.Shell') rbplayerobj = bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player') rbplayer = dbus.Interface(rbplayerobj, 'org.gnome.Rhythmbox.Player') gaimobj = bus.get_object('net.sf.gaim.GaimService', '/net/sf/gaim/GaimObject') gaim = dbus.Interface(gaimobj, 'net.sf.gaim.GaimInterface') def playing_uri_changed(uri): props = rbshell.getSongProperties(uri) value = "Now Playing: " + props['artist'] + " - " + props['title'] # print value accounts = gaim.GaimAccountsGetAllActive() for account in accounts: protocol = gaim.GaimAccountGetProtocolId(account) status = gaim.GaimAccountGetActiveStatus(account) status_id = gaim.GaimStatusTypeGetId(gaim.GaimStatusGetType(gaim.GaimAccountGetActiveStatus(account))) if (protocol == 'prpl-oscar') | (protocol == 'prpl-jabber'): # set the away message for oscar and jabber message = gaim.GaimStatusGetAttrString(status, 'message') # print message if message.find("Now Playing:") != -1: message = message[:message.find("Now Playing:")] gaim.GaimStatusSetAttrString(status, 'message', message + value) elif protocol == 'prpl-msn': # set the friendly name for msn connection = gaim.GaimAccountGetConnection(account) message = gaim.GaimConnectionGetDisplayName(connection) # print message if message.find("Now Playing:") != -1: message = message[:message.find("Now Playing:")] gaim.GaimConnectionSetDisplayName(connection, message + value) rbplayer.connect_to_signal('playingUriChanged', playing_uri_changed) loop = gobject.MainLoop() loop.run() -- Adam Zimmerman <ada...@sf...> CREATIVITY - http://mirrors.creativecommons.org/movingimages/Building_on_the_Past.mpg ALWAYS - http://randomfoo.net/oscon/2002/lessig/ BUILDS - http://www.theopencd.org/ ON THE PAST - http://free-culture.org/freecontent/ -- One of the pleasures of reading old letters is the knowledge that they need no answer. -- George Gordon, Lord Byron |