Passive private receipt support (#1108)
authorgreentore <117551249+greentore@users.noreply.github.com>
Mon, 24 Jul 2023 04:40:43 +0000 (06:40 +0200)
committerGitHub <noreply@github.com>
Mon, 24 Jul 2023 04:40:43 +0000 (10:10 +0530)
Co-authored-by: Ajay Bura <32841439+ajbura@users.noreply.github.com>
src/client/state/Notifications.js
src/client/state/cons.js

index db4610a34e9eb65220db7d55127bca02987fed14..13dd3e17283069eaeed47dd9378e39304a746fbf 100644 (file)
@@ -383,17 +383,19 @@ class Notifications extends EventEmitter {
     });
 
     this.matrixClient.on('Room.receipt', (mEvent, room) => {
-      if (mEvent.getType() === 'm.receipt') {
-        if (room.isSpaceRoom()) return;
-        const content = mEvent.getContent();
-        const readedEventId = Object.keys(content)[0];
-        const readerUserId = Object.keys(content[readedEventId]['m.read'])[0];
-        if (readerUserId !== this.matrixClient.getUserId()) return;
-
-        this.deleteNoti(room.roomId);
-
-        this._deletePopupRoomNotis(room.roomId);
-      }
+      if (mEvent.getType() !== 'm.receipt' || room.isSpaceRoom()) return;
+      const content = mEvent.getContent();
+      const userId = this.matrixClient.getUserId();
+
+      Object.keys(content).forEach((eventId) => {
+        Object.entries(content[eventId]).forEach(([receiptType, receipt]) => {
+          if (!cons.supportReceiptTypes.includes(receiptType)) return;
+          if (Object.keys(receipt || {}).includes(userId)) {
+            this.deleteNoti(room.roomId);
+            this._deletePopupRoomNotis(room.roomId);
+          }
+        });
+      });
     });
 
     this.matrixClient.on('Room.myMembership', (room, membership) => {
index 8d9fda5439af675c3249b090df525db61b12e7d2..873c4e333524765ac21ac54f73161fa05c34e5a8 100644 (file)
@@ -19,6 +19,10 @@ const cons = {
     'm.room.member',
     'm.sticker',
   ],
+  supportReceiptTypes: [
+    'm.read',
+    'm.read.private',
+  ],
   notifs: {
     DEFAULT: 'default',
     ALL_MESSAGES: 'all_messages',