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

    Fix: (ement-room--format-membership-events) Rejected, minor refactor
---
 ement-room.el | 74 ++++++++++++++++++++++++++---------------------------------
 1 file changed, 32 insertions(+), 42 deletions(-)

diff --git a/ement-room.el b/ement-room.el
index 02647f9046..a0e26d0527 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -3680,73 +3680,62 @@ a copy of the local keymap, and sets 
`header-line-format'."
 (defun ement-room--format-membership-events (struct room)
   "Return string for STRUCT in ROOM.
 STRUCT should be an `ement-room-membership-events' struct."
-  (cl-labels ((membership-types
-               (event) (pcase-let* (((cl-struct ement-event
-                                                (content (map ('membership 
new-membership)
-                                                              ;; ('displayname 
new-displayname)
-                                                              ))
-                                                (unsigned (map ('prev_content
-                                                                (map 
('membership prev-membership)
-                                                                     ;; 
('displayname prev-displayname)
-                                                                     )))))
-                                     event))
-                         (cons prev-membership new-membership)))
-              (event-user
+  (cl-labels ((event-user
                (event) (propertize (if-let (user (gethash 
(ement-event-state-key event) ement-users))
                                        (ement--user-displayname-in room user)
                                      (ement-event-state-key event))
                                    'help-echo (concat 
(ement-room--format-member-event event room)
-                                                      " <" 
(ement-event-state-key event) ">"))))
+                                                      " <" 
(ement-event-state-key event) ">")))
+              (old-membership (event) (map-nested-elt (ement-event-unsigned 
event) '(prev_content membership)))
+              (new-membership (event) (alist-get 'membership 
(ement-event-content event))))
     (pcase-let* (((cl-struct ement-room-membership-events events) struct))
       (pcase (length events)
         (0 (warn "No events in `ement-room-membership-events' struct"))
         (1 (ement-room--format-member-event (car events) room))
         (_ (let* ((left-events (cl-remove-if-not (lambda (event)
-                                                   (and (equal "leave" (cdr 
(membership-types event)))
-                                                        (not (equal "ban" 
(map-nested-elt (ement-event-unsigned event)
-                                                                               
           '(prev_content membership))))))
+                                                   (and (equal "leave" 
(new-membership event))
+                                                        (not (member 
(old-membership event) '("ban" "invite")))))
                                                  events))
                   (join-events (cl-remove-if-not (lambda (event)
-                                                   (pcase-let ((`(,old . ,new) 
(membership-types event)))
-                                                     (and (equal "join" new)
-                                                          (not (equal "join" 
old)))))
+                                                   (and (equal "join" 
(new-membership event))
+                                                        (not (equal "join" 
(old-membership event)))))
                                                  events))
                   (rejoin-events (cl-remove-if-not (lambda (event)
-                                                     (pcase-let ((`(,old . 
,new) (membership-types event)))
-                                                       (and (equal "join" new)
-                                                            (equal "leave" 
old))))
+                                                     (and (equal "join" 
(new-membership event))
+                                                          (equal "leave" 
(old-membership event))))
                                                    events))
                   (invite-events (cl-remove-if-not (lambda (event)
-                                                     (equal "invite" (cdr 
(membership-types event))))
+                                                     (equal "invite" 
(new-membership event)))
+                                                   events))
+                  (reject-events (cl-remove-if-not (lambda (event)
+                                                     (and (equal "invite" 
(old-membership event))
+                                                          (equal "leave" 
(new-membership event))))
                                                    events))
                   (ban-events (cl-remove-if-not (lambda (event)
-                                                  (and (member (cdr 
(membership-types event)) '("invite" "leave"))
-                                                       (equal "ban" (cdr 
(membership-types event)))))
+                                                  (and (member (old-membership 
event) '("invite" "leave"))
+                                                       (equal "ban" 
(new-membership event))))
                                                 events))
                   (unban-events (cl-remove-if-not (lambda (event)
-                                                    (and (equal "ban" 
(map-nested-elt (ement-event-unsigned event)
-                                                                               
       '(prev_content membership)))
-                                                         (equal "leave" 
(alist-get 'membership (ement-event-content event)))))
+                                                    (and (equal "ban" 
(old-membership event))
+                                                         (equal "leave" 
(new-membership event))))
                                                   events))
                   (kick-and-ban-events (cl-remove-if-not (lambda (event)
-                                                           (and (equal "join" 
(car (membership-types event)))
-                                                                (equal "ban" 
(cdr (membership-types event)))))
+                                                           (and (equal "join" 
(old-membership event))
+                                                                (equal "ban" 
(new-membership event))))
                                                          events))
                   (rename-events (cl-remove-if-not (lambda (event)
-                                                     (pcase-let ((`(,old . 
,new) (membership-types event)))
-                                                       (and (equal "join" new)
-                                                            (equal "join" old)
-                                                            (equal (alist-get 
'avatar_url (ement-event-content event))
-                                                                   
(map-nested-elt (ement-event-unsigned event)
-                                                                               
    '(prev_content avatar_url))))))
+                                                     (and (equal "join" 
(old-membership event))
+                                                          (equal "join" 
(new-membership event))
+                                                          (equal (alist-get 
'avatar_url (ement-event-content event))
+                                                                 
(map-nested-elt (ement-event-unsigned event)
+                                                                               
  '(prev_content avatar_url)))))
                                                    events))
                   (avatar-events (cl-remove-if-not (lambda (event)
-                                                     (pcase-let ((`(,old . 
,new) (membership-types event)))
-                                                       (and (equal "join" new)
-                                                            (equal "join" old)
-                                                            (not (equal 
(alist-get 'avatar_url (ement-event-content event))
-                                                                        
(map-nested-elt (ement-event-unsigned event)
-                                                                               
         '(prev_content avatar_url)))))))
+                                                     (and (equal "join" 
(old-membership event))
+                                                          (equal "join" 
(new-membership event))
+                                                          (not (equal 
(alist-get 'avatar_url (ement-event-content event))
+                                                                      
(map-nested-elt (ement-event-unsigned event)
+                                                                               
       '(prev_content avatar_url))))))
                                                    events))
                   join-and-leave-events rejoin-and-leave-events)
              ;; Remove apparent duplicates between join/rejoin events.
@@ -3784,6 +3773,7 @@ STRUCT should be an `ement-room-membership-events' 
struct."
                                                            "joined and left" 
join-and-leave-events
                                                            "rejoined and left" 
rejoin-and-leave-events
                                                            "invited" 
invite-events
+                                                           "rejected 
invitation" reject-events
                                                            "banned" ban-events
                                                            "unbanned" 
unban-events
                                                            "kicked and banned" 
kick-and-ban-events

Reply via email to