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