Mercurial > pidgin.yaz
diff src/dbus-client-example.py @ 11146:1c5398ccbeb0
[gaim-migrate @ 13217]
Gaim-DBUS signal export works with DBUS >= 0.35
Various gaim API functions available through DBUS
committer: Tailor Script <tailor@pidgin.im>
author | Piotr Zielinski <zielaj> |
---|---|
date | Fri, 22 Jul 2005 19:47:29 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dbus-client-example.py Fri Jul 22 19:47:29 2005 +0000 @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +# this is an example of a client that communicates with gaim using DBUS +# +# requires Python 2.4 and PyGTK bindings +# +# note that all function names are resolved dynamically, no +# gaim-specific library is needed + +import dbus +import dbus.glib +import dbus.decorators +import gobject +import os + +def receivedimmsg(account, name, message, conversation, flags): + buddy = gaim.GaimFindBuddy(account, name) + if buddy != 0: + alias = gaim.GaimBuddyGetAlias(buddy) + else: + alias = name + + text = "%s says %s" % (alias, message) + code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", + "'So what?','Show me',Close,Abuse", text) + + if code == 101: # so what? + pass + if code == 102: # show me + window = gaim.GaimConversationGetWindow(conversation) + gaim.GaimConvWindowRaise(window) + if code == 103: # close + gaim.GaimConversationDestroy(conversation) + if code == 104: # abuse + im = gaim.GaimConversationGetImData(conversation) + gaim.GaimConvImSend(im, "Go away you f...") + + +def buddysignedon(buddyid): + alias = gaim.GaimBuddyGetAlias(buddyid) + text = "%s is online" % alias + + code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", + "'So what?','Let's talk'", text) + + if code == 101: # so what? + pass + if code == 102: # let's talk + name = gaim.GaimBuddyGetName(buddyid) + account = gaim.GaimBuddyGetAccount(buddyid) + gaim.GaimConversationNew(1, account, name) + + +def talkto(buddyname, accountname, protocolname): + account = gaim.GaimAccountsFindConnected(accountname, protocolname) + if account != 0: + gaim.GaimConversationNew(1, account, buddyname) + + +bus = dbus.SessionBus() +obj = bus.get_object("org.gaim.GaimService", "/org/gaim/GaimObject") +gaim = dbus.Interface(obj, "org.gaim.GaimInterface") + +bus.add_signal_receiver(receivedimmsg, + dbus_interface = "org.gaim.GaimInterface", + signal_name = "ReceivedImMsg") +bus.add_signal_receiver(buddysignedon, + dbus_interface = "org.gaim.GaimInterface", + signal_name = "BuddySignedOn") + + +# Tell the remote object to emit the signal + +talkto("testone@localhost", "", "prpl-jabber") + +loop = gobject.MainLoop() +loop.run() + +