Send chat states in muc and private conversations.

Also, do not send active/inactive states if we switch tab
while we are composing a message
This commit is contained in:
Florent Le Coz 2011-02-24 21:03:30 +01:00
parent 1d94e80da7
commit e4b96eb752

View file

@ -265,7 +265,7 @@ class ChatTab(Tab):
Send an empty chatstate message Send an empty chatstate message
""" """
msg = self.core.xmpp.make_message(self.get_name()) msg = self.core.xmpp.make_message(self.get_name())
msg['type'] = 'chat' msg['type'] = self.message_type
msg['chat_state'] = state msg['chat_state'] = state
msg.send() msg.send()
@ -376,6 +376,7 @@ class MucTab(ChatTab, TabWithInfoWin):
The tab containing a multi-user-chat room. The tab containing a multi-user-chat room.
It contains an userlist, an input, a topic, an information and a chat zone It contains an userlist, an input, a topic, an information and a chat zone
""" """
message_type = 'chat'
def __init__(self, core, room): def __init__(self, core, room):
ChatTab.__init__(self, core, room) ChatTab.__init__(self, core, room)
TabWithInfoWin.__init__(self) TabWithInfoWin.__init__(self)
@ -633,7 +634,10 @@ class MucTab(ChatTab, TabWithInfoWin):
if key in self.key_func: if key in self.key_func:
self.key_func[key]() self.key_func[key]()
return False return False
empty_before = self.input.get_text() == '' or self.input.get_text().startswith('/')
self.input.do_command(key) self.input.do_command(key)
empty_after = self.input.get_text() == '' or self.input.get_text().startswith('/')
self.send_composing_chat_state(empty_before, empty_after)
return False return False
def completion(self): def completion(self):
@ -673,12 +677,16 @@ class MucTab(ChatTab, TabWithInfoWin):
self._room.set_color_state(theme.COLOR_TAB_NORMAL) self._room.set_color_state(theme.COLOR_TAB_NORMAL)
self.text_win.remove_line_separator() self.text_win.remove_line_separator()
self.text_win.add_line_separator() self.text_win.add_line_separator()
if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('inactive')
def on_gain_focus(self): def on_gain_focus(self):
self._room.set_color_state(theme.COLOR_TAB_CURRENT) self._room.set_color_state(theme.COLOR_TAB_CURRENT)
if self.text_win.built_lines and self.text_win.built_lines[-1] is None: if self.text_win.built_lines and self.text_win.built_lines[-1] is None:
self.text_win.remove_line_separator() self.text_win.remove_line_separator()
curses.curs_set(1) curses.curs_set(1)
if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('active')
def on_scroll_up(self): def on_scroll_up(self):
self.text_win.scroll_up(self.text_win.height-1) self.text_win.scroll_up(self.text_win.height-1)
@ -704,6 +712,7 @@ class PrivateTab(ChatTab, TabWithInfoWin):
""" """
The tab containg a private conversation (someone from a MUC) The tab containg a private conversation (someone from a MUC)
""" """
message_type = 'chat'
def __init__(self, core, room): def __init__(self, core, room):
ChatTab.__init__(self, core, room) ChatTab.__init__(self, core, room)
TabWithInfoWin.__init__(self) TabWithInfoWin.__init__(self)
@ -774,17 +783,24 @@ class PrivateTab(ChatTab, TabWithInfoWin):
if key in self.key_func: if key in self.key_func:
self.key_func[key]() self.key_func[key]()
return False return False
empty_before = self.input.get_text() == '' or self.input.get_text().startswith('/')
self.input.do_command(key) self.input.do_command(key)
empty_after = self.input.get_text() == '' or self.input.get_text().startswith('/')
self.send_composing_chat_state(empty_before, empty_after)
return False return False
def on_lose_focus(self): def on_lose_focus(self):
self._room.set_color_state(theme.COLOR_TAB_NORMAL) self._room.set_color_state(theme.COLOR_TAB_NORMAL)
self.text_win.remove_line_separator() self.text_win.remove_line_separator()
self.text_win.add_line_separator() self.text_win.add_line_separator()
if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('inactive')
def on_gain_focus(self): def on_gain_focus(self):
self._room.set_color_state(theme.COLOR_TAB_CURRENT) self._room.set_color_state(theme.COLOR_TAB_CURRENT)
curses.curs_set(1) curses.curs_set(1)
if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('active')
def on_scroll_up(self): def on_scroll_up(self):
self.text_win.scroll_up(self.text_win.height-1) self.text_win.scroll_up(self.text_win.height-1)
@ -1107,6 +1123,7 @@ class ConversationTab(ChatTab, TabWithInfoWin):
""" """
The tab containg a normal conversation (not from a MUC) The tab containg a normal conversation (not from a MUC)
""" """
message_type = 'chat'
def __init__(self, core, jid): def __init__(self, core, jid):
txt_buff = text_buffer.TextBuffer() txt_buff = text_buffer.TextBuffer()
ChatTab.__init__(self, core, txt_buff) ChatTab.__init__(self, core, txt_buff)
@ -1195,13 +1212,13 @@ class ConversationTab(ChatTab, TabWithInfoWin):
self.set_color_state(theme.COLOR_TAB_NORMAL) self.set_color_state(theme.COLOR_TAB_NORMAL)
self.text_win.remove_line_separator() self.text_win.remove_line_separator()
self.text_win.add_line_separator() self.text_win.add_line_separator()
if config.get('send_chat_states', 'true') == 'true': if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('inactive') self.send_chat_state('inactive')
def on_gain_focus(self): def on_gain_focus(self):
self.set_color_state(theme.COLOR_TAB_CURRENT) self.set_color_state(theme.COLOR_TAB_CURRENT)
curses.curs_set(1) curses.curs_set(1)
if config.get('send_chat_states', 'true') == 'true': if config.get('send_chat_states', 'true') == 'true' and not self.input.get_text():
self.send_chat_state('active') self.send_chat_state('active')
def on_scroll_up(self): def on_scroll_up(self):