annotate libgaim/gaim-url-handler @ 14837:118fd0dc5b6e

[gaim-migrate @ 17606] Add a "handle" parameter to gaim_proxy_connect(). It seemed like people thought this was a good idea. You can still cancel each gaim_proxy_connect() individually, if needed. I passed in NULL for the handle in most places. It might be better to pass in the gc in more places, but these changes do no harm, and they should help some Yahoo! things, and I wanted to get the API change in. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sat, 28 Oct 2006 20:04:03 +0000
parents b007392d72ff
children 5d71039b20eb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
1 #!/usr/bin/python
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
2
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
3 import dbus
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
4 import re
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
5 import sys
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
6 import time
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
7 import urllib
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
8
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
9 obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
10 gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
11
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
12 class CheckedObject:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
13 def __init__(self, obj):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
14 self.obj = obj
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
15
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
16 def __getattr__(self, attr):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
17 return CheckedAttribute(self, attr)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
18
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
19 class CheckedAttribute:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
20 def __init__(self, cobj, attr):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
21 self.cobj = cobj
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
22 self.attr = attr
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
23
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
24 def __call__(self, *args):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
25 result = self.cobj.obj.__getattr__(self.attr)(*args)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
26 if result == 0:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
27 raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
28 return result
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
29
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
30 cgaim = CheckedObject(gaim)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
31
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
32 def extendlist(list, length, fill):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
33 if len(list) < length:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
34 return list + [fill] * (length - len(list))
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
35 else:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
36 return list
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
37
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
38 def convert(value):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
39 try:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
40 return int(value)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
41 except:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
42 return value
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
43
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
44 def findaccount(protocolname, accountname=""):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
45 try:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
46 # prefer connected accounts
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
47 account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
48 return account
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
49 except:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
50 # try to get any account and connect it
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
51 account = cgaim.GaimAccountsFindAny(accountname, protocolname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
52 gaim.GaimAccountSetStatusVargs(account, "online", 1)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
53 gaim.GaimAccountConnect(account)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
54 return account
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
55
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
56 def goim(account, screenname, message=None):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
57 # XXX: 1 == GAIM_CONV_TYPE_IM
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
58 conversation = cgaim.GaimConversationNew(1, account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
59 if message:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
60 gaim.GaimConvSendConfirm(conversation, message)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
61
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
62 def gochat(account, params, message=None):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
63 connection = cgaim.GaimAccountGetConnection(account)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
64 gaim.ServJoinChat(connection, params)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
65
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
66 if message != None:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
67 for i in range(20):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
68 # XXX: 2 == GAIM_CONV_TYPE_CHAT
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
69 conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
70 if conversation:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
71 gaim.GaimConvSendConfirm(conversation, message)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
72 break
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
73 else:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
74 time.sleep(0.5)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
75
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
76 def addbuddy(account, screenname, group="", alias=""):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
77 cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
78
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
79
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
80 def aim(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
81 protocol = "prpl-oscar"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
82 match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
83 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
84 print "Invalid aim URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
85 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
86
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
87 command = urllib.unquote_plus(match.group(2))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
88 paramstring = match.group(4)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
89 params = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
90 if paramstring:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
91 for param in paramstring.split("&"):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
92 key, value = extendlist(param.split("=", 1), 2, "")
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
93 params[key] = urllib.unquote_plus(value)
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
94 accountname = params.get("account", "")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
95 screenname = params.get("screenname", "")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
96
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
97 account = findaccount(protocol, accountname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
98
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
99 if command.lower() == "goim":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
100 goim(account, screenname, params.get("message"))
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
101 elif command.lower() == "gochat":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
102 gochat(account, params)
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
103 elif command.lower() == "addbuddy":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
104 addbuddy(account, screenname, params.get("group", ""))
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
105
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
106 def gg(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
107 protocol = "prpl-gg"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
108 match = re.match(r"^gg:(.*)", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
109 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
110 print "Invalid gg URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
111 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
112
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
113 screenname = urllib.unquote_plus(match.group(1))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
114 account = findaccount(protocol)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
115 goim(account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
116
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
117 def icq(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
118 aim(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
119
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
120 def irc(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
121 protocol = "prpl-irc"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
122 match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
123 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
124 print "Invalid irc URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
125 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
126
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
127 server = urllib.unquote_plus(match.group(2)) or ""
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
128 target = match.group(3) or ""
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
129 query = match.group(5) or ""
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
130
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
131 modifiers = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
132 if target:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
133 for modifier in target.split(",")[1:]:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
134 modifiers[modifier] = True
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
135
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
136 isnick = modifiers.has_key("isnick")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
137
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
138 paramstring = match.group(5)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
139 params = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
140 if paramstring:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
141 for param in paramstring.split("&"):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
142 key, value = extendlist(param.split("=", 1), 2, "")
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
143 params[key] = urllib.unquote_plus(value)
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
144
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
145 account = findaccount(protocol)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
146
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
147 if (target != ""):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
148 if (isnick):
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
149 goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg"))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
150 else:
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
151 channel = urllib.unquote_plus(target.split(",")[0])
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
152 if channel[0] != "#":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
153 channel = "#" + channel
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
154 gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
155
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
156 def msnim(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
157 protocol = "prpl-msn"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
158 match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
159 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
160 print "Invalid msnim URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
161 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
162
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
163 command = urllib.unquote_plus(match.group(1))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
164 paramstring = match.group(3)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
165 params = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
166 if paramstring:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
167 for param in paramstring.split("&"):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
168 key, value = extendlist(param.split("=", 1), 2, "")
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
169 params[key] = urllib.unquote_plus(value)
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
170 screenname = params.get("contact", "")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
171
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
172 account = findaccount(protocol)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
173
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
174 if command.lower() == "chat":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
175 goim(account, screenname)
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
176 elif command.lower() == "add":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
177 addbuddy(account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
178
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
179 def sip(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
180 protocol = "prpl-simple"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
181 match = re.match(r"^sip:(.*)", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
182 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
183 print "Invalid sip URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
184 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
185
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
186 screenname = urllib.unquote_plus(match.group(1))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
187 account = findaccount(protocol)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
188 goim(account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
189
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
190 def xmpp(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
191 protocol = "prpl-jabber"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
192 match = re.match(r"^xmpp:(//([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
193 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
194 print "Invalid xmpp URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
195 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
196
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
197 accountname = urllib.unquote_plus(match.group(2)) or ""
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
198 screenname = urllib.unquote_plus(match.group(4))
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
199 command = urllib.unquote_plus(match.group(6))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
200 paramstring = match.group(8)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
201 params = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
202 if paramstring:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
203 for param in paramstring.split(";"):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
204 key, value = extendlist(param.split("=", 1), 2, "")
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
205 params[key] = urllib.unquote_plus(value)
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
206
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
207 account = findaccount(protocol, accountname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
208
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
209 if command.lower() == "message":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
210 goim(account, screenname, params.get("body"))
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
211 elif command.lower() == "join":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
212 room, server = screenname.split("@")
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
213 gochat(account, {"room": room, "server": server})
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
214 elif command.lower() == "roster":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
215 addbuddy(account, screenname, params.get("group", ""), params.get("name", ""))
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
216 else:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
217 goim(account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
218
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
219 def ymsgr(uri):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
220 protocol = "prpl-yahoo"
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
221 match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
222 if not match:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
223 print "Invalid ymsgr URI: %s" % uri
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
224 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
225
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
226 command = urllib.unquote_plus(match.group(1))
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
227 screenname = urllib.unquote_plus(match.group(3))
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
228 paramstring = match.group(5)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
229 params = {}
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
230 if paramstring:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
231 for param in paramstring.split("&"):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
232 key, value = extendlist(param.split("=", 1), 2, "")
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
233 params[key] = urllib.unquote_plus(value)
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
234
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
235 account = findaccount(protocol)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
236
14539
b007392d72ff [gaim-migrate @ 17260]
Richard Laager <rlaager@wiktel.com>
parents: 14535
diff changeset
237 if command.lower() == "sendim":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
238 goim(account, screenname, params.get("m"))
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
239 elif command.lower() == "chat":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
240 gochat(account, {"room": screenname})
14535
e3a640372b6e [gaim-migrate @ 17256]
Richard Laager <rlaager@wiktel.com>
parents: 14520
diff changeset
241 elif command.lower() == "addfriend":
14520
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
242 addbuddy(account, screenname)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
243
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
244
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
245 def main(argv=sys.argv):
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
246 if len(argv) != 2:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
247 print "Usage: %s URI" % argv[0]
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
248 print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0]
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
249 return
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
250
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
251 uri = argv[1]
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
252 type = uri.split(":")[0]
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
253
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
254 if type == "aim":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
255 aim(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
256 elif type == "gg":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
257 gg(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
258 elif type == "icq":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
259 icq(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
260 elif type == "irc":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
261 irc(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
262 elif type == "msnim":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
263 msnim(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
264 elif type == "sip":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
265 sip(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
266 elif type == "xmpp":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
267 xmpp(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
268 elif type == "ymsgr":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
269 ymsgr(uri)
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
270 else:
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
271 print "Unkown protocol: %s" % type
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
272
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
273 if __name__ == "__main__":
82b59abcaee4 [gaim-migrate @ 17240]
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
274 main()