|
|
|
@ -917,26 +917,36 @@ Template.room.onRendered(function() { |
|
|
|
|
|
|
|
|
|
const rtl = $('html').hasClass('rtl'); |
|
|
|
|
|
|
|
|
|
const updateUnreadCount = _.throttle(function() { |
|
|
|
|
let lastInvisibleMessageOnScreen; |
|
|
|
|
const getElementFromPoint = function(topOffset = 0) { |
|
|
|
|
const messageBoxOffset = messageBox.offset(); |
|
|
|
|
|
|
|
|
|
let element; |
|
|
|
|
if (rtl) { |
|
|
|
|
lastInvisibleMessageOnScreen = document.elementFromPoint((messageBoxOffset.left + messageBox.width()) - 1, messageBoxOffset.top + 1); |
|
|
|
|
element = document.elementFromPoint((messageBoxOffset.left + messageBox.width()) - 1, messageBoxOffset.top + topOffset + 1); |
|
|
|
|
} else { |
|
|
|
|
lastInvisibleMessageOnScreen = document.elementFromPoint(messageBoxOffset.left + 1, messageBoxOffset.top + 1); |
|
|
|
|
element = document.elementFromPoint(messageBoxOffset.left + 1, messageBoxOffset.top + topOffset + 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((lastInvisibleMessageOnScreen != null ? lastInvisibleMessageOnScreen.id : undefined) != null) { |
|
|
|
|
const lastMessage = ChatMessage.findOne(lastInvisibleMessageOnScreen.id); |
|
|
|
|
if (lastMessage != null) { |
|
|
|
|
const subscription = ChatSubscription.findOne({ rid: template.data._id }); |
|
|
|
|
const count = ChatMessage.find({ rid: template.data._id, ts: { $lte: lastMessage.ts, $gt: (subscription != null ? subscription.ls : undefined) } }).count(); |
|
|
|
|
template.unreadCount.set(count); |
|
|
|
|
} else { |
|
|
|
|
template.unreadCount.set(0); |
|
|
|
|
} |
|
|
|
|
if (element && element.classList.contains('message')) { |
|
|
|
|
return element; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const updateUnreadCount = _.throttle(function() { |
|
|
|
|
const lastInvisibleMessageOnScreen = getElementFromPoint(0) || getElementFromPoint(20) || getElementFromPoint(40); |
|
|
|
|
|
|
|
|
|
if (lastInvisibleMessageOnScreen == null || lastInvisibleMessageOnScreen.id == null) { |
|
|
|
|
return template.unreadCount.set(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const lastMessage = ChatMessage.findOne(lastInvisibleMessageOnScreen.id); |
|
|
|
|
if (lastMessage == null) { |
|
|
|
|
return template.unreadCount.set(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const subscription = ChatSubscription.findOne({ rid: template.data._id }, {reactive: false}); |
|
|
|
|
const count = ChatMessage.find({ rid: template.data._id, ts: { $lte: lastMessage.ts, $gt: subscription && subscription.ls } }).count(); |
|
|
|
|
template.unreadCount.set(count); |
|
|
|
|
}, 300); |
|
|
|
|
|
|
|
|
|
readMessage.onRead(function(rid) { |
|
|
|
|