Reputation: 12113
My problem is I'm not sure how to interface them. Do I need to have pidgin installed in a particular way in order for dbus to interface with it? and if not does the pidgin gui have to be running in order for dbus to utilize it?
Upvotes: 4
Views: 2271
Reputation: 26778
The code below has an example of showing the buddy list when it is hidden and another example of starting an IM conversation with a specific contact.
import dbus
BUS_ARGS = ('im.pidgin.purple.PurpleService', '/im/pidgin/purple/PurpleObject')
obj = dbus.SessionBus().get_object(*BUS_ARGS)
purple = dbus.Interface(obj, 'im.pidgin.purple.PurpleInterface')
# show buddy list if it is hidden
purple.PurpleBlistSetVisible(1)
# start IM conversation with specific contact
account = purple.PurpleAccountsFindConnected('', '')
conversation = purple.PurpleConversationNew(1, account, '[email protected]')
I can recommend a number of useful resources relating to using dbus with pidgin:
Upvotes: 2
Reputation: 27850
You do not need to do any special configuration of Pidgin to use D-Bus, however it must be running if you want to use it. You can check the script I'm using to control Pidgin status from the NetworkManager-dispatcher (part 1, part 2) as a sample how to interface Pidgin via D-Bus from python.
Upvotes: 0
Reputation: 11246
A really useful tool to use when getting started with using DBUS to interface with Pidgin is D-Feet. You can see all the available methods you can call and even execute them directly from the GUI.
Upvotes: 2
Reputation: 919
import dbus
from dbus.mainloop.glib import DBusGMainLoop
main_loop = DBusGMainLoop()
session_bus = dbus.SessionBus(mainloop = main_loop)
obj = session_bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
Then you can use the purple object to call some methods like this:
status = purple.PurpleSavedstatusNew("", current)
purple.PurpleSavedstatusSetMessage(status, message)
purple.PurpleSavedstatusActivate(status)
Upvotes: 4
Reputation: 12379
As per this source you could do the following :
#!/usr/bin/env python
def cb_func(account, rec, message):
#change message here somehow?
print message
import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(cb_func,
dbus_interface="im.pidgin.purple.PurpleInterface",
signal_name="SendingImMsg")
loop = gobject.MainLoop()
loop.run()
Probably you can get started with this lead.
Upvotes: 5