Tue, 17 Jan 2006 03:00:54 +0000
[gaim-migrate @ 15257]
Part of SF Patch #1406437 from Sadrul
This disconnects the signal handlers on the imhtml and its text buffer
that have the toolbar as the data parameter. As Sadrul put it, "It makes
sure that when an imhtml-attached toolbar is destroyed and the imhtml
still exists, the signal-callbacks don't get triggered."
committer: Richard Laager <rlaager@pidgin.im>
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
1 | #!/usr/bin/python |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
2 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
3 | import dbus |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
4 | import re |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
5 | import urllib |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
6 | import sys |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
7 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
8 | import xml.dom.minidom |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
9 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
10 | xml.dom.minidom.Element.all = xml.dom.minidom.Element.getElementsByTagName |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
11 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
12 | obj = dbus.SessionBus().get_object("org.gaim.GaimService", "/org/gaim/GaimObject") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
13 | gaim = dbus.Interface(obj, "org.gaim.GaimInterface") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
14 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
15 | class CheckedObject: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
16 | def __init__(self, obj): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
17 | self.obj = obj |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
18 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
19 | def __getattr__(self, attr): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
20 | return CheckedAttribute(self, attr) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
21 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
22 | class CheckedAttribute: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
23 | def __init__(self, cobj, attr): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
24 | self.cobj = cobj |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
25 | self.attr = attr |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
26 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
27 | def __call__(self, *args): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
28 | result = self.cobj.obj.__getattr__(self.attr)(*args) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
29 | if result == 0: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
30 | raise "Error: " + self.attr + " " + str(args) + " returned " + str(result) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
31 | return result |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
32 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
33 | cgaim = CheckedObject(gaim) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
34 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
35 | urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?" |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
36 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
37 | def extendlist(list, length, fill): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
38 | if len(list) < length: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
39 | return list + [fill] * (length - len(list)) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
40 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
41 | return list |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
42 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
43 | def convert(value): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
44 | try: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
45 | return int(value) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
46 | except: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
47 | return value |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
48 | |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
49 | def findaccount(accountname, protocolname): |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
50 | try: |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
51 | # prefer connected accounts |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
52 | account = cgaim.GaimAccountsFindConnected(accountname, protocolname) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
53 | return account |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
54 | except: |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
55 | # try to get any account and connect it |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
56 | account = cgaim.GaimAccountsFindAny(accountname, protocolname) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
57 | print gaim.GaimAccountGetUsername(account) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
58 | gaim.GaimAccountSetStatusVargs(account, "online", 1) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
59 | gaim.GaimAccountConnect(account) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
60 | return account |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
61 | |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
62 | |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
63 | def execute(uri): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
64 | match = re.match(urlregexp, uri) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
65 | protocol = match.group(2) |
| 12684 | 66 | if protocol == "aim" or protocol == "icq": |
| 67 | protocol = "oscar" | |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
68 | if protocol is not None: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
69 | protocol = "prpl-" + protocol |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
70 | command = match.group(5) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
71 | paramstring = match.group(7) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
72 | params = {} |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
73 | if paramstring is not None: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
74 | for param in paramstring.split("&"): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
75 | key, value = extendlist(param.split("=",1), 2, "") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
76 | params[key] = urllib.unquote(value) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
77 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
78 | accountname = params.get("account", "") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
79 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
80 | if command == "goim": |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
81 | print params |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
82 | account = findaccount(accountname, protocol) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
83 | conversation = cgaim.GaimConversationNew(1, account, params["screenname"]) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
84 | if "message" in params: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
85 | im = cgaim.GaimConversationGetImData(conversation) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
86 | gaim.GaimConvImSend(im, params["message"]) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
87 | return None |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
88 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
89 | elif command == "gochat": |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
90 | account = findaccount(accountname, protocol) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
91 | connection = cgaim.GaimAccountGetConnection(account) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
92 | return gaim.ServJoinChat(connection, params) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
93 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
94 | elif command == "addbuddy": |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
95 | account = findaccount(accountname, protocol) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
96 | return cgaim.GaimBlistRequestAddBuddy(account, params["screenname"], |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
97 | params.get("group", ""), "") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
98 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
99 | elif command == "setstatus": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
100 | if "account" in params: |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
101 | accounts = [cgaim.GaimAccountsFindAny(accountname, protocol)] |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
102 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
103 | accounts = gaim.GaimAccountsGetAllActive() |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
104 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
105 | for account in accounts: |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
106 | status = cgaim.GaimAccountGetStatus(account, params["status"]) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
107 | for key, value in params.items(): |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
108 | if key not in ["status", "account"]: |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
109 | gaim.GaimStatusSetAttrString(status, key, value) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
110 | gaim.GaimAccountSetStatusVargs(account, params["status"], 1) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
111 | return None |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
112 | |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
113 | elif command == "getinfo": |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
114 | account = findaccount(accountname, protocol) |
|
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
115 | connection = cgaim.GaimAccountGetConnection(account) |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
116 | return gaim.ServGetInfo(connection, params["screenname"]) |
|
11241
f62a71823fc3
[gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11187
diff
changeset
|
117 | |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
118 | elif command == "quit": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
119 | return gaim.GaimCoreQuit() |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
120 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
121 | elif command == "uri": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
122 | return None |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
123 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
124 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
125 | match = re.match(r"(\w+)\s*\(([^)]*)\)", command) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
126 | if match is not None: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
127 | name = match.group(1) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
128 | argstr = match.group(2) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
129 | if argstr == "": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
130 | args = [] |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
131 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
132 | args = argstr.split(",") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
133 | fargs = [] |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
134 | for arg in args: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
135 | fargs.append(convert(arg.strip())) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
136 | return gaim.__getattr__(name)(*fargs) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
137 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
138 | # introspect the object to get parameter names and types |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
139 | # this is slow because the entire introspection info must be downloaded |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
140 | data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\ |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
141 | Introspect() |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
142 | introspect = xml.dom.minidom.parseString(data).documentElement |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
143 | for method in introspect.all("method"): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
144 | if command == method.getAttribute("name"): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
145 | methodparams = [] |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
146 | for arg in method.all("arg"): |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
147 | if arg.getAttribute("direction") == "in": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
148 | value = params[arg.getAttribute("name")] |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
149 | type = arg.getAttribute("type") |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
150 | if type == "s": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
151 | methodparams.append(value) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
152 | elif type == "i": |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
153 | methodparams.append(int(value)) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
154 | else: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
155 | raise "Don't know how to handle type \"%s\"" % type |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
156 | return gaim.__getattr__(command)(*methodparams) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
157 | raise "Unknown command: %s" % command |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
158 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
159 | |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
160 | if len(sys.argv) == 1: |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
161 | print """This program uses DBus to communicate with gaim. |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
162 | |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
163 | Usage: |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
164 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
165 | %s "command1" "command2" ... |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
166 | |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
167 | Each command is of one of the three types: |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
168 | |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
169 | [protocol:]commandname?param1=value1¶m2=value2&... |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
170 | FunctionName?param1=value1¶m2=value2&... |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
171 | FunctionName(value1,value2,...) |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
172 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
173 | The second and third form are provided for completeness but their use |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
174 | is not recommended; use gaim-send or gaim-send-async instead. The |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
175 | second form uses introspection to find out the parameter names and |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
176 | their types, therefore it is rather slow. |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
177 | |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
178 | Examples of commands: |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
179 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
180 | jabber:goim?screenname=testone@localhost&message=hi |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
181 | jabber:gochat?room=TestRoom&server=conference.localhost |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
182 | jabber:getinfo?screenname=testone@localhost |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
183 | jabber:addbuddy?screenname=my friend |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
184 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
185 | setstatus?status=away&message=don't disturb |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
186 | quit |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
187 | |
|
11331
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
188 | GaimAccountsFindConnected?name=&protocol=prpl-jabber |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
189 | GaimAccountFindConnected(,prpl-jabber) |
|
6e06ed40a312
[gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11241
diff
changeset
|
190 | """ % sys.argv[0] |
|
11187
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
191 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
192 | for arg in sys.argv[1:]: |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
193 | print execute(arg) |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
194 | |
|
27beea38898f
[gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
195 |