Mon, 23 Apr 2007 17:19:11 +0000
Death to // comments.
| 14582 | 1 | #!/usr/bin/python |
| 2 | ||
| 3 | import dbus | |
| 4 | import re | |
| 5 | import sys | |
| 6 | import time | |
| 7 | import urllib | |
| 8 | ||
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
9 | obj = dbus.SessionBus().get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
10 | purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") |
| 14582 | 11 | |
| 12 | class CheckedObject: | |
| 13 | def __init__(self, obj): | |
| 14 | self.obj = obj | |
| 15 | ||
| 16 | def __getattr__(self, attr): | |
| 17 | return CheckedAttribute(self, attr) | |
| 18 | ||
| 19 | class CheckedAttribute: | |
| 20 | def __init__(self, cobj, attr): | |
| 21 | self.cobj = cobj | |
| 22 | self.attr = attr | |
| 23 | ||
| 24 | def __call__(self, *args): | |
|
16207
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
25 | # Redirect stderr to suppress the printing of an " Introspect error" |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
26 | # message if nothing is listening on the bus. We print a friendly |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
27 | # error message ourselves. |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
28 | real_stderr = sys.stderr |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
29 | sys.stderr = None |
| 14582 | 30 | result = self.cobj.obj.__getattr__(self.attr)(*args) |
|
16207
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
31 | sys.stderr = real_stderr |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
32 | |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
33 | # This can be useful for debugging. |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
34 | # if (result == 0): |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
35 | # print "Error: " + self.attr + " " + str(args) + " returned " + str(result) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
36 | |
| 14582 | 37 | return result |
| 38 | ||
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
39 | cpurple = CheckedObject(purple) |
| 14582 | 40 | |
| 41 | def extendlist(list, length, fill): | |
| 42 | if len(list) < length: | |
| 43 | return list + [fill] * (length - len(list)) | |
| 44 | else: | |
| 45 | return list | |
| 46 | ||
| 47 | def convert(value): | |
| 48 | try: | |
| 49 | return int(value) | |
| 50 | except: | |
| 51 | return value | |
| 52 | ||
| 53 | def findaccount(protocolname, accountname=""): | |
|
16207
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
54 | # prefer connected accounts |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
55 | account = cpurple.PurpleAccountsFindConnected(accountname, protocolname) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
56 | if (account != 0): |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
57 | return account |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
58 | |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
59 | # try to get any account and connect it |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
60 | account = cpurple.PurpleAccountsFindAny(accountname, protocolname) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
61 | if (account == 0): |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
62 | print "No matching account found." |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
63 | sys.exit(1) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
64 | |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
65 | purple.PurpleAccountSetStatusVargs(account, "online", 1) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
66 | purple.PurpleAccountConnect(account) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
67 | return account |
| 14582 | 68 | |
| 69 | def goim(account, screenname, message=None): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
70 | # XXX: 1 == PURPLE_CONV_TYPE_IM |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
71 | conversation = cpurple.PurpleConversationNew(1, account, screenname) |
| 14582 | 72 | if message: |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
73 | purple.PurpleConvSendConfirm(conversation, message) |
| 14582 | 74 | |
| 75 | def gochat(account, params, message=None): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
76 | connection = cpurple.PurpleAccountGetConnection(account) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
77 | purple.ServJoinChat(connection, params) |
| 14582 | 78 | |
| 79 | if message != None: | |
| 80 | for i in range(20): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
81 | # XXX: 2 == PURPLE_CONV_TYPE_CHAT |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
82 | conversation = purple.PurpleFindConversationWithAccount(2, params.get("channel", params.get("room")), account) |
| 14582 | 83 | if conversation: |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
84 | purple.PurpleConvSendConfirm(conversation, message) |
| 14582 | 85 | break |
| 86 | else: | |
| 87 | time.sleep(0.5) | |
| 88 | ||
| 89 | def addbuddy(account, screenname, group="", alias=""): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
90 | cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias) |
| 14582 | 91 | |
| 92 | ||
| 93 | def aim(uri): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
94 | protocol = "prpl-aim" |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
95 | match = re.match(r"^(aim):([^?]*)(\?(.*))", uri) |
| 14582 | 96 | if not match: |
| 97 | print "Invalid aim URI: %s" % uri | |
| 98 | return | |
| 99 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
100 | command = urllib.unquote_plus(match.group(2)) |
| 14582 | 101 | paramstring = match.group(4) |
| 102 | params = {} | |
| 103 | if paramstring: | |
| 104 | for param in paramstring.split("&"): | |
| 105 | key, value = extendlist(param.split("=", 1), 2, "") | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
106 | params[key] = urllib.unquote_plus(value) |
| 14582 | 107 | accountname = params.get("account", "") |
| 108 | screenname = params.get("screenname", "") | |
| 109 | ||
| 110 | account = findaccount(protocol, accountname) | |
| 111 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
112 | if command.lower() == "goim": |
| 14582 | 113 | goim(account, screenname, params.get("message")) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
114 | elif command.lower() == "gochat": |
| 14582 | 115 | gochat(account, params) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
116 | elif command.lower() == "addbuddy": |
| 14582 | 117 | addbuddy(account, screenname, params.get("group", "")) |
| 118 | ||
| 119 | def gg(uri): | |
| 120 | protocol = "prpl-gg" | |
| 121 | match = re.match(r"^gg:(.*)", uri) | |
| 122 | if not match: | |
| 123 | print "Invalid gg URI: %s" % uri | |
| 124 | return | |
| 125 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
126 | screenname = urllib.unquote_plus(match.group(1)) |
| 14582 | 127 | account = findaccount(protocol) |
| 128 | goim(account, screenname) | |
| 129 | ||
| 130 | def icq(uri): | |
|
16205
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
131 | protocol = "prpl-icq" |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
132 | match = re.match(r"^(icq):([^?]*)(\?(.*))", uri) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
133 | if not match: |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
134 | print "Invalid aim URI: %s" % uri |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
135 | return |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
136 | |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
137 | command = urllib.unquote_plus(match.group(2)) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
138 | paramstring = match.group(4) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
139 | params = {} |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
140 | if paramstring: |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
141 | for param in paramstring.split("&"): |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
142 | key, value = extendlist(param.split("=", 1), 2, "") |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
143 | params[key] = urllib.unquote_plus(value) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
144 | accountname = params.get("account", "") |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
145 | screenname = params.get("screenname", "") |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
146 | |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
147 | account = findaccount(protocol, accountname) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
148 | |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
149 | if command.lower() == "goim": |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
150 | goim(account, screenname, params.get("message")) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
151 | elif command.lower() == "gochat": |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
152 | gochat(account, params) |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
153 | elif command.lower() == "addbuddy": |
|
397be242f4a4
Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents:
15987
diff
changeset
|
154 | addbuddy(account, screenname, params.get("group", "")) |
| 14582 | 155 | |
| 156 | def irc(uri): | |
| 157 | protocol = "prpl-irc" | |
| 158 | match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri) | |
| 159 | if not match: | |
| 160 | print "Invalid irc URI: %s" % uri | |
| 161 | return | |
| 162 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
163 | server = urllib.unquote_plus(match.group(2)) or "" |
| 14582 | 164 | target = match.group(3) or "" |
| 165 | query = match.group(5) or "" | |
| 166 | ||
| 167 | modifiers = {} | |
| 168 | if target: | |
| 169 | for modifier in target.split(",")[1:]: | |
| 170 | modifiers[modifier] = True | |
| 171 | ||
| 172 | isnick = modifiers.has_key("isnick") | |
| 173 | ||
| 174 | paramstring = match.group(5) | |
| 175 | params = {} | |
| 176 | if paramstring: | |
| 177 | for param in paramstring.split("&"): | |
| 178 | key, value = extendlist(param.split("=", 1), 2, "") | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
179 | params[key] = urllib.unquote_plus(value) |
| 14582 | 180 | |
| 181 | account = findaccount(protocol) | |
| 182 | ||
| 183 | if (target != ""): | |
| 184 | if (isnick): | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
185 | goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg")) |
| 14582 | 186 | else: |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
187 | channel = urllib.unquote_plus(target.split(",")[0]) |
| 14582 | 188 | if channel[0] != "#": |
| 189 | channel = "#" + channel | |
| 190 | gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg")) | |
| 191 | ||
| 192 | def msnim(uri): | |
| 193 | protocol = "prpl-msn" | |
| 194 | match = re.match(r"^msnim:([^?]*)(\?(.*))", uri) | |
| 195 | if not match: | |
| 196 | print "Invalid msnim URI: %s" % uri | |
| 197 | return | |
| 198 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
199 | command = urllib.unquote_plus(match.group(1)) |
| 14582 | 200 | paramstring = match.group(3) |
| 201 | params = {} | |
| 202 | if paramstring: | |
| 203 | for param in paramstring.split("&"): | |
| 204 | key, value = extendlist(param.split("=", 1), 2, "") | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
205 | params[key] = urllib.unquote_plus(value) |
| 14582 | 206 | screenname = params.get("contact", "") |
| 207 | ||
| 208 | account = findaccount(protocol) | |
| 209 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
210 | if command.lower() == "chat": |
| 14582 | 211 | goim(account, screenname) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
212 | elif command.lower() == "add": |
| 14582 | 213 | addbuddy(account, screenname) |
| 214 | ||
| 215 | def sip(uri): | |
| 216 | protocol = "prpl-simple" | |
| 217 | match = re.match(r"^sip:(.*)", uri) | |
| 218 | if not match: | |
| 219 | print "Invalid sip URI: %s" % uri | |
| 220 | return | |
| 221 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
222 | screenname = urllib.unquote_plus(match.group(1)) |
| 14582 | 223 | account = findaccount(protocol) |
| 224 | goim(account, screenname) | |
| 225 | ||
| 226 | def xmpp(uri): | |
| 227 | protocol = "prpl-jabber" | |
|
15056
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
228 | match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri) |
| 14582 | 229 | if not match: |
| 230 | print "Invalid xmpp URI: %s" % uri | |
| 231 | return | |
| 232 | ||
|
15056
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
233 | tmp = match.group(3) |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
234 | if (tmp): |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
235 | accountname = urllib.unquote_plus(tmp) |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
236 | else: |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
237 | accountname = "" |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
238 | |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
239 | screenname = urllib.unquote_plus(match.group(5)) |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
240 | |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
241 | tmp = match.group(7) |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
242 | if (tmp): |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
243 | command = urllib.unquote_plus(tmp) |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
244 | else: |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
245 | command = "" |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
246 | |
|
241c30f7c244
[gaim-migrate @ 17773]
Richard Laager <rlaager@pidgin.im>
parents:
14601
diff
changeset
|
247 | paramstring = match.group(9) |
| 14582 | 248 | params = {} |
| 249 | if paramstring: | |
| 250 | for param in paramstring.split(";"): | |
| 251 | key, value = extendlist(param.split("=", 1), 2, "") | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
252 | params[key] = urllib.unquote_plus(value) |
| 14582 | 253 | |
| 254 | account = findaccount(protocol, accountname) | |
| 255 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
256 | if command.lower() == "message": |
| 14582 | 257 | goim(account, screenname, params.get("body")) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
258 | elif command.lower() == "join": |
| 14582 | 259 | room, server = screenname.split("@") |
| 260 | gochat(account, {"room": room, "server": server}) | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
261 | elif command.lower() == "roster": |
| 14582 | 262 | addbuddy(account, screenname, params.get("group", ""), params.get("name", "")) |
| 263 | else: | |
| 264 | goim(account, screenname) | |
| 265 | ||
| 266 | def ymsgr(uri): | |
| 267 | protocol = "prpl-yahoo" | |
| 268 | match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri) | |
| 269 | if not match: | |
| 270 | print "Invalid ymsgr URI: %s" % uri | |
| 271 | return | |
| 272 | ||
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
273 | command = urllib.unquote_plus(match.group(1)) |
|
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
274 | screenname = urllib.unquote_plus(match.group(3)) |
| 14582 | 275 | paramstring = match.group(5) |
| 276 | params = {} | |
| 277 | if paramstring: | |
| 278 | for param in paramstring.split("&"): | |
| 279 | key, value = extendlist(param.split("=", 1), 2, "") | |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
280 | params[key] = urllib.unquote_plus(value) |
| 14582 | 281 | |
| 282 | account = findaccount(protocol) | |
| 283 | ||
|
14601
8aa717885b14
[gaim-migrate @ 17260]
Richard Laager <rlaager@pidgin.im>
parents:
14597
diff
changeset
|
284 | if command.lower() == "sendim": |
| 14582 | 285 | goim(account, screenname, params.get("m")) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
286 | elif command.lower() == "chat": |
| 14582 | 287 | gochat(account, {"room": screenname}) |
|
14597
f6b179d6babb
[gaim-migrate @ 17256]
Richard Laager <rlaager@pidgin.im>
parents:
14582
diff
changeset
|
288 | elif command.lower() == "addfriend": |
| 14582 | 289 | addbuddy(account, screenname) |
| 290 | ||
| 291 | ||
| 292 | def main(argv=sys.argv): | |
| 293 | if len(argv) != 2: | |
| 294 | print "Usage: %s URI" % argv[0] | |
| 295 | print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0] | |
| 296 | return | |
| 297 | ||
| 298 | uri = argv[1] | |
| 299 | type = uri.split(":")[0] | |
| 300 | ||
|
16207
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
301 | try: |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
302 | if type == "aim": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
303 | aim(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
304 | elif type == "gg": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
305 | gg(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
306 | elif type == "icq": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
307 | icq(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
308 | elif type == "irc": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
309 | irc(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
310 | elif type == "msnim": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
311 | msnim(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
312 | elif type == "sip": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
313 | sip(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
314 | elif type == "xmpp": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
315 | xmpp(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
316 | elif type == "ymsgr": |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
317 | ymsgr(uri) |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
318 | else: |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
319 | print "Unkown protocol: %s" % type |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
320 | except dbus.dbus_bindings.DBusException: |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
321 | print "ERROR: Is there a libpurple-powered client (e.g. Pidgin or Finch) running?" |
|
b4b168c28673
Print decent error messages instead of stack traces if there's a problem.
Richard Laager <rlaager@pidgin.im>
parents:
16205
diff
changeset
|
322 | |
| 14582 | 323 | |
| 324 | if __name__ == "__main__": | |
| 325 | main() |