self-ping: do not /cycle on timeout, log only

This commit is contained in:
Georg Lukas 2018-11-26 16:22:49 +01:00
parent 8a23706b72
commit b0a19bb019

View file

@ -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 #####################################