Swept everything related to commands
This commit is contained in:
		
							parent
							
								
									faf3a1fe6f
								
							
						
					
					
						commit
						c38e7050f5
					
				
					 2 changed files with 17 additions and 474 deletions
				
			
		| 
						 | 
				
			
			@ -603,45 +603,24 @@ class ChatControlBase(MessageControl):
 | 
			
		|||
			self.drag_entered_conv = True
 | 
			
		||||
			self.conv_textview.tv.set_editable(True)
 | 
			
		||||
 | 
			
		||||
	def _process_command(self, message):
 | 
			
		||||
		if not message or message[0] != '/':
 | 
			
		||||
			return False
 | 
			
		||||
 | 
			
		||||
		message = message[1:]
 | 
			
		||||
		message_array = message.split(' ', 1)
 | 
			
		||||
		command = message_array.pop(0).lower()
 | 
			
		||||
		if message_array == ['']:
 | 
			
		||||
			message_array = []
 | 
			
		||||
 | 
			
		||||
		if command == 'clear' and not len(message_array):
 | 
			
		||||
			self.conv_textview.clear() # clear conversation
 | 
			
		||||
			self.clear(self.msg_textview) # clear message textview too
 | 
			
		||||
			return True
 | 
			
		||||
		elif message == 'compact' and not len(message_array):
 | 
			
		||||
			self.chat_buttons_set_visible(not self.hide_chat_buttons)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		return False
 | 
			
		||||
 | 
			
		||||
	def send_message(self, message, keyID='', type_='chat', chatstate=None,
 | 
			
		||||
	msg_id=None, composing_xep=None, resource=None, process_command=True,
 | 
			
		||||
	msg_id=None, composing_xep=None, resource=None,
 | 
			
		||||
	xhtml=None, callback=None, callback_args=[]):
 | 
			
		||||
		'''Send the given message to the active tab. Doesn't return None if error
 | 
			
		||||
		'''
 | 
			
		||||
		if not message or message == '\n':
 | 
			
		||||
			return None
 | 
			
		||||
 | 
			
		||||
		if not process_command or not self._process_command(message):
 | 
			
		||||
			MessageControl.send_message(self, message, keyID, type_=type_,
 | 
			
		||||
				chatstate=chatstate, msg_id=msg_id, composing_xep=composing_xep,
 | 
			
		||||
				resource=resource, user_nick=self.user_nick, xhtml=xhtml,
 | 
			
		||||
				callback=callback, callback_args=callback_args)
 | 
			
		||||
		MessageControl.send_message(self, message, keyID, type_=type_,
 | 
			
		||||
			chatstate=chatstate, msg_id=msg_id, composing_xep=composing_xep,
 | 
			
		||||
			resource=resource, user_nick=self.user_nick, xhtml=xhtml,
 | 
			
		||||
			callback=callback, callback_args=callback_args)
 | 
			
		||||
 | 
			
		||||
			# Record message history
 | 
			
		||||
			self.save_sent_message(message)
 | 
			
		||||
		# Record message history
 | 
			
		||||
		self.save_sent_message(message)
 | 
			
		||||
 | 
			
		||||
			# Be sure to send user nickname only once according to JEP-0172
 | 
			
		||||
			self.user_nick = None
 | 
			
		||||
		# Be sure to send user nickname only once according to JEP-0172
 | 
			
		||||
		self.user_nick = None
 | 
			
		||||
 | 
			
		||||
		# Clear msg input
 | 
			
		||||
		message_buffer = self.msg_textview.get_buffer()
 | 
			
		||||
