Daniel Brötzmann pushed to branch master at gajim / gajim


Commits:
857f654c by wurstsalat at 2022-08-31T22:47:20+02:00
cfix: ReadMarkers: Fix read-state-sync and sending markers

Fixes #11114

- - - - -


3 changed files:

- gajim/common/modules/chat_markers.py
- gajim/gtk/control.py
- gajim/gtk/main.py


Changes:

=====================================
gajim/common/modules/chat_markers.py
=====================================
@@ -76,6 +76,7 @@ def _process_chat_marker(self,
 
         if properties.is_mam_message:
             if properties.from_.bare_match(self._client.get_own_jid()):
+                self._raise_event('read-state-sync', properties)
                 return
 
         self._raise_event('displayed-received', properties)


=====================================
gajim/gtk/control.py
=====================================
@@ -97,9 +97,6 @@ def __init__(self) -> None:
         # Used with encryption plugins
         self.sendmessage = False
 
-        # XEP-0333 Chat Markers
-        self.last_msg_id: Optional[str] = None
-
         self._muc_subjects: dict[
             types.ChatContactT, tuple[float, MucSubject]] = {}
 
@@ -153,7 +150,6 @@ def clear(self) -> None:
 
         self._contact = None
         self._client = None
-        self.last_msg_id = None
         self.reset_view()
         self._scrolled_view.clear()
         self._groupchat_state.clear()
@@ -456,13 +452,6 @@ def is_groupchat(self) -> bool:
     def mark_as_read(self, send_marker: bool = True) -> None:
         self._jump_to_end_button.reset_unread_count()
 
-        if send_marker and self.last_msg_id is not None:
-            # XEP-0333 Send <displayed> marker
-            self.client.get_module('ChatMarkers').send_displayed_marker(
-                self.contact,
-                self.last_msg_id)
-            self.last_msg_id = None
-
     def _on_autoscroll_changed(self,
                                _widget: ScrolledView,
                                autoscroll: bool
@@ -569,12 +558,6 @@ def _add_message(self,
         else:
             self._jump_to_end_button.add_unread_count()
 
-        if message_id and kind == 'incoming':
-            if self.is_groupchat:
-                self.last_msg_id = stanza_id or message_id
-            else:
-                self.last_msg_id = message_id
-
     def reset_view(self) -> None:
         self._scrolled_view.reset()
 


=====================================
gajim/gtk/main.py
=====================================
@@ -840,17 +840,30 @@ def mark_as_read(self,
                      send_marker: bool = True
                      ) -> None:
 
+        unread_count = self.get_chat_unread_count(account, jid)
+
         set_urgency_hint(self, False)
         control = self.get_control()
         if control.has_active_chat():
-            # Send displayed marker and
-            # reset jump to bottom button unread counter
+            # Reset jump to bottom button unread counter
             control.mark_as_read(send_marker=send_marker)
 
         # Reset chat list unread counter (emits unread-count-changed)
         chat_list_stack = self._chat_page.get_chat_list_stack()
         chat_list_stack.mark_as_read(account, jid)
 
+        if not send_marker or not unread_count:
+            # Read marker must be sent only once
+            return
+
+        last_message = app.storage.archive.get_last_conversation_line(
+            account, jid)
+        client = app.get_client(account)
+        contact = client.get_module('Contacts').get_contact(jid)
+        client.get_module('ChatMarkers').send_displayed_marker(
+            contact,
+            last_message.message_id)
+
     def _on_window_active(self,
                           window: Gtk.ApplicationWindow,
                           _param: Any
@@ -966,12 +979,10 @@ def _on_read_state_sync(self, event: 
events.ReadStateSync) -> None:
         else:
             jid = event.jid
 
-        control = self.get_control()
-        if not control.is_loaded(event.account, jid):
-            return
+        last_message = app.storage.archive.get_last_conversation_line(
+            event.account, jid)
 
-        # TODO: last_msg_id does not work and needs to be refactored
-        if event.marker_id != control.last_msg_id:
+        if event.marker_id != last_message.message_id:
             return
 
         self.mark_as_read(event.account, jid, send_marker=False)



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/857f654cd9fe6cbd9a0b374a277a62a7b85def28

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/857f654cd9fe6cbd9a0b374a277a62a7b85def28
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to