[misc] handle uri like room_jid?join. see #2133
This commit is contained in:
		
							parent
							
								
									7945ceac83
								
							
						
					
					
						commit
						cafef3c1c5
					
				
					 3 changed files with 58 additions and 4 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		
		Reference in a new issue