pm_conversations: Convert recent to an ES6 class RecentPrivateMessages.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2020-07-22 16:52:56 -07:00
committed by Tim Abbott
parent 2bf6731f5a
commit 557e88df77

View File

@@ -10,15 +10,14 @@ exports.is_partner = function (user_id) {
return partners.has(user_id); return partners.has(user_id);
}; };
exports.recent = (function () { class RecentPrivateMessages {
// This data structure keeps track of the sets of users you've had // This data structure keeps track of the sets of users you've had
// recent conversations with, sorted by time (implemented via // recent conversations with, sorted by time (implemented via
// `message_id` sorting, since that's how we time-sort messages). // `message_id` sorting, since that's how we time-sort messages).
const self = {}; recent_message_ids = new FoldDict(); // key is user_ids_string
const recent_message_ids = new FoldDict(); // key is user_ids_string recent_private_messages = [];
const recent_private_messages = [];
self.insert = function (user_ids, message_id) { insert(user_ids, message_id) {
if (user_ids.length === 0) { if (user_ids.length === 0) {
// The server sends [] for self-PMs. // The server sends [] for self-PMs.
user_ids = [people.my_current_user_id()]; user_ids = [people.my_current_user_id()];
@@ -26,7 +25,7 @@ exports.recent = (function () {
user_ids.sort((a, b) => a - b); user_ids.sort((a, b) => a - b);
const user_ids_string = user_ids.join(","); const user_ids_string = user_ids.join(",");
let conversation = recent_message_ids.get(user_ids_string); let conversation = this.recent_message_ids.get(user_ids_string);
if (conversation === undefined) { if (conversation === undefined) {
// This is a new user, so create a new object. // This is a new user, so create a new object.
@@ -34,11 +33,11 @@ exports.recent = (function () {
user_ids_string, user_ids_string,
max_message_id: message_id, max_message_id: message_id,
}; };
recent_message_ids.set(user_ids_string, conversation); this.recent_message_ids.set(user_ids_string, conversation);
// Optimistically insert the new message at the front, since that // Optimistically insert the new message at the front, since that
// is usually where it belongs, but we'll re-sort. // is usually where it belongs, but we'll re-sort.
recent_private_messages.unshift(conversation); this.recent_private_messages.unshift(conversation);
} else { } else {
if (conversation.max_message_id >= message_id) { if (conversation.max_message_id >= message_id) {
// don't backdate our conversation. This is the // don't backdate our conversation. This is the
@@ -53,28 +52,28 @@ exports.recent = (function () {
conversation.max_message_id = message_id; conversation.max_message_id = message_id;
} }
recent_private_messages.sort((a, b) => b.max_message_id - a.max_message_id); this.recent_private_messages.sort((a, b) => b.max_message_id - a.max_message_id);
}; }
self.get = function () { get() {
// returns array of structs with user_ids_string and // returns array of structs with user_ids_string and
// message_id // message_id
return recent_private_messages; return this.recent_private_messages;
}; }
self.get_strings = function () { get_strings() {
// returns array of structs with user_ids_string and // returns array of structs with user_ids_string and
// message_id // message_id
return recent_private_messages.map((conversation) => conversation.user_ids_string); return this.recent_private_messages.map((conversation) => conversation.user_ids_string);
}; }
self.initialize = function (params) { initialize(params) {
for (const conversation of params.recent_private_conversations) { for (const conversation of params.recent_private_conversations) {
self.insert(conversation.user_ids, conversation.max_message_id); this.insert(conversation.user_ids, conversation.max_message_id);
} }
}; }
}
return self; exports.recent = new RecentPrivateMessages();
})();
window.pm_conversations = exports; window.pm_conversations = exports;