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

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

[elpa] externals/ement f2ba62c813: Add: (ement-room--format-membership-e


From: ELPA Syncer
Subject: [elpa] externals/ement f2ba62c813: Add: (ement-room--format-membership-events) joined-and-left pairs
Date: Wed, 2 Nov 2022 09:57:40 -0400 (EDT)

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

    Add: (ement-room--format-membership-events) joined-and-left pairs
---
 README.org    |  3 +++
 ement-room.el | 25 +++++++++++++++++++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/README.org b/README.org
index ffceed5244..014b443005 100644
--- a/README.org
+++ b/README.org
@@ -289,6 +289,9 @@ Note that, while ~matrix-client~ remains usable, and 
probably will for some time
 
 ** 0.5-pre
 
+*Additions*
++ Present "joined-and-left" and "rejoined-and-left" membership event pairs as 
such.
+
 *Changes*
 + When selecting a room to view with completion, don't offer spaces.
 
diff --git a/ement-room.el b/ement-room.el
index 112a3410f3..8610bb62cd 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -3688,7 +3688,8 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                             (not (equal 
(alist-get 'avatar_url (ement-event-content event))
                                                                         
(map-nested-elt (ement-event-unsigned event)
                                                                                
         '(prev_content avatar_url)))))))
-                                                   events)))
+                                                   events))
+                  join-and-leave-events rejoin-and-leave-events)
              ;; Remove apparent duplicates between join/rejoin events.
              (setf join-events (cl-delete-if (lambda (event)
                                                (cl-find (ement-event-state-key 
event) rejoin-events
@@ -3697,12 +3698,32 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                    rejoin-events (cl-delete-if (lambda (event)
                                                  (cl-find 
(ement-event-state-key event) join-events
                                                           :test #'equal :key 
#'ement-event-state-key))
-                                               rejoin-events))
+                                               rejoin-events)
+                   join-and-leave-events (cl-loop for join-event in join-events
+                                                  for left-event = (cl-find 
(ement-event-state-key join-event) left-events
+                                                                            
:test #'equal :key #'ement-event-state-key)
+                                                  when left-event
+                                                  collect left-event
+                                                  and do (setf join-events 
(cl-delete (ement-event-state-key join-event) join-events
+                                                                               
       :test #'equal :key #'ement-event-state-key)
+                                                               left-events 
(cl-delete (ement-event-state-key left-event) left-events
+                                                                               
       :test #'equal :key #'ement-event-state-key)))
+                   rejoin-and-leave-events (cl-loop for rejoin-event in 
rejoin-events
+                                                    for left-event = (cl-find 
(ement-event-state-key rejoin-event) left-events
+                                                                              
:test #'equal :key #'ement-event-state-key)
+                                                    when left-event
+                                                    collect left-event
+                                                    and do (setf rejoin-events 
(cl-delete (ement-event-state-key rejoin-event) rejoin-events
+                                                                               
           :test #'equal :key #'ement-event-state-key)
+                                                                 left-events 
(cl-delete (ement-event-state-key left-event) left-events
+                                                                               
         :test #'equal :key #'ement-event-state-key))))
              (format "Membership: %s."
                      (string-join (cl-loop for (type . events)
                                            in (ement-alist "rejoined" 
rejoin-events
                                                            "joined" join-events
                                                            "left" left-events
+                                                           "joined and left" 
join-and-leave-events
+                                                           "rejoined and left" 
rejoin-and-leave-events
                                                            "invited" 
invite-events
                                                            "banned" ban-events
                                                            "kicked and banned" 
kick-and-ban-events



reply via email to

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