diff --git a/app/models/server/models/Subscriptions.js b/app/models/server/models/Subscriptions.js index e886597f1fdb..86a00565d4c2 100644 --- a/app/models/server/models/Subscriptions.js +++ b/app/models/server/models/Subscriptions.js @@ -644,6 +644,9 @@ export class Subscriptions extends Base { getMinimumLastSeenByRoomId(rid) { return this.db.findOne({ rid, + ls: { + $exists: true, + }, }, { sort: { ls: 1, diff --git a/imports/message-read-receipt/server/lib/ReadReceipt.js b/imports/message-read-receipt/server/lib/ReadReceipt.js index 97ca206cc339..b7ce5484e497 100644 --- a/imports/message-read-receipt/server/lib/ReadReceipt.js +++ b/imports/message-read-receipt/server/lib/ReadReceipt.js @@ -19,6 +19,10 @@ const debounceByRoomId = function(fn) { const updateMessages = debounceByRoomId(Meteor.bindEnvironment(({ _id, lm }) => { // @TODO maybe store firstSubscription in room object so we don't need to call the above update method const firstSubscription = Subscriptions.getMinimumLastSeenByRoomId(_id); + if (!firstSubscription) { + return; + } + Messages.setAsRead(_id, firstSubscription.ls); if (lm <= firstSubscription.ls) { @@ -53,7 +57,7 @@ export const ReadReceipt = { // this will usually happens if the message sender is the only one on the room const firstSubscription = Subscriptions.getMinimumLastSeenByRoomId(roomId); - if (message.unread && message.ts < firstSubscription.ls) { + if (firstSubscription && message.unread && message.ts < firstSubscription.ls) { Messages.setAsReadById(message._id, firstSubscription.ls); }