[misc] handle uri like room_jid?join. see #2133
This commit is contained in:
parent
7945ceac83
commit
cafef3c1c5
|
@ -228,6 +228,23 @@ class GajimRemote:
|
||||||
False)
|
False)
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
'handle_uri': [
|
||||||
|
_('Handle a xmpp:/ uri'),
|
||||||
|
[
|
||||||
|
(_('uri'), _(''), True),
|
||||||
|
(_('account'), _(''), False)
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'join_room': [
|
||||||
|
_('Join a MUC room'),
|
||||||
|
[
|
||||||
|
(_('room'), _(''), True),
|
||||||
|
(_('nick'), _(''), False),
|
||||||
|
(_('password'), _(''), False),
|
||||||
|
(_('account'), _(''), False)
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
}
|
}
|
||||||
if self.argv_len < 2 or \
|
if self.argv_len < 2 or \
|
||||||
sys.argv[1] not in self.commands.keys(): # no args or bad args
|
sys.argv[1] not in self.commands.keys(): # no args or bad args
|
||||||
|
@ -239,7 +256,8 @@ class GajimRemote:
|
||||||
else:
|
else:
|
||||||
print self.compose_help().encode(PREFERRED_ENCODING)
|
print self.compose_help().encode(PREFERRED_ENCODING)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
if self.command == 'handle_uri':
|
||||||
|
self.handle_uri()
|
||||||
self.init_connection()
|
self.init_connection()
|
||||||
self.check_arguments()
|
self.check_arguments()
|
||||||
|
|
||||||
|
@ -420,6 +438,22 @@ class GajimRemote:
|
||||||
'Type "%s help %s" for more info') %
|
'Type "%s help %s" for more info') %
|
||||||
(args[argv_len][0], BASENAME, self.command))
|
(args[argv_len][0], BASENAME, self.command))
|
||||||
|
|
||||||
|
def handle_uri(self):
|
||||||
|
if not sys.argv[2:][0].startswith('xmpp:'):
|
||||||
|
send_error(_('Wrong uri'))
|
||||||
|
sys.argv[2] = sys.argv[2][5:]
|
||||||
|
uri = sys.argv[2:][0]
|
||||||
|
if not '?' in uri:
|
||||||
|
self.command = sys.argv[1] = 'open_chat'
|
||||||
|
return
|
||||||
|
(jid, action) = uri.split('?', 1)
|
||||||
|
sys.argv[2] = jid
|
||||||
|
if action == 'join':
|
||||||
|
self.command = sys.argv[1] = 'join_room'
|
||||||
|
return
|
||||||
|
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
def call_remote_method(self):
|
def call_remote_method(self):
|
||||||
''' calls self.method with arguments from sys.argv[2:] '''
|
''' calls self.method with arguments from sys.argv[2:] '''
|
||||||
args = sys.argv[2:]
|
args = sys.argv[2:]
|
||||||
|
|
|
@ -665,9 +665,9 @@ def possibly_set_gajim_as_xmpp_handler():
|
||||||
path_to_gajim_script, typ = get_abspath_for_script('gajim-remote', True)
|
path_to_gajim_script, typ = get_abspath_for_script('gajim-remote', True)
|
||||||
if path_to_gajim_script:
|
if path_to_gajim_script:
|
||||||
if typ == 'svn':
|
if typ == 'svn':
|
||||||
command = path_to_gajim_script + ' open_chat %s'
|
command = path_to_gajim_script + ' handle_uri %s'
|
||||||
else: # 'installed'
|
else: # 'installed'
|
||||||
command = 'gajim-remote open_chat %s'
|
command = 'gajim-remote handle_uri %s'
|
||||||
|
|
||||||
# setting for GNOME/Gconf
|
# setting for GNOME/Gconf
|
||||||
client.set_bool('/desktop/gnome/url-handlers/xmpp/enabled', True)
|
client.set_bool('/desktop/gnome/url-handlers/xmpp/enabled', True)
|
||||||
|
|
|
@ -21,7 +21,7 @@ import os
|
||||||
from common import gajim
|
from common import gajim
|
||||||
from common import helpers
|
from common import helpers
|
||||||
from time import time
|
from time import time
|
||||||
from dialogs import AddNewContactWindow, NewChatDialog
|
from dialogs import AddNewContactWindow, NewChatDialog, JoinGroupchatWindow
|
||||||
|
|
||||||
from common import dbus_support
|
from common import dbus_support
|
||||||
if dbus_support.supported:
|
if dbus_support.supported:
|
||||||
|
@ -631,3 +631,23 @@ class SignalObject(dbus.service.Object):
|
||||||
else:
|
else:
|
||||||
for acc in gajim.contacts.get_accounts():
|
for acc in gajim.contacts.get_accounts():
|
||||||
gajim.connections[acc].send_stanza(xml)
|
gajim.connections[acc].send_stanza(xml)
|
||||||
|
|
||||||
|
@dbus.service.method(INTERFACE)
|
||||||
|
def join_room(self, *args):
|
||||||
|
room_jid, nick, passwd, account = self._get_real_arguments(args, 4)
|
||||||
|
if not account:
|
||||||
|
# get the first connected account
|
||||||
|
accounts = gajim.connections.keys()
|
||||||
|
for acct in accounts:
|
||||||
|
if gajim.account_is_connected(acct):
|
||||||
|
account = acct
|
||||||
|
break
|
||||||
|
if not account:
|
||||||
|
account = gajim.contacts.get_accounts()[0]
|
||||||
|
print account
|
||||||
|
if nick is None:
|
||||||
|
nick = ''
|
||||||
|
gajim.interface.instances[account]['join_gc'] = \
|
||||||
|
JoinGroupchatWindow(account, room_jid, nick)
|
||||||
|
else:
|
||||||
|
gajim.connections[account].join_gc(nick, room_jid, password)
|
||||||
|
|
Loading…
Reference in New Issue