[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.
- [elpa] externals/ement updated (c8fa9444cd -> 4a25cc0991), ELPA Syncer, 2024/01/14
- [elpa] externals/ement eec3327149 4/5: Docs: Update changelog, ELPA Syncer, 2024/01/14
- [elpa] externals/ement 24320f23af 1/5: Fix sender header insertion with respect to membership changes, ELPA Syncer, 2024/01/14
- [elpa] externals/ement a9d9d230eb 3/5: Tidy: Formatting, comments,
ELPA Syncer <=
- [elpa] externals/ement 4a25cc0991 5/5: Merge: (ement-room--insert-sender-headers) Refactor/fix, ELPA Syncer, 2024/01/14
- [elpa] externals/ement eed5f27942 2/5: Tidy: Indentation, ELPA Syncer, 2024/01/14