libpurple/purple-remote

Tue, 24 Apr 2007 04:39:07 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Tue, 24 Apr 2007 04:39:07 +0000
branch
rlaager.gaim_migration
changeset 16439
c50ef85a3b27
parent 16205
397be242f4a4
child 16238
33bf2fd32108
child 17253
278327221b51
child 18068
b6554e3c8224
permissions
-rwxr-xr-x

Since I'm about to push this, I'm going to comment out the temp code that references my home directory.

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
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
12 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
13 purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
11187
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
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
33 def show_help():
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
34 print """This program uses DBus to communicate with purple.
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
35
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
36 Usage:
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
37
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
38 %s "command1" "command2" ...
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
39
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
40 Each command is of one of the three types:
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
41
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
42 [protocol:]commandname?param1=value1&param2=value2&...
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
43 FunctionName?param1=value1&param2=value2&...
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
44 FunctionName(value1,value2,...)
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
45
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
46 The second and third form are provided for completeness but their use
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
47 is not recommended; use purple-send or purple-send-async instead. The
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
48 second form uses introspection to find out the parameter names and
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
49 their types, therefore it is rather slow.
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
50
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
51 Examples of commands:
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
52
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
53 jabber:goim?screenname=testone@localhost&message=hi
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
54 jabber:gochat?room=TestRoom&server=conference.localhost
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
55 jabber:getinfo?screenname=testone@localhost
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
56 jabber:addbuddy?screenname=my friend
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
57
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
58 setstatus?status=away&message=don't disturb
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
59 quit
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
60
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
61 PurpleAccountsFindConnected?name=&protocol=prpl-jabber
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
62 PurpleAccountFindConnected(,prpl-jabber)
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
63 """ % sys.argv[0]
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
64
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
65 cpurple = CheckedObject(purple)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
66
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
67 urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
68
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
69 def extendlist(list, length, fill):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
70 if len(list) < length:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
71 return list + [fill] * (length - len(list))
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
72 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
73 return list
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
74
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
75 def convert(value):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
76 try:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
77 return int(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
78 except:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
79 return value
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
80
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
81 def findaccount(accountname, protocolname):
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
82 try:
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
83 # prefer connected accounts
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
84 account = cpurple.PurpleAccountsFindConnected(accountname, protocolname)
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
85 return account
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
86 except:
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
87 # try to get any account and connect it
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
88 account = cpurple.PurpleAccountsFindAny(accountname, protocolname)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
89 purple.PurpleAccountSetStatusVargs(account, "online", 1)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
90 purple.PurpleAccountConnect(account)
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
91 return account
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
92
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
93
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
94 def execute(uri):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
95 match = re.match(urlregexp, uri)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
96 protocol = match.group(2)
12684
3b638335cc68 [gaim-migrate @ 15027]
Steve Cavilia
parents: 11331
diff changeset
97 if protocol == "aim" or protocol == "icq":
3b638335cc68 [gaim-migrate @ 15027]
Steve Cavilia
parents: 11331
diff changeset
98 protocol = "oscar"
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
99 if protocol is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
100 protocol = "prpl-" + protocol
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
101 command = match.group(5)
13774
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
102 paramstring = match.group(7)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
103 params = {}
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
104 if paramstring is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
105 for param in paramstring.split("&"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
106 key, value = extendlist(param.split("=",1), 2, "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
107 params[key] = urllib.unquote(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
108
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
109 accountname = params.get("account", "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
110
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
111 if command == "goim":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
112 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
113 conversation = cpurple.PurpleConversationNew(1, account, params["screenname"])
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
114 if "message" in params:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
115 im = cpurple.PurpleConversationGetImData(conversation)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
116 purple.PurpleConvImSend(im, params["message"])
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
117 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
118
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
119 elif command == "gochat":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
120 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
121 connection = cpurple.PurpleAccountGetConnection(account)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
122 return purple.ServJoinChat(connection, params)
11187
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 elif command == "addbuddy":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
125 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
126 return cpurple.PurpleBlistRequestAddBuddy(account, params["screenname"],
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
127 params.get("group", ""), "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
128
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
129 elif command == "setstatus":
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
130 current = purple.PurpleSavedstatusGetCurrent()
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
131
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
132 if "status" in params:
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
133 status_id = params["status"]
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
134 status_type = purple.PurplePrimitiveGetTypeFromId(status_id)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
135 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
136 status_type = purple.PurpleSavedstatusGetType(current)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
137 status_id = purple.PurplePrimitiveGetIdFromType(status_type)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
138
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
139 if "message" in params:
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
140 message = params["message"];
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
141 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
142 message = purple.PurpleSavedstatusGetMessage(current)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
143
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
144 if "account" in params:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
145 accounts = [cpurple.PurpleAccountsFindAny(accountname, protocol)]
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
146
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
147 for account in accounts:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
148 status = purple.PurpleAccountGetStatus(account, status_id)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
149 type = purple.PurpleStatusGetType(status)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
150 purple.PurpleSavedstatusSetSubstatus(current, account, type, message)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
151 purple.PurpleSavedstatusActivateForAccount(current, account)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
152 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
153 accounts = purple.PurpleAccountsGetAllActive()
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
154 saved = purple.PurpleSavedstatusNew("", status_type)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
155 purple.PurpleSavedstatusSetMessage(saved, message)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
156 purple.PurpleSavedstatusActivate(saved)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
157
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
158 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
159
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
160 elif command == "getinfo":
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
161 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
162 connection = cpurple.PurpleAccountGetConnection(account)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
163 return purple.ServGetInfo(connection, params["screenname"])
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
164
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
165 elif command == "quit":
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
166 return purple.PurpleCoreQuit()
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
167
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
168 elif command == "uri":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
169 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
170
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
171 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
172 match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
173 if match is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
174 name = match.group(1)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
175 argstr = match.group(2)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
176 if argstr == "":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
177 args = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
178 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
179 args = argstr.split(",")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
180 fargs = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
181 for arg in args:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
182 fargs.append(convert(arg.strip()))
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
183 return purple.__getattr__(name)(*fargs)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
184 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
185 # introspect the object to get parameter names and types
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
186 # this is slow because the entire introspection info must be downloaded
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
187 data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
188 Introspect()
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
189 introspect = xml.dom.minidom.parseString(data).documentElement
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
190 for method in introspect.all("method"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
191 if command == method.getAttribute("name"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
192 methodparams = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
193 for arg in method.all("arg"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
194 if arg.getAttribute("direction") == "in":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
195 value = params[arg.getAttribute("name")]
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
196 type = arg.getAttribute("type")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
197 if type == "s":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
198 methodparams.append(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
199 elif type == "i":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
200 methodparams.append(int(value))
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
201 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
202 raise "Don't know how to handle type \"%s\"" % type
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
203 return purple.__getattr__(command)(*methodparams)
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
204 show_help()
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
205 raise "Unknown command: %s" % command
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
206
11331
6e06ed40a312 [gaim-migrate @ 13544]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11241
diff changeset
207 if len(sys.argv) == 1:
15716
128dcef5e4b3 Fix bug #1662186: "gaim-remote --help doesn't work" by showing the help for any invalid command.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15435
diff changeset
208 show_help()
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
209
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
210 for arg in sys.argv[1:]:
13774
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
211 output = execute(arg)
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
212
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
213 if (output != None):
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
214 print output
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
215

mercurial