mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
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
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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`);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user