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);
};
exports.recent = (function () {
class RecentPrivateMessages {
// This data structure keeps track of the sets of users you've had
// recent conversations with, sorted by time (implemented via
// `message_id` sorting, since that's how we time-sort messages).
const self = {};
const recent_message_ids = new FoldDict(); // key is user_ids_string
const recent_private_messages = [];
recent_message_ids = new FoldDict(); // key is user_ids_string
recent_private_messages = [];
self.insert = function (user_ids, message_id) {
insert(user_ids, message_id) {
if (user_ids.length === 0) {
// The server sends [] for self-PMs.
user_ids = [people.my_current_user_id()];
@@ -26,7 +25,7 @@ exports.recent = (function () {
user_ids.sort((a, b) => a - b);
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) {
// This is a new user, so create a new object.
@@ -34,11 +33,11 @@ exports.recent = (function () {
user_ids_string,
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
// is usually where it belongs, but we'll re-sort.
recent_private_messages.unshift(conversation);
this.recent_private_messages.unshift(conversation);
} else {
if (conversation.max_message_id >= message_id) {
// don't backdate our conversation. This is the
@@ -53,28 +52,28 @@ exports.recent = (function () {
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
// 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
// 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) {
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;