bigbluebutton-Github/bigbluebutton-html5/imports/ui/services/unread-messages/index.js

62 lines
1.8 KiB
JavaScript
Raw Normal View History

2016-07-12 03:42:54 +08:00
import { Tracker } from 'meteor/tracker';
2016-07-07 20:50:32 +08:00
import Storage from '/imports/ui/services/storage/session';
import Auth from '/imports/ui/services/auth';
import Chats from '/imports/api/chat';
import ChatService from '/imports/ui/components/chat/service';
2016-07-05 02:53:47 +08:00
const CHAT_CONFIG = Meteor.settings.public.chat;
const STORAGE_KEY = CHAT_CONFIG.storage_key;
2017-07-13 04:15:50 +08:00
const PUBLIC_CHAT_USERID = CHAT_CONFIG.public_userid;
2016-07-05 02:53:47 +08:00
2016-07-12 00:28:55 +08:00
class UnreadMessagesTracker {
constructor() {
2017-06-03 03:25:02 +08:00
this._tracker = new Tracker.Dependency();
this._unreadChats = Storage.getItem('UNREAD_CHATS') || { [PUBLIC_CHAT_USERID]: (new Date()).getTime() };
this.get = this.get.bind(this);
2016-07-12 00:28:55 +08:00
}
2016-07-05 02:53:47 +08:00
2016-07-12 00:28:55 +08:00
get(chatID) {
2016-07-12 03:42:54 +08:00
this._tracker.depend();
2016-07-12 00:28:55 +08:00
return this._unreadChats[chatID] || 0;
2016-07-05 02:53:47 +08:00
}
2016-07-12 00:28:55 +08:00
update(chatID, timestamp = 0) {
2017-06-03 03:25:02 +08:00
const currentValue = this.get(chatID);
2016-07-12 00:28:55 +08:00
if (currentValue < timestamp) {
this._unreadChats[chatID] = timestamp;
2016-07-12 03:42:54 +08:00
this._tracker.changed();
2016-07-12 00:28:55 +08:00
Storage.setItem(STORAGE_KEY, this._unreadChats);
}
2016-07-05 02:53:47 +08:00
2016-07-12 00:28:55 +08:00
return this._unreadChats[chatID];
2016-07-11 20:34:58 +08:00
}
getUnreadMessages(chatID) {
2017-06-03 03:25:02 +08:00
const filter = {
2017-08-05 02:20:54 +08:00
fromTime: {
2016-07-12 00:28:55 +08:00
$gt: this.get(chatID),
},
2017-08-05 02:20:54 +08:00
fromUserId: { $ne: Auth.userID },
2016-07-12 00:28:55 +08:00
};
// Minimongo does not support $eq. See https://github.com/meteor/meteor/issues/4142
2017-07-13 04:15:50 +08:00
if (chatID === PUBLIC_CHAT_USERID) {
2017-08-05 02:20:54 +08:00
filter.toUserId = { $not: { $ne: chatID } };
2016-07-12 00:28:55 +08:00
} else {
2017-08-05 02:20:54 +08:00
filter.toUserId = { $not: { $ne: Auth.userID } };
filter.fromUserId.$not = { $ne: chatID };
2016-07-12 00:28:55 +08:00
}
const messages = Chats.find(filter).fetch();
return messages;
}
2016-07-12 00:28:55 +08:00
count(chatID) {
const messages = this.getUnreadMessages(chatID);
const reducedAndMappedMessages = ChatService.reduceAndMapMessages(messages);
return reducedAndMappedMessages.length;
2016-07-12 00:28:55 +08:00
}
2017-06-03 03:25:02 +08:00
}
2016-07-05 02:53:47 +08:00
2017-06-03 03:25:02 +08:00
const UnreadTrackerSingleton = new UnreadMessagesTracker();
2016-07-12 00:28:55 +08:00
export default UnreadTrackerSingleton;