Mon, 10 Oct 2005 17:59:48 +0000
[gaim-migrate @ 13914]
Some bits'n'pieces:
A bunch of memory leak fixes
Fix newly created accounts to connect in the currently active global
status
Fix the modify account dialog to only show relevant user options etc.
Update sametime to use some more of the new status stuff, it still
needs more love though.
Some s/online/available/ for consistency across prpls
Fix a racyness in disconnecting connections that want to die (fixes
the Yahoo crash when signing on somewhere else)
Sorry if I caused any conflicts!
|
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 |