diff options
author | mathieui <mathieui@mathieui.net> | 2020-05-23 16:38:05 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2020-05-23 16:38:05 +0200 |
commit | e48780ddf0a6a80e0c36eaa8f8165c8d14ad63b1 (patch) | |
tree | 534654be974749c2f4ea0bc99451fb8da5c61843 /poezio/tabs | |
parent | 4c1ab027ac03ae3f0925eab03f43a5ad79d906d5 (diff) | |
parent | faeab78c7e3c9f125cfbfe3dce0fb18c9b8649c4 (diff) | |
download | poezio-e48780ddf0a6a80e0c36eaa8f8165c8d14ad63b1.tar.gz poezio-e48780ddf0a6a80e0c36eaa8f8165c8d14ad63b1.tar.bz2 poezio-e48780ddf0a6a80e0c36eaa8f8165c8d14ad63b1.tar.xz poezio-e48780ddf0a6a80e0c36eaa8f8165c8d14ad63b1.zip |
Merge branch 'fix-history-fetch' into 'master'
Fix many MAM issues
Closes #3516, #3496, #3498, #3506, #3522, and #3493
See merge request poezio/poezio!105
Diffstat (limited to 'poezio/tabs')
-rw-r--r-- | poezio/tabs/basetabs.py | 9 | ||||
-rw-r--r-- | poezio/tabs/conversationtab.py | 2 | ||||
-rw-r--r-- | poezio/tabs/muctab.py | 35 | ||||
-rw-r--r-- | poezio/tabs/privatetab.py | 2 |
4 files changed, 26 insertions, 22 deletions
diff --git a/poezio/tabs/basetabs.py b/poezio/tabs/basetabs.py index fbb0c4cf..a42ee41b 100644 --- a/poezio/tabs/basetabs.py +++ b/poezio/tabs/basetabs.py @@ -32,7 +32,6 @@ from typing import ( ) from poezio import ( - mam, poopt, timed_events, xhtml, @@ -493,12 +492,11 @@ class ChatTab(Tab): self._jid = jid #: Is the tab currently requesting MAM data? self.query_status = False - self.last_stanza_id = None - self._name = jid.full # type: Optional[str] - self.text_win = None + self.text_win = windows.TextWin() self.directed_presence = None self._text_buffer = TextBuffer() + self._text_buffer.add_window(self.text_win) self.chatstate = None # can be "active", "composing", "paused", "gone", "inactive" # We keep a reference of the event that will set our chatstate to "paused", so that # we can delete it or change it if we need to @@ -926,7 +924,8 @@ class ChatTab(Tab): def on_scroll_up(self): if not self.query_status: - asyncio.ensure_future(mam.on_scroll_up(tab=self)) + from poezio import mam + mam.schedule_scroll_up(tab=self) return self.text_win.scroll_up(self.text_win.height - 1) def on_scroll_down(self): diff --git a/poezio/tabs/conversationtab.py b/poezio/tabs/conversationtab.py index 70005f0f..5950e4cb 100644 --- a/poezio/tabs/conversationtab.py +++ b/poezio/tabs/conversationtab.py @@ -48,8 +48,6 @@ class ConversationTab(OneToOneTab): self.nick = None self.nick_sent = False self.state = 'normal' - self.text_win = windows.TextWin() - self._text_buffer.add_window(self.text_win) self.upper_bar = windows.ConversationStatusMessageWin() self.input = windows.MessageInput() # keys diff --git a/poezio/tabs/muctab.py b/poezio/tabs/muctab.py index d16ac58a..751509a7 100644 --- a/poezio/tabs/muctab.py +++ b/poezio/tabs/muctab.py @@ -31,7 +31,7 @@ from poezio import multiuserchat as muc from poezio import timed_events from poezio import windows from poezio import xhtml -from poezio.common import safeJID +from poezio.common import safeJID, to_utc from poezio.config import config from poezio.core.structs import Command from poezio.decorators import refresh_wrapper, command_args_parser @@ -40,7 +40,14 @@ from poezio.roster import roster from poezio.theming import get_theme, dump_tuple from poezio.user import User from poezio.core.structs import Completion, Status -from poezio.ui.types import BaseMessage, Message, InfoMessage, StatusMessage +from poezio.ui.types import ( + BaseMessage, + InfoMessage, + Message, + MucOwnJoinMessage, + MucOwnLeaveMessage, + StatusMessage, +) log = logging.getLogger(__name__) @@ -84,8 +91,6 @@ class MucTab(ChatTab): self.self_ping_event = None # UI stuff self.topic_win = windows.Topic() - self.text_win = windows.TextWin() - self._text_buffer.add_window(self.text_win) self.v_separator = windows.VerticalSeparator() self.user_win = windows.UserList() self.info_header = windows.MucInfoWin() @@ -151,10 +156,10 @@ class MucTab(ChatTab): """ status = self.core.get_status() if self.last_connection: - delta = datetime.now() - self.last_connection + delta = to_utc(datetime.now()) - to_utc(self.last_connection) seconds = delta.seconds + delta.days * 24 * 3600 else: - seconds = None + seconds = self._text_buffer.find_last_message() muc.join_groupchat( self.core, self.jid.bare, @@ -163,7 +168,6 @@ class MucTab(ChatTab): status=status.message, show=status.show, seconds=seconds) - asyncio.ensure_future(mam.on_tab_open(self)) def leave_room(self, message: str): if self.joined: @@ -200,7 +204,7 @@ class MucTab(ChatTab): 'color_spec': spec_col, 'nick': self.own_nick, } - self.add_message(InfoMessage(msg), typ=2) + self.add_message(MucOwnLeaveMessage(msg), typ=2) self.disconnect() muc.leave_groupchat(self.core.xmpp, self.jid.bare, self.own_nick, message) @@ -567,7 +571,7 @@ class MucTab(ChatTab): 'nick_col': color, 'info_col': info_col, } - self.add_message(InfoMessage(enable_message), typ=2) + self.add_message(MucOwnJoinMessage(enable_message), typ=2) self.core.enable_private_tabs(self.jid.bare, enable_message) if '201' in status_codes: self.add_message( @@ -594,6 +598,7 @@ class MucTab(ChatTab): }, ), typ=0) + mam.schedule_tab_open(self) def handle_presence_joined(self, presence: Presence, status_codes) -> None: """ @@ -651,7 +656,7 @@ class MucTab(ChatTab): def on_non_member_kicked(self): """We have been kicked because the MUC is members-only""" self.add_message( - InfoMessage( + MucOwnLeaveMessage( 'You have been kicked because you ' 'are not a member and the room is now members-only.' ), @@ -661,7 +666,7 @@ class MucTab(ChatTab): def on_muc_shutdown(self): """We have been kicked because the MUC service is shutting down""" self.add_message( - InfoMessage( + MucOwnLeaveMessage( 'You have been kicked because the' ' MUC service is shutting down.' ), @@ -759,6 +764,7 @@ class MucTab(ChatTab): """ When someone is banned from a muc """ + cls = InfoMessage self.users.remove(user) by = presence.xml.find('{%s}x/{%s}item/{%s}actor' % (NS_MUC_USER, NS_MUC_USER, NS_MUC_USER)) @@ -774,6 +780,7 @@ class MucTab(ChatTab): char_kick = theme.CHAR_KICK if from_nick == self.own_nick: # we are banned + cls = MucOwnLeaveMessage if by: kick_msg = ('\x191}%(spec)s \x193}You\x19%(info_col)s}' ' have been banned by \x194}%(by)s') % { @@ -834,12 +841,13 @@ class MucTab(ChatTab): 'reason': reason.text, 'info_col': info_col } - self.add_message(InfoMessage(kick_msg), typ=2) + self.add_message(cls(kick_msg), typ=2) def on_user_kicked(self, presence, user, from_nick): """ When someone is kicked from a muc """ + cls = InfoMessage self.users.remove(user) actor_elem = presence.xml.find('{%s}x/{%s}item/{%s}actor' % (NS_MUC_USER, NS_MUC_USER, NS_MUC_USER)) @@ -852,6 +860,7 @@ class MucTab(ChatTab): if actor_elem is not None: by = actor_elem.get('nick') or actor_elem.get('jid') if from_nick == self.own_nick: # we are kicked + cls = MucOwnLeaveMessage if by: kick_msg = ('\x191}%(spec)s \x193}You\x19' '%(info_col)s} have been kicked' @@ -912,7 +921,7 @@ class MucTab(ChatTab): 'reason': reason.text, 'info_col': info_col } - self.add_message(InfoMessage(kick_msg), typ=2) + self.add_message(cls(kick_msg), typ=2) def on_user_leave_groupchat(self, user: User, diff --git a/poezio/tabs/privatetab.py b/poezio/tabs/privatetab.py index b43294a1..cd2123f3 100644 --- a/poezio/tabs/privatetab.py +++ b/poezio/tabs/privatetab.py @@ -46,8 +46,6 @@ class PrivateTab(OneToOneTab): def __init__(self, core, jid, nick): OneToOneTab.__init__(self, core, jid) self.own_nick = nick - self.text_win = windows.TextWin() - self._text_buffer.add_window(self.text_win) self.info_header = windows.PrivateInfoWin() self.input = windows.MessageInput() # keys |