| 
						 | 
				
			
			@ -1129,7 +1108,6 @@ class ChatControl(ChatControlBase):
 | 
			
		|||
	'''A control for standard 1-1 chat'''
 | 
			
		||||
	TYPE_ID = message_control.TYPE_CHAT
 | 
			
		||||
	old_msg_kind = None # last kind of the printed message
 | 
			
		||||
	CHAT_CMDS = ['clear', 'compact', 'help', 'me', 'ping', 'say']
 | 
			
		||||
 | 
			
		||||
	def __init__(self, parent_win, contact, acct, session, resource = None):
 | 
			
		||||
		ChatControlBase.__init__(self, self.TYPE_ID, parent_win,
 | 
			
		||||
| 
						 | 
				
			
			@ -1718,83 +1696,11 @@ class ChatControl(ChatControlBase):
 | 
			
		|||
		elif self.session and self.session.enable_encryption:
 | 
			
		||||
			dialogs.ESessionInfoWindow(self.session)
 | 
			
		||||
 | 
			
		||||
	def _process_command(self, message):
 | 
			
		||||
		if message[0] != '/':
 | 
			
		||||
			return False
 | 
			
		||||
 | 
			
		||||
		# Handle common commands
 | 
			
		||||
		if ChatControlBase._process_command(self, message):
 | 
			
		||||
			return True
 | 
			
		||||
 | 
			
		||||
		message = message[1:]
 | 
			
		||||
		message_array = message.split(' ', 1)
 | 
			
		||||
		command = message_array.pop(0).lower()
 | 
			
		||||
		if message_array == ['']:
 | 
			
		||||
			message_array = []
 | 
			
		||||
 | 
			
		||||
		if command == 'me':
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				return False # /me is not really a command
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
				return True # do not send "/me" as message
 | 
			
		||||
 | 
			
		||||
		if command == 'help':
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				subcommand = message_array.pop(0)
 | 
			
		||||
				self.get_command_help(subcommand)
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'ping':
 | 
			
		||||
			if not len(message_array):
 | 
			
		||||
				if self.account == gajim.ZEROCONF_ACC_NAME:
 | 
			
		||||
					self.print_conversation(
 | 
			
		||||
						_('Command not supported for zeroconf account.'), 'info')
 | 
			
		||||
				else:
 | 
			
		||||
					gajim.connections[self.account].sendPing(self.contact)
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		return False
 | 
			
		||||
 | 
			
		||||
	def get_command_help(self, command):
 | 
			
		||||
		if command == 'help':
 | 
			
		||||
			self.print_conversation(_('Commands: %s') % ChatControl.CHAT_CMDS,
 | 
			
		||||
				'info')
 | 
			
		||||
		elif command == 'clear':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s, clears the text window.') % \
 | 
			
		||||
				command, 'info')
 | 
			
		||||
		elif command == 'compact':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s, hide the chat buttons.') % \
 | 
			
		||||
				command, 'info')
 | 
			
		||||
		elif command == 'me':
 | 
			
		||||
			self.print_conversation(_('Usage: /%(command)s <action>, sends action '
 | 
			
		||||
				'to the current group chat. Use third person. (e.g. /%(command)s '
 | 
			
		||||
				'explodes.)'
 | 
			
		||||
				) % {'command': command}, 'info')
 | 
			
		||||
		elif command == 'ping':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s, sends a ping to the contact') %\
 | 
			
		||||
				command, 'info')
 | 
			
		||||
		elif command == 'say':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s, send the message to the contact') %\
 | 
			
		||||
				command, 'info')
 | 
			
		||||
		else:
 | 
			
		||||
			self.print_conversation(_('No help info for /%s') % command, 'info')
 | 
			
		||||
 | 
			
		||||
	def send_message(self, message, keyID='', chatstate=None, xhtml=None):
 | 
			
		||||
		'''Send a message to contact'''
 | 
			
		||||
		if message in ('', None, '\n') or self._process_command(message):
 | 
			
		||||
		if message in ('', None, '\n'):
 | 
			
		||||
			return None
 | 
			
		||||
 | 
			
		||||
		# Do we need to process command for the message ?
 | 
			
		||||
		process_command = True
 | 
			
		||||
		if message.startswith('/say'):
 | 
			
		||||
			message = message[5:]
 | 
			
		||||
			process_command = False
 | 
			
		||||
 | 
			
		||||
		# refresh timers
 | 
			
		||||
		self.reset_kbd_mouse_timeout_vars()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1853,7 +1759,7 @@ class ChatControl(ChatControlBase):
 | 
			
		|||
 | 
			
		||||
		ChatControlBase.send_message(self, message, keyID, type_='chat',
 | 
			
		||||
			chatstate=chatstate_to_send, composing_xep=composing_xep,
 | 
			
		||||
			process_command=process_command, xhtml=xhtml, callback=_on_sent,
 | 
			
		||||
			xhtml=xhtml, callback=_on_sent,
 | 
			
		||||
			callback_args=[contact, message, encrypted, xhtml])
 | 
			
		||||
 | 
			
		||||
	def check_for_possible_paused_chatstate(self, arg):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -182,10 +182,6 @@ class PrivateChatControl(ChatControl):
 | 
			
		|||
 | 
			
		||||
