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

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

[elpa] externals/ement ef84ffcb1e 4/4: Change/Fix: (ement-room--insert-e


From: ELPA Syncer
Subject: [elpa] externals/ement ef84ffcb1e 4/4: Change/Fix: (ement-room--insert-event) Account for timestamp headers
Date: Fri, 23 Sep 2022 18:57:36 -0400 (EDT)

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

    Change/Fix: (ement-room--insert-event) Account for timestamp headers
    
    This should be an improvement for when loading old messages, but it
    may not be quite perfect yet.
---
 README.org    |  1 +
 ement-room.el | 22 ++++++++++++++--------
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/README.org b/README.org
index fa4813c671..83ef9c25f0 100644
--- a/README.org
+++ b/README.org
@@ -300,6 +300,7 @@ Note that, while ~matrix-client~ remains usable, and 
probably will for some time
 
 *Fixes*
 + Command ~ement-describe-room~ for rooms without topics.
++ Improve insertion of old messages around existing timestamp headers.
 
 ** 0.2.1
 
diff --git a/ement-room.el b/ement-room.el
index 7ced075ae4..3a65731d0f 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -2803,20 +2803,26 @@ Search starts from node START and moves by NEXT."
                         while node
                         when (funcall pred (ewoc-data node))
                         return node))
-              (event-node-p (data)
-                            (or (ement-event-p data)
-                                (ement-room-membership-events-p data)))
+              (timestamped-node-p (data)
+                                  (pcase data
+                                    ((pred ement-event-p) t)
+                                    ((pred ement-room-membership-events-p) t)
+                                    (`(ts . ,_) t)))
               (node-ts (data)
-                       (cl-etypecase data
-                         (ement-event (ement-event-origin-server-ts data))
-                         ;; Not sure whether to use earliest or latest ts; 
let's try this for now.
-                         (ement-room-membership-events 
(ement-room-membership-events-earliest-ts data))))
+                       (pcase data
+                         ((pred ement-event-p) (ement-event-origin-server-ts 
data))
+                         ((pred ement-room-membership-events-p)
+                          ;; Not sure whether to use earliest or latest ts; 
let's try this for now.
+                          (ement-room-membership-events-earliest-ts data))
+                         (`(ts ,ts)
+                          ;; Matrix server timestamps are in ms, so we must 
convert back.
+                          (* 1000 ts))))
               (node< (a b)
                      "Return non-nil if event A's timestamp is before B's."
                      (< (node-ts a) (node-ts b))))
     (ement-debug "INSERTING NEW EVENT: " (format-event event))
     (let* ((ewoc ement-ewoc)
-           (event-node-before (ement-room--ewoc-node-before ewoc event #'node< 
:pred #'event-node-p))
+           (event-node-before (ement-room--ewoc-node-before ewoc event #'node< 
:pred #'timestamped-node-p))
            new-node)
       ;; HACK: Insert after any read markers.
       (cl-loop for node-after-node-before = (ewoc-next ewoc event-node-before)



reply via email to

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