src/gaim-notifications-example.py

Mon, 28 Nov 2005 01:50:56 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Mon, 28 Nov 2005 01:50:56 +0000
changeset 12242
e7fc1748eb56
parent 11331
6e06ed40a312
child 13221
98e6b83ab770
permissions
-rw-r--r--

[gaim-migrate @ 14544]
Rework the notify API close callbacks. They are now called by the core, instead of the UI. Prior to a couple days ago, they weren't actually implemented in the UI at all.

As a side note, if anyone knows why gpointer is declared as a T_GaimObj instead of a T_PTR, please let me know. That seems wrong, especially since void * is a T_PTR and gconstpointer is a T_PTR. This may or may not cause problems for the notify change (void * -> gpointer) to user_data. NOTE: I did not change this, even though I think it's wrong.

11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
1 #!/usr/bin/env python
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
2
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
3 # This is a simple gaim notification server.
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
4 # It shows notifications when your buddy signs on or you get an IM message.
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
5 #
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
6 # This script requires Python 2.4 and PyGTK bindings
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
7 #
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
8 # Note that all function names are resolved dynamically, no
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
9 # gaim-specific library is needed.
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
10
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
11 import dbus
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
12 import dbus.glib
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
13 import dbus.decorators
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
14 import gobject
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
15 import os
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
16
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
17 def ensureimconversation(conversation, account, name):
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
18 if conversation != 0:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
19 return conversation
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
20 else:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
21 # 1 = GAIM_CONV_IM
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
22 return gaim.GaimConversationNew(1, account, name)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
23
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
24 def receivedimmsg(account, name, message, conversation, flags):
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
25 buddy = gaim.GaimFindBuddy(account, name)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
26 if buddy != 0:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
27 alias = gaim.GaimBuddyGetAlias(buddy)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
28 else:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
29 alias = name
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
30
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
31 text = "%s says %s" % (alias, message)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
32 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
33 "'So what?','Show me',Close,Abuse", text)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
34
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
35 if code == 101: # so what?
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
36 pass
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
37 else:
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
38 conversation = ensureimconversation(conversation, account, name)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
39
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
40 if code == 102: # show me
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
41 window = gaim.GaimConversationGetWindow(conversation)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
42 gaim.GaimConvWindowRaise(window)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
43
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
44 if code == 103: # close
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
45 gaim.GaimConversationDestroy(conversation)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
46
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
47 if code == 104: # abuse
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
48 im = gaim.GaimConversationGetImData(conversation)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
49 gaim.GaimConvImSend(im, "Go away you f...")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
50
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
51
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
52 def buddysignedon(buddyid):
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
53 alias = gaim.GaimBuddyGetAlias(buddyid)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
54 text = "%s is online" % alias
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
55
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
56 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
57 "'So what?','Let's talk'", text)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
58
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
59 if code == 101: # so what?
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
60 pass
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
61
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
62 if code == 102: # let's talk
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
63 name = gaim.GaimBuddyGetName(buddyid)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
64 account = gaim.GaimBuddyGetAccount(buddyid)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
65 gaim.GaimConversationNew(1, account, name)
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
66
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
67
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
68 bus = dbus.SessionBus()
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
69 obj = bus.get_object("org.gaim.GaimService", "/org/gaim/GaimObject")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
70 gaim = dbus.Interface(obj, "org.gaim.GaimInterface")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
71
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
72 bus.add_signal_receiver(receivedimmsg,
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
73 dbus_interface = "org.gaim.GaimInterface",
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
74 signal_name = "ReceivedImMsg")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
75
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
76 bus.add_signal_receiver(buddysignedon,
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
77 dbus_interface = "org.gaim.GaimInterface",
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
78 signal_name = "BuddySignedOn")
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
79
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
80 print """This is a simple gaim notification server.
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
81 It shows notifications when your buddy signs on or you get an IM message."""
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
82
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
83 loop = gobject.MainLoop()
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
84 loop.run()
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
85
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
86

mercurial