class GroupchatControl(ChatControlBase):
 | 
			
		||||
	TYPE_ID = message_control.TYPE_GC
 | 
			
		||||
	# alphanum sorted
 | 
			
		||||
	MUC_CMDS = ['ban', 'block', 'chat', 'query', 'clear', 'close', 'compact',
 | 
			
		||||
		'help', 'invite', 'join', 'kick', 'leave', 'me', 'msg', 'nick',
 | 
			
		||||
		'part', 'names', 'say', 'topic', 'unblock']
 | 
			
		||||
 | 
			
		||||
	def __init__(self, parent_win, contact, acct, is_continued=False):
 | 
			
		||||
		ChatControlBase.__init__(self, self.TYPE_ID, parent_win,
 | 
			
		||||
| 
						 | 
				
			
			@ -281,7 +277,6 @@ class GroupchatControl(ChatControlBase):
 | 
			
		|||
		self.attention_list = []
 | 
			
		||||
		self.room_creation = int(time.time()) # Use int to reduce mem usage
 | 
			
		||||
		self.nick_hits = []
 | 
			
		||||
		self.cmd_hits = []
 | 
			
		||||
		self.last_key_tabs = False
 | 
			
		||||
 | 
			
		||||
		self.subject = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -1510,262 +1505,6 @@ class GroupchatControl(ChatControlBase):
 | 
			
		|||
		if model.iter_n_children(parent_iter) == 0:
 | 
			
		||||
			model.remove(parent_iter)
 | 
			
		||||
 | 
			
		||||
	def _process_command(self, message):
 | 
			
		||||
		if message[0] != '/':
 | 
			
		||||
			return False
 | 
			
		||||
 | 
			
		||||
		# Handle common commands
 | 
			
		||||
		if ChatControlBase._process_command(self, message):
 | 
			
		||||
			return True
 | 
			
		||||
 | 
			
		||||
		message = message[1:]
 | 
			
		||||
		message_array = message.split(' ', 1)
 | 
			
		||||
		command = message_array.pop(0).lower()
 | 
			
		||||
		if message_array == ['']:
 | 
			
		||||
			message_array = []
 | 
			
		||||
 | 
			
		||||
		if command == 'me':
 | 
			
		||||
			return False # This is not really a command
 | 
			
		||||
 | 
			
		||||
		if command == 'nick':
 | 
			
		||||
			# example: /nick foo
 | 
			
		||||
			if len(message_array) and message_array[0] != self.nick:
 | 
			
		||||
				nick = message_array[0]
 | 
			
		||||
				try:
 | 
			
		||||
					nick = helpers.parse_resource(nick)
 | 
			
		||||
				except Exception:
 | 
			
		||||
					# Invalid Nickname
 | 
			
		||||
					dialogs.ErrorDialog(_('Invalid nickname'),
 | 
			
		||||
					_('The nickname has not allowed characters.'))
 | 
			
		||||
					return True
 | 
			
		||||
				gajim.connections[self.account].join_gc(nick, self.room_jid, None,
 | 
			
		||||
					change_nick=True)
 | 
			
		||||
				self.new_nick = nick
 | 
			
		||||
				self.clear(self.msg_textview)
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'query' or command == 'chat':
 | 
			
		||||
			# Open a chat window to the specified nick
 | 
			
		||||
			# example: /query foo
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				nick0 = message_array.pop(0)
 | 
			
		||||
				if nick0[-1] == ' ':
 | 
			
		||||
					nick1 = nick0[:-1]
 | 
			
		||||
				else:
 | 
			
		||||
					nick1 = nick0
 | 
			
		||||
				nicks = gajim.contacts.get_nick_list(self.account, self.room_jid)
 | 
			
		||||
				for nick in (nick0, nick1):
 | 
			
		||||
					if nick in nicks:
 | 
			
		||||
						self.on_send_pm(nick=nick)
 | 
			
		||||
						self.clear(self.msg_textview)
 | 
			
		||||
						return True
 | 
			
		||||
				self.print_conversation(_('Nickname not found: %s') % \
 | 
			
		||||
					nick0, 'info')
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'msg':
 | 
			
		||||
			# Send a message to a nick. Also opens a private message window.
 | 
			
		||||
			# example: /msg foo Hey, what's up?
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				message_array = message_array[0].split()
 | 
			
		||||
				nick = message_array.pop(0)
 | 
			
		||||
				room_nicks = gajim.contacts.get_nick_list(self.account,
 | 
			
		||||
					self.room_jid)
 | 
			
		||||
				if nick in room_nicks:
 | 
			
		||||
					privmsg = ' '.join(message_array)
 | 
			
		||||
					self.on_send_pm(nick=nick, msg=privmsg)
 | 
			
		||||
					self.clear(self.msg_textview)
 | 
			
		||||
				else:
 | 
			
		||||
					self.print_conversation(_('Nickname not found: %s') % nick,
 | 
			
		||||
						'info')
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'topic':
 | 
			
		||||
			# display or change the room topic
 | 
			
		||||
			# example: /topic : print topic
 | 
			
		||||
			# /topic foo : change topic to foo
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				new_topic = message_array.pop(0)
 | 
			
		||||
				gajim.connections[self.account].send_gc_subject(self.room_jid,
 | 
			
		||||
					new_topic)
 | 
			
		||||
			elif self.subject is not '':
 | 
			
		||||
				self.print_conversation(self.subject, 'info')
 | 
			
		||||
			else:
 | 
			
		||||
				self.print_conversation(_('This group chat has no subject'), 'info')
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'invite':
 | 
			
		||||
			# invite a user to a room for a reason
 | 
			
		||||
			# example: /invite user@example.com reason
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				message_array = message_array[0].split()
 | 
			
		||||
				invitee = message_array.pop(0)
 | 
			
		||||
				reason = ' '.join(message_array)
 | 
			
		||||
				gajim.connections[self.account].send_invite(self.room_jid, invitee,
 | 
			
		||||
					reason)
 | 
			
		||||
				s = _('Invited %(contact_jid)s to %(room_jid)s.') % {
 | 
			
		||||
					'contact_jid': invitee,
 | 
			
		||||
					'room_jid': self.room_jid}
 | 
			
		||||
				self.print_conversation(s, 'info')
 | 
			
		||||
				self.clear(self.msg_textview)
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'join':
 | 
			
		||||
			# example: /join room@conference.example.com/nick
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				room_jid = message_array[0]
 | 
			
		||||
				if room_jid.find('@') < 0:
 | 
			
		||||
					room_jid = room_jid + '@' + gajim.get_server_from_jid(
 | 
			
		||||
						self.room_jid)
 | 
			
		||||
			else:
 | 
			
		||||
				room_jid = '@' + gajim.get_server_from_jid(self.room_jid)
 | 
			
		||||
			if room_jid.find('/') >= 0:
 | 
			
		||||
				room_jid, nick = room_jid.split('/', 1)
 | 
			
		||||
			else:
 | 
			
		||||
				nick = ''
 | 
			
		||||
			# join_gc window is needed in order to provide for password entry.
 | 
			
		||||
			if 'join_gc' in gajim.interface.instances[self.account]:
 | 
			
		||||
				gajim.interface.instances[self.account]['join_gc'].\
 | 
			
		||||
					window.present()
 | 
			
		||||
			else:
 | 
			
		||||
				try:
 | 
			
		||||
					dialogs.JoinGroupchatWindow(account=None, room_jid=room_jid,
 | 
			
		||||
						nick=nick)
 | 
			
		||||
				except GajimGeneralException:
 | 
			
		||||
					pass
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'leave' or command == 'part' or command == 'close':
 | 
			
		||||
			# Leave the room and close the tab or window
 | 
			
		||||
			reason = 'offline'
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				reason = message_array.pop(0)
 | 
			
		||||
			self.parent_win.remove_tab(self, self.parent_win.CLOSE_COMMAND, reason)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'ban':
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				room_nicks = gajim.contacts.get_nick_list(self.account,
 | 
			
		||||
					self.room_jid)
 | 
			
		||||
				nb_match = 0
 | 
			
		||||
				nick_ban = ''
 | 
			
		||||
				for nick in room_nicks:
 | 
			
		||||
					if message_array[0].startswith(nick):
 | 
			
		||||
						nb_match += 1
 | 
			
		||||
						nick_ban = nick
 | 
			
		||||
						test_reason = message_array[0][len(nick) + 1:]
 | 
			
		||||
						if len(test_reason) == 0:
 | 
			
		||||
							reason = 'None'
 | 
			
		||||
						else:
 | 
			
		||||
							reason = test_reason
 | 
			
		||||
				banned_jid = None
 | 
			
		||||
				if nb_match == 1:
 | 
			
		||||
					gc_contact = gajim.contacts.get_gc_contact(self.account,
 | 
			
		||||
							self.room_jid, nick_ban)
 | 
			
		||||
					banned_jid = gc_contact.jid
 | 
			
		||||
				elif nb_match > 1:
 | 
			
		||||
					self.print_conversation(_('There is an ambiguity: %d nicks '
 | 
			
		||||
						'match.\n Please use graphical interface ') % nb_match,
 | 
			
		||||
						'info')
 | 
			
		||||
					self.clear(self.msg_textview)
 | 
			
		||||
				elif message_array[0].split()[0].find('@') > 0:
 | 
			
		||||
					message_splited = message_array[0].split(' ', 1)
 | 
			
		||||
					banned_jid = message_splited[0]
 | 
			
		||||
					if len(message_splited) == 2:
 | 
			
		||||
						reason = message_splited[1]
 | 
			
		||||
					else:
 | 
			
		||||
						reason = 'None'
 | 
			
		||||
				if banned_jid:
 | 
			
		||||
					gajim.connections[self.account].gc_set_affiliation(self.room_jid,
 | 
			
		||||
						banned_jid, 'outcast', reason)
 | 
			
		||||
					self.clear(self.msg_textview)
 | 
			
		||||
				else:
 | 
			
		||||
					self.print_conversation(_('Nickname not found'), 'info')
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'kick':
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				nick_kick = ''
 | 
			
		||||
				room_nicks = gajim.contacts.get_nick_list(self.account,
 | 
			
		||||
					self.room_jid)
 | 
			
		||||
				nb_match = 0
 | 
			
		||||
				for nick in room_nicks:
 | 
			
		||||
					if message_array[0].startswith(nick):
 | 
			
		||||
						nb_match += 1
 | 
			
		||||
						nick_kick = nick
 | 
			
		||||
						test_reason = message_array[0][len(nick) + 1:]
 | 
			
		||||
						if len(test_reason) == 0:
 | 
			
		||||
							reason = 'None'
 | 
			
		||||
						else:
 | 
			
		||||
							reason = test_reason
 | 
			
		||||
				if nb_match == 1:
 | 
			
		||||
					gajim.connections[self.account].gc_set_role(self.room_jid,
 | 
			
		||||
						nick_kick, 'none', reason)
 | 
			
		||||
					self.clear(self.msg_textview)
 | 
			
		||||
				elif nb_match > 1:
 | 
			
		||||
					self.print_conversation(_('There is an ambiguity: %d nicks '
 | 
			
		||||
						'match.\n Please use graphical interface') % nb_match ,
 | 
			
		||||
						'info' )
 | 
			
		||||
					self.clear(self.msg_textview)
 | 
			
		||||
				else:
 | 
			
		||||
					# We can't do the difference between nick and reason
 | 
			
		||||
					# So we don't say the nick
 | 
			
		||||
					self.print_conversation(_('Nickname not found') , 'info')
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'names':
 | 
			
		||||
			# print the list of participants
 | 
			
		||||
			nicklist=''
 | 
			
		||||
			i=0
 | 
			
		||||
			for contact in self.iter_contact_rows():
 | 
			
		||||
				nicklist += '[ %-12.12s ] ' % (contact[C_NICK].decode('utf-8'))
 | 
			
		||||
				i=i+1
 | 
			
		||||
				if i == 3:
 | 
			
		||||
					i=0
 | 
			
		||||
					self.print_conversation(nicklist, 'info')
 | 
			
		||||
					nicklist=''
 | 
			
		||||
			if nicklist:
 | 
			
		||||
				self.print_conversation(nicklist, 'info')
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'help':
 | 
			
		||||
			if len(message_array):
 | 
			
		||||
				subcommand = message_array.pop(0)
 | 
			
		||||
				self.get_command_help(subcommand)
 | 
			
		||||
			else:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'say':
 | 
			
		||||
			gajim.connections[self.account].send_gc_message(self.room_jid,
 | 
			
		||||
									message[4:])
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'block':
 | 
			
		||||
			if len(message_array) == 0:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
				return True
 | 
			
		||||
			nick = message_array[0].strip()
 | 
			
		||||
			self.on_block(None, nick)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
		elif command == 'unblock':
 | 
			
		||||
			if len(message_array) == 0:
 | 
			
		||||
				self.get_command_help(command)
 | 
			
		||||
				return True
 | 
			
		||||
			nick = message_array[0].strip()
 | 
			
		||||
			self.on_unblock(None, nick)
 | 
			
		||||
			self.clear(self.msg_textview)
 | 
			
		||||
			return True
 | 
			
		||||
 | 
			
		||||
		return False
 | 
			
		||||
 | 
			
		||||
	def send_message(self, message, xhtml=None):
 | 
			
		||||
		'''call this function to send our message'''
 | 
			
		||||
		if not message:
 | 
			
		||||
| 
						 | 
				
			
			@ -1778,79 +1517,12 @@ class GroupchatControl(ChatControlBase):
 | 
			
		|||
 | 
			
		||||
		if message != '' or message != '\n':
 | 
			
		||||
			self.save_sent_message(message)
 | 
			
		||||
 | 
			
		||||
			if not self._process_command(message):
 | 
			
		||||
				# Send the message
 | 
			
		||||
				gajim.connections[self.account].send_gc_message(self.room_jid,
 | 
			
		||||
					message, xhtml=xhtml)
 | 
			
		||||
				self.msg_textview.get_buffer().set_text('')
 | 
			
		||||
				self.msg_textview.grab_focus()
 | 
			
		||||
 | 
			
		||||
	def get_command_help(self, command):
 | 
			
		||||
		if command == 'help':
 | 
			
		||||
			self.print_conversation(_('Commands: %s') % GroupchatControl.MUC_CMDS,
 | 
			
		||||
				'info')
 | 
			
		||||
		elif command == 'ban':
 | 
			
		||||
			s = _('Usage: /%s <nickname|JID> [reason], bans the JID from the group'
 | 
			
		||||
				' chat. The nickname of an occupant may be substituted, but not if '
 | 
			
		||||
				'it contains "@". If the JID is currently in the group chat, '
 | 
			
		||||
				'he/she/it will also be kicked.') % command
 | 
			
		||||
			self.print_conversation(s, 'info')
 | 
			
		||||
		elif command == 'chat' or command == 'query':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <nickname>, opens a private chat'
 | 
			
		||||
				' window with the specified occupant.') % command, 'info')
 | 
			
		||||
		elif command == 'clear':
 | 
			
		||||
			self.print_conversation(
 | 
			
		||||
				_('Usage: /%s, clears the text window.') % command, 'info')
 | 
			
		||||
		elif command == 'close' or command == 'leave' or command == 'part':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s [reason], closes the current '
 | 
			
		||||
				'window or tab, displaying reason if specified.') % command, 'info')
 | 
			
		||||
		elif command == 'compact':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s, hide the chat buttons.') % \
 | 
			
		||||
				command, 'info')
 | 
			
		||||
		elif command == 'invite':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <JID> [reason], invites JID to '
 | 
			
		||||
				'the current group chat, optionally providing a reason.') % command,
 | 
			
		||||
				'info')
 | 
			
		||||
		elif command == 'join':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <room>@<server>[/nickname], '
 | 
			
		||||
				'offers to join room@server optionally using specified nickname.') \
 | 
			
		||||
				% command, 'info')
 | 
			
		||||
		elif command == 'kick':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <nickname> [reason], removes '
 | 
			
		||||
				'the occupant specified by nickname from the group chat and '
 | 
			
		||||
				'optionally displays a reason.') % command, 'info')
 | 
			
		||||
		elif command == 'me':
 | 
			
		||||
			self.print_conversation(_('Usage: /%(command)s <action>, sends action '
 | 
			
		||||
				'to the current group chat. Use third person. (e.g. /%(command)s '
 | 
			
		||||
				'explodes.)') % {'command': command}, 'info')
 | 
			
		||||
		elif command == 'msg':
 | 
			
		||||
			s = _('Usage: /%s <nickname> [message], opens a private message window'
 | 
			
		||||
				' and sends message to the occupant specified by nickname.') % \
 | 
			
		||||
				command
 | 
			
		||||
			self.print_conversation(s, 'info')
 | 
			
		||||
		elif command == 'nick':
 | 
			
		||||
			s = _('Usage: /%s <nickname>, changes your nickname in current group '
 | 
			
		||||
				'chat.')	% command
 | 
			
		||||
			self.print_conversation(s, 'info')
 | 
			
		||||
		elif command == 'names':
 | 
			
		||||
			s = _('Usage: /%s , display the names of group chat occupants.')\
 | 
			
		||||
				% command
 | 
			
		||||
			self.print_conversation(s, 'info')
 | 
			
		||||
		elif command == 'topic':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s [topic], displays or updates the'
 | 
			
		||||
				' current group chat topic.') % command, 'info')
 | 
			
		||||
		elif command == 'say':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <message>, sends a message '
 | 
			
		||||
				'without looking for other commands.') % command, 'info')
 | 
			
		||||
		elif command == 'block':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <nickname>, prevent <nickname> '
 | 
			
		||||
				'to send you messages or private messages.') % command, 'info')
 | 
			
		||||
		elif command == 'unblock':
 | 
			
		||||
			self.print_conversation(_('Usage: /%s <nickname>, allow <nickname> '
 | 
			
		||||
				'to send you messages and private messages.') % command, 'info')
 | 
			
		||||
		else:
 | 
			
		||||
			self.print_conversation(_('No help info for /%s') % command, 'info')
 | 
			
		||||
         
 | 
			
		||||
			# Send the message
 | 
			
		||||
			gajim.connections[self.account].send_gc_message(self.room_jid, 
 | 
			
		||||
				message, xhtml=xhtml)
 | 
			
		||||
			self.msg_textview.get_buffer().set_text('')
 | 
			
		||||
			self.msg_textview.grab_focus()
 | 
			
		||||
 | 
			
		||||
	def get_role(self, nick):
 | 
			
		||||
		gc_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid,
 | 
			
		||||
