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

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

[elpa] externals/ement a9d9d230eb 3/5: Tidy: Formatting, comments


From: ELPA Syncer
Subject: [elpa] externals/ement a9d9d230eb 3/5: Tidy: Formatting, comments
Date: Sun, 14 Jan 2024 07:11:06 -0500 (EST)

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

    Tidy: Formatting, comments
    
    Fix: (ement-room--insert-sender-headers)
    
    After suspending, resuming, and syncing again, an error happened,
    failing here because PREV-NODE's data was an EMENT-USER rather than an
    EMENT-EVENT, so EMENT-EVENT-SENDER failed on it.
    
    Now we test PREV-NODE's data's type to ensure it's an event before
    testing the sender.
    
    Also, as a failsafe, if the PREV-NODE is something else (could be
    membership events, e.g.), we insert the sender header, to be sure a
    message event has one visible.
    
    Fix: Remove unneeded failsafe
    
    This was duplicating sender headers; Stebalien's design makes this
    unnecessary.
    
    Fix: (ement-room--insert-sender-headers)
    
    Bug was introduced in a8c8b08e0317ccb00a195b0d86abff66ff07012c.
    
    See 
<https://github.com/alphapapa/ement.el/pull/158#issuecomment-1890883156>.
---
 ement-room.el | 53 +++++++++++++++++++++++++----------------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/ement-room.el b/ement-room.el
index 7aa4ff6f35..ce1088825f 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -3017,40 +3017,37 @@ the first and last nodes in the buffer, respectively."
   (cl-labels ((message-event-p (data)
                 (and (ement-event-p data)
                      (equal "m.room.message" (ement-event-type data)))))
-    ;; If we're not starting at a message node, forward to the previous 
message.
-    ;; If we don't find any messages, there's nothing to do anyways.
     (when (and start-node (not (message-event-p (ewoc-data start-node))))
+      ;; Start node not a message event: forward to next message event (and if 
none are
+      ;; found, there's nothing to do).
       (setf start-node (ement-room--ewoc-next-matching ewoc start-node 
#'message-event-p)))
-
-    ;; Set the end node to the next message after the end node, if any. This:
-    ;; 1. Makes the loop check simple (we continue going until we run out of 
nodes or our
-    ;;    we find the end node).
-    ;; 2. Ensures we fix up sender headers after any inserted messages.
     (when end-node
+      ;; Set end node to first message event after it.  (This simplifies the 
loop by
+      ;; continuing until finding `end-node' or the last node, and ensures we 
fix headers
+      ;; after any inserted messages.)
       (setf end-node (ement-room--ewoc-next-matching ewoc end-node 
#'message-event-p)))
-
-    (let* ((event-node start-node) prev-node)
+    (let ((event-node start-node) prev-node)
       (while (and event-node (not (eq event-node end-node)))
-        ;; Scan back for the previous message or user header, if any.
-        (setf prev-node (ement-room--ewoc-next-matching ewoc event-node
-                          (lambda (data)
-                            (or (ement-user-p data) (message-event-p data)))
-                          #'ewoc-prev))
-
+        (setf prev-node
+              ;; Find previous message or user header.
+              (ement-room--ewoc-next-matching ewoc event-node
+                (lambda (data)
+                  (or (ement-user-p data) (message-event-p data)))
+                #'ewoc-prev))
         (let ((sender (ement-event-sender (ewoc-data event-node))))
-          (cond
-           ;; No previous message/sender, insert a sender.
-           ((not prev-node) (ewoc-enter-before ewoc event-node sender))
-           ;; We have a previous sender, but it's wrong. Fix it.
-           ((ement-user-p (ewoc-data prev-node))
-            (unless (equal sender (ewoc-data prev-node))
-              (ewoc-set-data prev-node sender)))
-           ;; Otherwise, it's a message. Insert a sender if it's from a 
different user.
-           ((not (equal sender (ement-event-sender (ewoc-data prev-node))))
-            (ewoc-enter-before ewoc event-node sender))))
-
-        (setf event-node (ement-room--ewoc-next-matching ewoc event-node
-                           #'message-event-p))))))
+          (cond ((not prev-node)
+                 ;; No previous message/sender: insert sender.
+                 (ewoc-enter-before ewoc event-node sender))
+                ((ement-user-p (ewoc-data prev-node))
+                 ;; Previous node is a sender.
+                 (unless (equal sender (ewoc-data prev-node))
+                   ;; Previous node is the wrong sender: fix it.
+                   (ewoc-set-data prev-node sender)))
+                ((and (message-event-p (ewoc-data prev-node))
+                      (not (equal sender (ement-event-sender (ewoc-data 
prev-node)))))
+                 ;; Previous node is a message from a different sender: insert 
header.
+                 (ewoc-enter-before ewoc event-node sender))))
+        (setf event-node (ement-room--ewoc-next-matching ewoc event-node 
#'message-event-p))))))
 
 (defun ement-room--coalesce-nodes (a b ewoc)
   "Try to coalesce events in nodes A and B in EWOC.



reply via email to

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