Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2022-08-11 01:41:42 +0300
committerlovetox <philipp@hoerist.com>2022-08-11 01:41:42 +0300
commit26cc455ad15b179e40e070f7d05cfe342cff82d3 (patch)
treecede4ca336ecb9b106290dfe05050769dd1813ad
parent2d9df4dc6e8e7a18750c8e0e0d51b89848dfaccd (diff)
refactor: Load messages on contact switchunify-control
-rw-r--r--gajim/gtk/control.py25
-rw-r--r--gajim/gtk/conversation/scrolled.py16
-rw-r--r--gajim/gtk/conversation/view.py11
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 = {}