libpurple/purple-remote

Thu, 15 May 2014 23:02:22 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Thu, 15 May 2014 23:02:22 +0200
changeset 36047
2d7d55acd82c
parent 31182
cf54f159a12d
child 36798
21af2b190cfa
child 38313
38a40ddbb9b7
permissions
-rwxr-xr-x

Coverity: fix null pointer dereferences

22141
adb198961d72 A small patch from shreevatsa: "Some of the Python scripts start with
Richard Laager <rlaager@pidgin.im>
parents: 20195
diff changeset
1 #!/usr/bin/env python
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
2
30804
062f03792a59 Make purple-remote expect and produce UTF-8 instead of ASCII. Fixes #12049.
Guillaume Brunerie <guillaume.brunerie@gmail.com>
parents: 27588
diff changeset
3 import codecs
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
4 import dbus
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
5 import re
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
6 import urllib
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
7 import sys
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
8
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
9 import xml.dom.minidom
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
10
30804
062f03792a59 Make purple-remote expect and produce UTF-8 instead of ASCII. Fixes #12049.
Guillaume Brunerie <guillaume.brunerie@gmail.com>
parents: 27588
diff changeset
11 sys.stdin = codecs.getwriter('utf-8')(sys.stdin);
062f03792a59 Make purple-remote expect and produce UTF-8 instead of ASCII. Fixes #12049.
Guillaume Brunerie <guillaume.brunerie@gmail.com>
parents: 27588
diff changeset
12 sys.stdout = codecs.getwriter('utf-8')(sys.stdout);
062f03792a59 Make purple-remote expect and produce UTF-8 instead of ASCII. Fixes #12049.
Guillaume Brunerie <guillaume.brunerie@gmail.com>
parents: 27588
diff changeset
13
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
14 xml.dom.minidom.Element.all = xml.dom.minidom.Element.getElementsByTagName
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
15
20195
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
16 obj = None
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
17 try:
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
18 obj = dbus.SessionBus().get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
19 except:
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
20 pass
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
21
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
22 purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
23
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
24 class CheckedObject:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
25 def __init__(self, obj):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
26 self.obj = obj
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
27
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
28 def __getattr__(self, attr):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
29 return CheckedAttribute(self, attr)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
30
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
31 class CheckedAttribute:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
32 def __init__(self, cobj, attr):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
33 self.cobj = cobj
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
34 self.attr = attr
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
35
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
36 def __call__(self, *args):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
37 result = self.cobj.obj.__getattr__(self.attr)(*args)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
38 if result == 0:
31182
cf54f159a12d Fix purple-remote on Python 2.6+.
Ari Pollak <ari@debian.org>
parents: 30804
diff changeset
39 raise Exception("Error: %s %s returned %s" %
cf54f159a12d Fix purple-remote on Python 2.6+.
Ari Pollak <ari@debian.org>
parents: 30804
diff changeset
40 (self.attr, args, result))
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
41 return result
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
42
23237
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
43 def show_help(requested=False):
17574
dc3189c42c0c Fix http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=240589
Mark Doliner <markdoliner@pidgin.im>
parents: 17399
diff changeset
44 print """This program uses D-Bus 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
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 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
47
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 %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
49
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 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
51
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 [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
53 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
54 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
55
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 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
57 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
58 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
59 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
60
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
61 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
62
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 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
64 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
65 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
66 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
67
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
68 setstatus?status=away&message=don't disturb
25668
7897eda26d25 List getstatus and getstatusmessage in the purple-remote help output.
Paul Aurich <darkrain42@pidgin.im>
parents: 24836
diff changeset
69 getstatus
7897eda26d25 List getstatus and getstatusmessage in the purple-remote help output.
Paul Aurich <darkrain42@pidgin.im>
parents: 24836
diff changeset
70 getstatusmessage
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
71 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
72
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
73 PurpleAccountsFindConnected?name=&protocol=prpl-jabber
18885
dca0fedd1d8e fix a doc string typo
Ka-Hing Cheung <khc@pidgin.im>
parents: 18105
diff changeset
74 PurpleAccountsFindConnected(,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
75 """ % sys.argv[0]
23237
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
76 if (requested):
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
77 sys.exit(0)
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
78 else:
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
79 sys.exit(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
80
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
81 cpurple = CheckedObject(purple)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
82
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
83 urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
84
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
85 def extendlist(list, length, fill):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
86 if len(list) < length:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
87 return list + [fill] * (length - len(list))
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
88 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
89 return list
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
90
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
91 def convert(value):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
92 try:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
93 return int(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
94 except:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
95 return value
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
96
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
97 def findaccount(accountname, protocolname):
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
98 try:
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
99 # prefer connected accounts
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
100 account = cpurple.PurpleAccountsFindConnected(accountname, protocolname)
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
101 return account
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
102 except:
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
103 # try to get any account and connect it
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
104 account = cpurple.PurpleAccountsFindAny(accountname, protocolname)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
105 purple.PurpleAccountSetStatusVargs(account, "online", 1)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
106 purple.PurpleAccountConnect(account)
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
107 return account
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
108
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
109
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
110 def execute(uri):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
111 match = re.match(urlregexp, uri)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
112 protocol = match.group(2)
17399
4b33b14a5459 A conditional in purple_remote was missing a trailing colon.
Ethan Blanton <elb@pidgin.im>
parents: 17253
diff changeset
113 if protocol == "xmpp":
17253
278327221b51 Make purple-remote accept xmpp as a protocol
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16205
diff changeset
114 protocol = "jabber"
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
115 if protocol is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
116 protocol = "prpl-" + protocol
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
117 command = match.group(5)
13774
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
118 paramstring = match.group(7)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
119 params = {}
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
120 if paramstring is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
121 for param in paramstring.split("&"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
122 key, value = extendlist(param.split("=",1), 2, "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
123 params[key] = urllib.unquote(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
124
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
125 accountname = params.get("account", "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
126
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
127 if command == "goim":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
128 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
129 conversation = cpurple.PurpleConversationNew(1, account, params["screenname"])
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
130 if "message" in params:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
131 im = cpurple.PurpleConversationGetImData(conversation)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
132 purple.PurpleConvImSend(im, params["message"])
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
133 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
134
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
135 elif command == "gochat":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
136 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
137 connection = cpurple.PurpleAccountGetConnection(account)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
138 return purple.ServJoinChat(connection, params)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
139
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
140 elif command == "addbuddy":
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
141 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
142 return cpurple.PurpleBlistRequestAddBuddy(account, params["screenname"],
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
143 params.get("group", ""), "")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
144
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
145 elif command == "setstatus":
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
146 current = purple.PurpleSavedstatusGetCurrent()
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
147
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
148 if "status" in params:
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
149 status_id = params["status"]
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
150 status_type = purple.PurplePrimitiveGetTypeFromId(status_id)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
151 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
152 status_type = purple.PurpleSavedstatusGetType(current)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
153 status_id = purple.PurplePrimitiveGetIdFromType(status_type)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
154
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
155 if "message" in params:
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
156 message = params["message"];
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
157 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
158 message = purple.PurpleSavedstatusGetMessage(current)
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
159
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
160 if "account" in params:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
161 accounts = [cpurple.PurpleAccountsFindAny(accountname, protocol)]
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
162
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13221
diff changeset
163 for account in accounts:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
164 status = purple.PurpleAccountGetStatus(account, status_id)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
165 type = purple.PurpleStatusGetType(status)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
166 purple.PurpleSavedstatusSetSubstatus(current, account, type, message)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
167 purple.PurpleSavedstatusActivateForAccount(current, account)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
168 else:
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
169 saved = purple.PurpleSavedstatusNew("", status_type)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
170 purple.PurpleSavedstatusSetMessage(saved, message)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
171 purple.PurpleSavedstatusActivate(saved)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
172
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
173 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
174
18097
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
175 elif command == "getstatus":
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
176 current = purple.PurpleSavedstatusGetCurrent()
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
177 status_type = purple.PurpleSavedstatusGetType(current)
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
178 status_id = purple.PurplePrimitiveGetIdFromType(status_type)
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
179 return status_id
9304ace34e7b A patch from Norbert Buchmuller:
Norbert Buchmuller <norbi@nix.hu>
parents: 17399
diff changeset
180
24836
fa1d0f63ea45 Patch from 'jfd' (whose trac user account no longer exists) to implement
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 23256
diff changeset
181 elif command == "getstatusmessage":
fa1d0f63ea45 Patch from 'jfd' (whose trac user account no longer exists) to implement
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 23256
diff changeset
182 current = purple.PurpleSavedstatusGetCurrent()
fa1d0f63ea45 Patch from 'jfd' (whose trac user account no longer exists) to implement
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 23256
diff changeset
183 return purple.PurpleSavedstatusGetMessage(current)
fa1d0f63ea45 Patch from 'jfd' (whose trac user account no longer exists) to implement
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 23256
diff changeset
184
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
185 elif command == "getinfo":
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
186 account = findaccount(accountname, protocol)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
187 connection = cpurple.PurpleAccountGetConnection(account)
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
188 return purple.ServGetInfo(connection, params["screenname"])
11241
f62a71823fc3 [gaim-migrate @ 13404]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
189
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
190 elif command == "quit":
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
191 return purple.PurpleCoreQuit()
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
192
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
193 elif command == "uri":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
194 return None
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
195
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
196 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
197 match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
198 if match is not None:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
199 name = match.group(1)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
200 argstr = match.group(2)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
201 if argstr == "":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
202 args = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
203 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
204 args = argstr.split(",")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
205 fargs = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
206 for arg in args:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
207 fargs.append(convert(arg.strip()))
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15987
diff changeset
208 return purple.__getattr__(name)(*fargs)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
209 else:
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
210 # introspect the object to get parameter names and types
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
211 # this is slow because the entire introspection info must be downloaded
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
212 data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
213 Introspect()
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
214 introspect = xml.dom.minidom.parseString(data).documentElement
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
215 for method in introspect.all("method"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
216 if command == method.getAttribute("name"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
217 methodparams = []
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
218 for arg in method.all("arg"):
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
219 if arg.getAttribute("direction") == "in":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
220 value = params[arg.getAttribute("name")]
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
221 type = arg.getAttribute("type")
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
222 if type == "s":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
223 methodparams.append(value)
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
224 elif type == "i":
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
225 methodparams.append(int(value))
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
226 else:
31182
cf54f159a12d Fix purple-remote on Python 2.6+.
Ari Pollak <ari@debian.org>
parents: 30804
diff changeset
227 raise Exception("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
228 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
229 show_help()
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
230
23256
35a4e2bbfa46 disapproval of revision '04ec200520788c834a933129aba557e5ce761a08'
Richard Laager <rlaager@pidgin.im>
parents: 23255
diff changeset
231 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
232 show_help()
23237
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
233 elif (sys.argv[1] == "--help" or sys.argv[1] == "-h"):
7ec42e06496f Import a patch (with changes) from Debian:
Ari Pollak <ari@debian.org>
parents: 22141
diff changeset
234 show_help(True)
20195
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
235 elif (obj == None):
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
236 print "No existing libpurple instance detected."
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
237 sys.exit(1);
10848da5f7ed applied changes from c699de7eec5194554b5fcb885019835fb902d95a
Luke Schierer <lschiere@pidgin.im>
parents: 18885
diff changeset
238
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
239 for arg in sys.argv[1:]:
13774
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
240 output = execute(arg)
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
241
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
242 if (output != None):
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
243 print output
470a932e79e7 [gaim-migrate @ 16184]
Richard Laager <rlaager@pidgin.im>
parents: 13767
diff changeset
244

mercurial