summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/embed.py2
-rw-r--r--plugins/upload.py2
-rw-r--r--poezio/core/handlers.py12
-rw-r--r--poezio/tabs/muctab.py27
4 files changed, 35 insertions, 8 deletions
diff --git a/plugins/embed.py b/plugins/embed.py
index 726b1eb2..0cdc41d2 100644
--- a/plugins/embed.py
+++ b/plugins/embed.py
@@ -20,7 +20,7 @@ from poezio.theming import get_theme
class Plugin(BasePlugin):
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(
tab_t,
'embed',
diff --git a/plugins/upload.py b/plugins/upload.py
index db8615c2..7e25070e 100644
--- a/plugins/upload.py
+++ b/plugins/upload.py
@@ -33,7 +33,7 @@ class Plugin(BasePlugin):
def init(self):
if not self.core.xmpp['xep_0363']:
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(
_class,
'upload',
diff --git a/poezio/core/handlers.py b/poezio/core/handlers.py
index b87e7307..0a6e7e50 100644
--- a/poezio/core/handlers.py
+++ b/poezio/core/handlers.py
@@ -1068,7 +1068,8 @@ class HandlerCore:
'{http://jabber.org/protocol/muc#user}x') is not None:
return
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')
# If a resource got offline, display the message in the conversation with this
# precise resource.
@@ -1078,12 +1079,15 @@ class HandlerCore:
roster.connected -= 1
if contact.name:
name = contact.name
+ offline_msg = '%s is \x191}offline' % name
+ if status:
+ offline_msg += ' (\x19o%s\x191})' % status
if jid.resource:
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(
- jid.bare, '\x195}%s is \x191}offline' % name)
- self.core.information('\x193}%s \x195}is \x191}offline' % name,
+ jid.bare, '\x195}' + offline_msg)
+ self.core.information('\x193}' + offline_msg,
'Roster')
roster.modified()
if isinstance(self.core.tabs.current_tab, tabs.RosterInfoTab):
diff --git a/poezio/tabs/muctab.py b/poezio/tabs/muctab.py
index 54795bc3..d533f817 100644
--- a/poezio/tabs/muctab.py
+++ b/poezio/tabs/muctab.py
@@ -53,6 +53,7 @@ class MucTab(ChatTab):
plugin_commands = {} # type: Dict[str, Command]
plugin_keys = {} # type: Dict[str, Callable]
additional_information = {} # type: Dict[str, Callable[[str], str]]
+ lagged = False
def __init__(self, core, jid, nick, password=None):
ChatTab.__init__(self, core, jid)
@@ -411,6 +412,8 @@ class MucTab(ChatTab):
if self.joined:
if self.input.text:
self.state = 'nonempty'
+ elif self.lagged:
+ self.state = 'disconnected'
else:
self.state = 'normal'
else:
@@ -436,6 +439,7 @@ class MucTab(ChatTab):
"""
Handle MUC presence
"""
+ self.reset_lag()
status_codes = set()
for status_code in presence.xml.findall(STATUS_XPATH):
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.core.refresh_window()
else: # Re-send a self-ping in a few seconds
+ self.reset_lag()
self.enable_self_ping_event()
def search_for_color(self, nick):
@@ -1162,8 +1167,26 @@ class MucTab(ChatTab):
return color
def on_self_ping_failed(self, iq):
- self.command_cycle("the MUC server is not responding")
- self.core.refresh_window()
+ if not self.lagged:
+ 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 #####################################