| 
						 | 
				
			
			@ -2100,41 +1772,6 @@ class GroupchatControl(ChatControlBase):
 | 
			
		|||
				'utf-8')
 | 
			
		||||
 | 
			
		||||
			splitted_text = text.split()
 | 
			
		||||
			# topic completion
 | 
			
		||||
			splitted_text2 = text.split(None, 1)
 | 
			
		||||
			if text.startswith('/topic '):
 | 
			
		||||
				if len(splitted_text2) == 2 and \
 | 
			
		||||
				self.subject.startswith(splitted_text2[1]) and\
 | 
			
		||||
				len(self.subject) > len(splitted_text2[1]):
 | 
			
		||||
					message_buffer.insert_at_cursor(
 | 
			
		||||
						self.subject[len(splitted_text2[1]):])
 | 
			
		||||
					return True
 | 
			
		||||
				elif len(splitted_text2) == 1 and text.startswith('/topic  '):
 | 
			
		||||
					message_buffer.delete(start_iter, end_iter)
 | 
			
		||||
					message_buffer.insert_at_cursor('/topic '+self.subject)
 | 
			
		||||
					return True
 | 
			
		||||
 | 
			
		||||
			# command completion
 | 
			
		||||
			if text.startswith('/') and len(splitted_text) == 1:
 | 
			
		||||
				text = splitted_text[0]
 | 
			
		||||
				if len(text) == 1: # user wants to cycle all commands
 | 
			
		||||
					self.cmd_hits = GroupchatControl.MUC_CMDS
 | 
			
		||||
				else:
 | 
			
		||||
					# cycle possible commands depending on what the user typed
 | 
			
		||||
					if self.last_key_tabs and len(self.cmd_hits) and \
 | 
			
		||||
					self.cmd_hits[0].startswith(text.lstrip('/')):
 | 
			
		||||
						self.cmd_hits.append(self.cmd_hits[0])
 | 
			
		||||
						self.cmd_hits.pop(0)
 | 
			
		||||
					else: # find possible commands
 | 
			
		||||
						self.cmd_hits = []
 | 
			
		||||
						for cmd in GroupchatControl.MUC_CMDS:
 | 
			
		||||
							if cmd.startswith(text.lstrip('/')):
 | 
			
		||||
								self.cmd_hits.append(cmd)
 | 
			
		||||
				if len(self.cmd_hits):
 | 
			
		||||
					message_buffer.delete(start_iter, end_iter)
 | 
			
		||||
					message_buffer.insert_at_cursor('/' + self.cmd_hits[0] + ' ')
 | 
			
		||||
					self.last_key_tabs = True
 | 
			
		||||
				return True
 | 
			
		||||
 | 
			
		||||
			# nick completion
 | 
			
		||||
			# check if tab is pressed with empty message
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue