diff options
author | lovetox <philipp@hoerist.com> | 2022-08-11 01:41:42 +0300 |
---|---|---|
committer | lovetox <philipp@hoerist.com> | 2022-08-11 01:41:42 +0300 |
commit | 26cc455ad15b179e40e070f7d05cfe342cff82d3 (patch) | |
tree | cede4ca336ecb9b106290dfe05050769dd1813ad | |
parent | 2d9df4dc6e8e7a18750c8e0e0d51b89848dfaccd (diff) |
refactor: Load messages on contact switchunify-control
-rw-r--r-- | gajim/gtk/control.py | 25 | ||||
-rw-r--r-- | gajim/gtk/conversation/scrolled.py | 16 | ||||
-rw-r--r-- | gajim/gtk/conversation/view.py | 11 |
3 files changed, 25 insertions, 27 deletions
diff --git a/gajim/gtk/control.py b/gajim/gtk/control.py index 2930ca684..5e7cb866b 100644 --- a/gajim/gtk/control.py +++ b/gajim/gtk/control.py @@ -80,7 +80,7 @@ class ChatControl(EventHelper): self._scrolled_view.connect('autoscroll-changed', self._on_autoscroll_changed) self._scrolled_view.connect('request-history', - self.fetch_n_lines_history, 20) + self._fetch_n_lines_history, 20) self._ui.conv_view_overlay.add(self._scrolled_view) self.conversation_view = self._scrolled_view.get_view() @@ -502,7 +502,7 @@ class ChatControl(EventHelper): row = self.conversation_view.get_row_by_log_line_id(log_line_id) if row is None: # Clear view and reload conversation around timestamp - self.conversation_view.lock() + self._scrolled_view.block_request_signal(True) self.reset_view() before, at_after = app.storage.archive.get_conversation_around( self.contact.account, self.contact.jid, timestamp) @@ -512,22 +512,21 @@ class ChatControl(EventHelper): GLib.idle_add( self.conversation_view.scroll_to_message_and_highlight, log_line_id) - GLib.idle_add(self.conversation_view.unlock) + GLib.idle_add(self._scrolled_view.block_request_signal, False) - def fetch_n_lines_history(self, - _scrolled: Gtk.ScrolledWindow, - before: bool, - n_lines: int - ) -> None: + def _fetch_n_lines_history(self, + _scrolled: Gtk.ScrolledWindow, + before: bool, + n_lines: int + ) -> None: - if self.conversation_view.is_locked(): - return + self._scrolled_view.block_request_signal(True) - self.conversation_view.lock() if before: row = self.conversation_view.get_first_message_row() else: row = self.conversation_view.get_last_message_row() + if row is None: timestamp = time.time() else: @@ -542,7 +541,7 @@ class ChatControl(EventHelper): if not messages: self._scrolled_view.set_history_complete(before, True) - self.conversation_view.unlock() + self._scrolled_view.block_request_signal(False) return self.add_messages(messages) @@ -554,7 +553,7 @@ class ChatControl(EventHelper): # if self.conversation_view.reduce_message_count(before): # self._scrolled_view.set_history_complete(before, False) - self.conversation_view.unlock() + self._scrolled_view.block_request_signal(False) def add_messages(self, messages: list[ConversationRow]): for msg in messages: diff --git a/gajim/gtk/conversation/scrolled.py b/gajim/gtk/conversation/scrolled.py index 1797488df..7854f565c 100644 --- a/gajim/gtk/conversation/scrolled.py +++ b/gajim/gtk/conversation/scrolled.py @@ -66,6 +66,7 @@ class ScrolledView(Gtk.ScrolledWindow): self._upper_complete: bool = False self._lower_complete: bool = False self._requesting: Optional[str] = None + self._block_request_signal = False vadjustment = self.get_vadjustment() vadjustment.connect('notify::upper', self._on_adj_upper_changed) @@ -76,11 +77,14 @@ class ScrolledView(Gtk.ScrolledWindow): self.set_focus_vadjustment(Gtk.Adjustment()) def clear(self) -> None: + self._block_request_signal = True self._view.clear() def switch_contact(self, contact: ChatContactT) -> None: self.reset() self._view.switch_contact(contact) + self._block_request_signal = False + self.emit('request-history', True) def get_autoscroll(self) -> bool: return self._autoscroll @@ -88,6 +92,9 @@ class ScrolledView(Gtk.ScrolledWindow): def get_view(self) -> ConversationView: return self._view + def block_request_signal(self, value: bool) -> None: + self._block_request_signal = value + def reset(self) -> None: self._current_upper = 0 self._request_history_at_upper = None @@ -127,7 +134,8 @@ class ScrolledView(Gtk.ScrolledWindow): if upper == adj.get_page_size(): # There is no scrollbar - self.emit('request-history', True) + if not self._block_request_signal: + self.emit('request-history', True) self._lower_complete = True self._autoscroll = True self.emit('autoscroll-changed', self._autoscroll) @@ -170,7 +178,8 @@ class ScrolledView(Gtk.ScrolledWindow): self._request_history_at_upper = adj.get_upper() # Workaround: https://gitlab.gnome.org/GNOME/gtk/merge_requests/395 self.set_kinetic_scrolling(False) - self.emit('request-history', True) + if not self._block_request_signal: + self.emit('request-history', True) self._requesting = 'before' elif (adj.get_upper() - (adj.get_value() + adj.get_page_size()) < distance): @@ -179,5 +188,6 @@ class ScrolledView(Gtk.ScrolledWindow): return # Workaround: https://gitlab.gnome.org/GNOME/gtk/merge_requests/395 self.set_kinetic_scrolling(False) - self.emit('request-history', False) + if not self._block_request_signal: + self.emit('request-history', False) self._requesting = 'after' diff --git a/gajim/gtk/conversation/view.py b/gajim/gtk/conversation/view.py index d66180f01..11cec0b57 100644 --- a/gajim/gtk/conversation/view.py +++ b/gajim/gtk/conversation/view.py @@ -76,7 +76,6 @@ class ConversationView(Gtk.ListBox): self._client = None self.encryption_enabled: bool = False - self._locked: bool = False # Keeps track of the number of rows shown in ConversationView self._row_count: int = 0 @@ -131,20 +130,10 @@ class ConversationView(Gtk.ListBox): def get_row_at_index(self, index: int) -> BaseRow: return cast(BaseRow, Gtk.ListBox.get_row_at_index(self, index)) - def is_locked(self) -> bool: - return self._locked - - def lock(self) -> None: - self._locked = True - - def unlock(self) -> None: - self._locked = False - def reset(self) -> None: for row in self.get_children()[2:]: row.destroy() - self.unlock() self._row_count = 0 self._active_date_rows = set() self._message_id_row_map = {} |