Fix read receipt count
authorAjay Bura <ajbura@gmail.com>
Fri, 17 Dec 2021 11:52:38 +0000 (17:22 +0530)
committerAjay Bura <ajbura@gmail.com>
Fri, 17 Dec 2021 11:52:38 +0000 (17:22 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/molecules/message/Message.jsx
src/client/state/RoomTimeline.js

index b376b7f5a0e46ff9b6622cf1c7e7249182e27d66..ad7038eeb0fad2808cd21806669886bffd482f4d 100644 (file)
@@ -438,7 +438,7 @@ const MessageOptions = React.memo(({
             <MenuHeader>Options</MenuHeader>
             <MenuItem
               iconSrc={TickMarkIC}
-              onClick={() => openReadReceipts(roomId, roomTimeline.getEventReaders(eventId))}
+              onClick={() => openReadReceipts(roomId, roomTimeline.getEventReaders(mEvent))}
             >
               Read receipts
             </MenuItem>
index 014b63dd610e559c241c736c0186e3645b561417..1a988d64be08280eb348aca9f0835bf9e3f1460b 100644 (file)
@@ -247,23 +247,26 @@ class RoomTimeline extends EventEmitter {
   getLiveReaders() {
     const lastEvent = this.timeline[this.timeline.length - 1];
     const liveEvents = this.liveTimeline.getEvents();
-    const lastLiveEvent = liveEvents[liveEvents.length - 1];
 
-    let readers = [];
-    if (lastEvent) readers = this.room.getUsersReadUpTo(lastEvent);
-    if (lastLiveEvent !== lastEvent) {
-      readers.splice(readers.length, 0, ...this.room.getUsersReadUpTo(lastLiveEvent));
+    const readers = [];
+
+    for (let i = liveEvents.length - 1; i >= 0; i -= 1) {
+      readers.splice(readers.length, 0, ...this.room.getUsersReadUpTo(liveEvents[i]));
+      if (lastEvent === liveEvents[i]) break;
     }
+
     return [...new Set(readers)];
   }
 
-  getEventReaders(eventId) {
+  getEventReaders(mEvent) {
+    const liveEvents = this.liveTimeline.getEvents();
     const readers = [];
-    let eventIndex = this.getEventIndex(eventId);
-    if (eventIndex < 0) return this.getLiveReaders();
-    for (; eventIndex < this.timeline.length; eventIndex += 1) {
-      readers.splice(readers.length, 0, ...this.room.getUsersReadUpTo(this.timeline[eventIndex]));
+
+    for (let i = liveEvents.length - 1; i >= 0; i -= 1) {
+      readers.splice(readers.length, 0, ...this.room.getUsersReadUpTo(liveEvents[i]));
+      if (mEvent === liveEvents[i]) break;
     }
+
     return [...new Set(readers)];
   }