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

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

[elpa] externals/ement 9450f74138 1/2: Change: (--format-membership-even


From: ELPA Syncer
Subject: [elpa] externals/ement 9450f74138 1/2: Change: (--format-membership-events) "was kicked and rejoined" event pairs
Date: Tue, 6 Feb 2024 03:57:59 -0500 (EST)

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

    Change: (--format-membership-events) "was kicked and rejoined" event pairs
---
 README.org    |  1 +
 ement-room.el | 17 ++++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/README.org b/README.org
index 2df224121d..7c197490d0 100644
--- a/README.org
+++ b/README.org
@@ -297,6 +297,7 @@ Ement.el doesn't support encrypted rooms natively, but it 
can be used transparen
 
 *Changes*
 + Improve prompt used when viewing a room that is not joined.  
([[https://github.com/alphapapa/ement.el/issues/241][#241]].  Thanks to 
[[https://github.com/phil-s][Phil Sainty]].)
++ Format "was kicked and rejoined" membership event pairs.
 
 ** 0.14
 
diff --git a/ement-room.el b/ement-room.el
index 6f773225ef..f99f4b5571 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -4011,6 +4011,12 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                     (and (equal "ban" 
(old-membership event))
                                                          (equal "leave" 
(new-membership event))))
                                                   events))
+                  (kicked-events (cl-remove-if-not (lambda (event)
+                                                     (and (equal "join" 
(old-membership event))
+                                                          (equal "leave" 
(new-membership event))
+                                                          (not (equal 
(ement-user-id (ement-event-sender event))
+                                                                      
(ement-event-state-key event)))))
+                                                   events))
                   (kick-and-ban-events (cl-remove-if-not (lambda (event)
                                                            (and (equal "join" 
(old-membership event))
                                                                 (equal "ban" 
(new-membership event))))
@@ -4029,7 +4035,7 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                                       
(map-nested-elt (ement-event-unsigned event)
                                                                                
       '(prev_content avatar_url))))))
                                                    events))
-                  join-and-leave-events rejoin-and-leave-events)
+                  join-and-leave-events rejoin-and-leave-events 
kicked-and-rejoined-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
@@ -4048,6 +4054,14 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                                                
       :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)))
+                   kicked-and-rejoined-events (cl-loop for rejoin-event in 
rejoin-events
+                                                       for kicked-event = 
(cl-find (ement-event-state-key rejoin-event) kicked-events
+                                                                               
    :test #'equal :key #'ement-event-state-key)
+                                                       when kicked-event 
collect kicked-event
+                                                       and do (setf 
rejoin-events (cl-delete (ement-event-state-key kicked-event) rejoin-events
+                                                                               
              :test #'equal :key #'ement-event-state-key)
+                                                                    
left-events (cl-delete (ement-event-state-key kicked-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)
@@ -4064,6 +4078,7 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                            "joined" join-events
                                                            "left" left-events
                                                            "joined and left" 
join-and-leave-events
+                                                           "was kicked and 
rejoined" kicked-and-rejoined-events
                                                            "rejoined and left" 
rejoin-and-leave-events
                                                            "invited" 
invite-events
                                                            "rejected 
invitation" reject-events



reply via email to

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