From b44f13dfca99afe87530f6d3e9212b81131afd69 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Thu, 4 Oct 2012 17:52:28 +0200 Subject: [PATCH] gajim-remote handles ?message in URIs. Fixes #6804, see #2133 Patch based on joeka's one in #6804 --- src/gajim-remote.py | 54 +++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/src/gajim-remote.py b/src/gajim-remote.py index 5316ee089..4de6866b6 100644 --- a/src/gajim-remote.py +++ b/src/gajim-remote.py @@ -544,30 +544,42 @@ class GajimRemote: if not '?' in uri: self.command = sys.argv[1] = 'open_chat' return - if 'body=' in uri: - # Open chat window and paste the text in the input message dialog - self.command = sys.argv[1] = 'open_chat' - message = uri.split('body=') - message = message[1].split(';')[0] - try: - message = urllib.unquote(message) - except UnicodeDecodeError: - pass - sys.argv[2] = uri.split('?')[0] - if len(sys.argv) == 4: - # jid in the sys.argv - sys.argv.append(message) - else: - sys.argv.append('') - sys.argv.append(message) - sys.argv[3] = '' - sys.argv[4] = message - return - (jid, action) = uri.split('?', 1) + jid, args = uri.split('?', 1) try: jid = urllib.unquote(jid) except UnicodeDecodeError: pass + args = args.split(';') + action = None + options = {} + if args: + action = args[0] + for arg in args[1:]: + opt = arg.split('=', 1) + if len(opt) != 2: + continue + options[opt[0]] = opt[1] + + if action == 'message': + self.command = sys.argv[1] = 'open_chat' + sys.argv[2] = jid + if 'body' in options: + # Open chat window and paste the text in the input message + # dialog + message = options['body'] + try: + message = urllib.unquote(message) + except UnicodeDecodeError: + pass + if len(sys.argv) == 4: + # jid in the sys.argv + sys.argv.append(message) + else: + sys.argv.append('') + sys.argv.append(message) + sys.argv[3] = '' + sys.argv[4] = message + return sys.argv[2] = jid if action == 'join': self.command = sys.argv[1] = 'join_room' @@ -576,7 +588,7 @@ class GajimRemote: sys.argv.append(sys.argv[3]) sys.argv[3] = '' return - if action.startswith('roster'): + if action == 'roster': # Add contact to roster self.command = sys.argv[1] = 'add_contact' return