From 2c5a5bf36625903e981299f7473acb24af8f3f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 26 Mar 2023 21:13:07 -0400 Subject: [PATCH] feat: change chat notification delivery instead of checking if user is online in the past x minutes, check if the user has read the room, if they have already marked the chat as read don't send notification --- src/messaging/notifications.js | 5 +++-- src/messaging/unread.js | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/messaging/notifications.js b/src/messaging/notifications.js index 3da64926fe..cb2c9b6be9 100644 --- a/src/messaging/notifications.js +++ b/src/messaging/notifications.js @@ -57,8 +57,9 @@ module.exports = function (Messaging) { }; async function sendNotifications(fromuid, uids, roomId, messageObj) { - const isOnline = await user.isOnline(uids); - uids = uids.filter((uid, index) => !isOnline[index] && parseInt(fromuid, 10) !== parseInt(uid, 10)); + const hasRead = await Messaging.hasRead(uids, roomId); + uids = uids.filter((uid, index) => !hasRead[index] && parseInt(fromuid, 10) !== parseInt(uid, 10)); + console.log('checking notif', uids, hasRead); if (!uids.length) { delete Messaging.notifyQueue[`${fromuid}:${roomId}`]; return; diff --git a/src/messaging/unread.js b/src/messaging/unread.js index 169374045f..6005868b23 100644 --- a/src/messaging/unread.js +++ b/src/messaging/unread.js @@ -21,9 +21,18 @@ module.exports = function (Messaging) { }; Messaging.markRead = async (uid, roomId) => { + console.log('mark read :)', uid, roomId); await db.sortedSetRemove(`uid:${uid}:chat:rooms:unread`, roomId); }; + Messaging.hasRead = async (uids, roomId) => { + const isMembers = await db.isMemberOfSortedSets( + uids.map(uid => `uid:${uid}:chat:rooms:unread`), + roomId + ); + return uids.map((uid, index) => !isMembers[index]); + }; + Messaging.markAllRead = async (uid) => { await db.delete(`uid:${uid}:chat:rooms:unread`); };