emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ement 6a372ef28e 2/2: Fix: (ement-room-membership-event


From: ELPA Syncer
Subject: [elpa] externals/ement 6a372ef28e 2/2: Fix: (ement-room-membership-events--update) Deduplicate events
Date: Fri, 31 Mar 2023 08:58:17 -0400 (EDT)

branch: externals/ement
commit 6a372ef28ec641a8e3663648fe1dea423c0cb2ef
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Fix: (ement-room-membership-events--update) Deduplicate events
    
    Rarely, multiple copies of an event could appear, e.g. when loading
    old messages in large, bridged IRC rooms.  It's hard to say where the
    root cause is, but this solves it simply.
---
 README.org    | 4 +++-
 ement-room.el | 8 ++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/README.org b/README.org
index df7ebf8a03..93a5b3e29d 100644
--- a/README.org
+++ b/README.org
@@ -297,7 +297,9 @@ Note that, while ~matrix-client~ remains usable, and 
probably will for some time
 
 ** 0.8.2
 
-Nothing new yet.
+*Fixes*
+
++ Deduplicate grouped membership events.
 
 ** 0.8.1
 
diff --git a/ement-room.el b/ement-room.el
index 35ba8524c9..f1b0b98a0a 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -67,8 +67,12 @@ to sort events and update other slots."
 
 (defun ement-room-membership-events--update (struct)
   "Return STRUCT having sorted its events and updated its slots."
-  ;; Like the room timeline slot, events are sorted latest-first.
-  (setf (ement-room-membership-events-events struct) (cl-sort 
(ement-room-membership-events-events struct) #'>
+  ;; Like the room timeline slot, events are sorted latest-first.  We also 
deduplicate
+  ;; them , because it seems that we can end up with multiple copies of a 
membership event
+  ;; (e.g. when loading old messages).
+  (setf (ement-room-membership-events-events struct) (cl-delete-duplicates 
(ement-room-membership-events-events struct)
+                                                                           
:key #'ement-event-id :test #'equal)
+        (ement-room-membership-events-events struct) (cl-sort 
(ement-room-membership-events-events struct) #'>
                                                               :key 
#'ement-event-origin-server-ts)
         (ement-room-membership-events-earliest-ts struct) 
(ement-event-origin-server-ts
                                                            (car (last 
(ement-room-membership-events-events struct))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]