Merge branch 'master' into 'master'
self-ping: do not /cycle on timeout, log only See merge request poezio/poezio!16
This commit is contained in:
commit
f034f7d000
4 changed files with 35 additions and 8 deletions
|
@ -20,7 +20,7 @@ from poezio.theming import get_theme
|
||||||
|
|
||||||
class Plugin(BasePlugin):
|
class Plugin(BasePlugin):
|
||||||
def init(self):
|
def init(self):
|
||||||
for tab_t in [tabs.MucTab, tabs.ConversationTab, tabs.PrivateTab]:
|
for tab_t in [tabs.MucTab, tabs.StaticConversationTab, tabs.DynamicConversationTab, tabs.PrivateTab]:
|
||||||
self.api.add_tab_command(
|
self.api.add_tab_command(
|
||||||
tab_t,
|
tab_t,
|
||||||
'embed',
|
'embed',
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Plugin(BasePlugin):
|
||||||
def init(self):
|
def init(self):
|
||||||
if not self.core.xmpp['xep_0363']:
|
if not self.core.xmpp['xep_0363']:
|
||||||
raise Exception('slixmpp XEP-0363 plugin failed to load')
|
raise Exception('slixmpp XEP-0363 plugin failed to load')
|
||||||
for _class in (tabs.PrivateTab, tabs.ConversationTab, tabs.MucTab):
|
for _class in (tabs.PrivateTab, tabs.StaticConversationTab, tabs.DynamicConversationTab, tabs.MucTab):
|
||||||
self.api.add_tab_command(
|
self.api.add_tab_command(
|
||||||
_class,
|
_class,
|
||||||
'upload',
|
'upload',
|
||||||
|
|
|
@ -1068,7 +1068,8 @@ class HandlerCore:
|
||||||
'{http://jabber.org/protocol/muc#user}x') is not None:
|
'{http://jabber.org/protocol/muc#user}x') is not None:
|
||||||
return
|
return
|
||||||
jid = presence['from']
|
jid = presence['from']
|
||||||
if not logger.log_roster_change(jid.bare, 'got offline'):
|
status = presence['status']
|
||||||
|
if not logger.log_roster_change(jid.bare, 'got offline{}'.format(' ({})'.format(status) if status else '')):
|
||||||
self.core.information('Unable to write in the log file', 'Error')
|
self.core.information('Unable to write in the log file', 'Error')
|
||||||
# If a resource got offline, display the message in the conversation with this
|
# If a resource got offline, display the message in the conversation with this
|
||||||
# precise resource.
|
# precise resource.
|
||||||
|
@ -1078,12 +1079,15 @@ class HandlerCore:
|
||||||
roster.connected -= 1
|
roster.connected -= 1
|
||||||
if contact.name:
|
if contact.name:
|
||||||
name = contact.name
|
name = contact.name
|
||||||
|
offline_msg = '%s is \x191}offline' % name
|
||||||
|
if status:
|
||||||
|
offline_msg += ' (\x19o%s\x191})' % status
|
||||||
if jid.resource:
|
if jid.resource:
|
||||||
self.core.add_information_message_to_conversation_tab(
|
self.core.add_information_message_to_conversation_tab(
|
||||||
jid.full, '\x195}%s is \x191}offline' % name)
|
jid.full, '\x195}' + offline_msg)
|
||||||
self.core.add_information_message_to_conversation_tab(
|
self.core.add_information_message_to_conversation_tab(
|
||||||
jid.bare, '\x195}%s is \x191}offline' % name)
|
jid.bare, '\x195}' + offline_msg)
|
||||||
self.core.information('\x193}%s \x195}is \x191}offline' % name,
|
self.core.information('\x193}' + offline_msg,
|
||||||
'Roster')
|
'Roster')
|
||||||
roster.modified()
|
roster.modified()
|
||||||
if isinstance(self.core.tabs.current_tab, tabs.RosterInfoTab):
|
if isinstance(self.core.tabs.current_tab, tabs.RosterInfoTab):
|
||||||
|
|
|
@ -53,6 +53,7 @@ class MucTab(ChatTab):
|
||||||
plugin_commands = {} # type: Dict[str, Command]
|
plugin_commands = {} # type: Dict[str, Command]
|
||||||
plugin_keys = {} # type: Dict[str, Callable]
|
plugin_keys = {} # type: Dict[str, Callable]
|
||||||
additional_information = {} # type: Dict[str, Callable[[str], str]]
|
additional_information = {} # type: Dict[str, Callable[[str], str]]
|
||||||
|
lagged = False
|
||||||
|
|
||||||
def __init__(self, core, jid, nick, password=None):
|
def __init__(self, core, jid, nick, password=None):
|
||||||
ChatTab.__init__(self, core, jid)
|
ChatTab.__init__(self, core, jid)
|
||||||
|
@ -411,6 +412,8 @@ class MucTab(ChatTab):
|
||||||
if self.joined:
|
if self.joined:
|
||||||
if self.input.text:
|
if self.input.text:
|
||||||
self.state = 'nonempty'
|
self.state = 'nonempty'
|
||||||
|
elif self.lagged:
|
||||||
|
self.state = 'disconnected'
|
||||||
else:
|
else:
|
||||||
self.state = 'normal'
|
self.state = 'normal'
|
||||||
else:
|
else:
|
||||||
|
@ -436,6 +439,7 @@ class MucTab(ChatTab):
|
||||||
"""
|
"""
|
||||||
Handle MUC presence
|
Handle MUC presence
|
||||||
"""
|
"""
|
||||||
|
self.reset_lag()
|
||||||
status_codes = set()
|
status_codes = set()
|
||||||
for status_code in presence.xml.findall(STATUS_XPATH):
|
for status_code in presence.xml.findall(STATUS_XPATH):
|
||||||
status_codes.add(status_code.attrib['code'])
|
status_codes.add(status_code.attrib['code'])
|
||||||
|
@ -1143,6 +1147,7 @@ class MucTab(ChatTab):
|
||||||
self.command_cycle(iq["error"]["text"] or "not in this room")
|
self.command_cycle(iq["error"]["text"] or "not in this room")
|
||||||
self.core.refresh_window()
|
self.core.refresh_window()
|
||||||
else: # Re-send a self-ping in a few seconds
|
else: # Re-send a self-ping in a few seconds
|
||||||
|
self.reset_lag()
|
||||||
self.enable_self_ping_event()
|
self.enable_self_ping_event()
|
||||||
|
|
||||||
def search_for_color(self, nick):
|
def search_for_color(self, nick):
|
||||||
|
@ -1162,8 +1167,26 @@ class MucTab(ChatTab):
|
||||||
return color
|
return color
|
||||||
|
|
||||||
def on_self_ping_failed(self, iq):
|
def on_self_ping_failed(self, iq):
|
||||||
self.command_cycle("the MUC server is not responding")
|
if not self.lagged:
|
||||||
self.core.refresh_window()
|
self.lagged = True
|
||||||
|
info_text = dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
|
||||||
|
self._text_buffer.add_message(
|
||||||
|
"\x19%s}MUC service not responding." % info_text)
|
||||||
|
self._state = 'disconnected'
|
||||||
|
self.core.refresh_window()
|
||||||
|
self.enable_self_ping_event()
|
||||||
|
|
||||||
|
def reset_lag(self):
|
||||||
|
if self.lagged:
|
||||||
|
self.lagged = False
|
||||||
|
info_text = dump_tuple(get_theme().COLOR_INFORMATION_TEXT)
|
||||||
|
self._text_buffer.add_message(
|
||||||
|
"\x19%s}MUC service is responding again." % info_text)
|
||||||
|
if self != self.core.tabs.current_tab:
|
||||||
|
self._state = 'joined'
|
||||||
|
else:
|
||||||
|
self._state = 'normal'
|
||||||
|
self.core.refresh_window()
|
||||||
|
|
||||||
########################## UI ONLY #####################################
|
########################## UI ONLY #####################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue