unread: Convert unread_pm_counter to an ES6 class UnreadPMCounter.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2020-07-22 18:58:17 -07:00
committed by Tim Abbott
parent 44053eba3f
commit e5ff78e893

View File

@@ -76,59 +76,57 @@ class Bucketer {
} }
} }
exports.unread_pm_counter = (function () { class UnreadPMCounter {
const self = {}; bucketer = new Bucketer({
const bucketer = new Bucketer({
KeyDict: Map, KeyDict: Map,
make_bucket: () => new Set(), make_bucket: () => new Set(),
}); });
self.clear = function () { clear() {
bucketer.clear(); this.bucketer.clear();
}; }
self.set_pms = function (pms) { set_pms(pms) {
for (const obj of pms) { for (const obj of pms) {
const user_ids_string = obj.sender_id.toString(); const user_ids_string = obj.sender_id.toString();
self.set_message_ids(user_ids_string, obj.unread_message_ids); this.set_message_ids(user_ids_string, obj.unread_message_ids);
}
} }
};
self.set_huddles = function (huddles) { set_huddles(huddles) {
for (const obj of huddles) { for (const obj of huddles) {
const user_ids_string = people.pm_lookup_key(obj.user_ids_string); const user_ids_string = people.pm_lookup_key(obj.user_ids_string);
self.set_message_ids(user_ids_string, obj.unread_message_ids); this.set_message_ids(user_ids_string, obj.unread_message_ids);
}
} }
};
self.set_message_ids = function (user_ids_string, unread_message_ids) { set_message_ids(user_ids_string, unread_message_ids) {
for (const msg_id of unread_message_ids) { for (const msg_id of unread_message_ids) {
bucketer.add({ this.bucketer.add({
bucket_key: user_ids_string, bucket_key: user_ids_string,
item_id: msg_id, item_id: msg_id,
}); });
} }
}; }
self.add = function (message) { add(message) {
const user_ids_string = people.pm_reply_user_string(message); const user_ids_string = people.pm_reply_user_string(message);
if (user_ids_string) { if (user_ids_string) {
bucketer.add({ this.bucketer.add({
bucket_key: user_ids_string, bucket_key: user_ids_string,
item_id: message.id, item_id: message.id,
}); });
} }
}; }
self.delete = function (message_id) { delete(message_id) {
bucketer.delete(message_id); this.bucketer.delete(message_id);
}; }
self.get_counts = function () { get_counts() {
const pm_dict = new Map(); // Hash by user_ids_string -> count const pm_dict = new Map(); // Hash by user_ids_string -> count
let total_count = 0; let total_count = 0;
for (const [user_ids_string, id_set] of bucketer) { for (const [user_ids_string, id_set] of this.bucketer) {
const count = id_set.size; const count = id_set.size;
pm_dict.set(user_ids_string, count); pm_dict.set(user_ids_string, count);
total_count += count; total_count += count;
@@ -137,39 +135,39 @@ exports.unread_pm_counter = (function () {
total_count, total_count,
pm_dict, pm_dict,
}; };
}; }
self.num_unread = function (user_ids_string) { num_unread(user_ids_string) {
if (!user_ids_string) { if (!user_ids_string) {
return 0; return 0;
} }
const bucket = bucketer.get_bucket(user_ids_string); const bucket = this.bucketer.get_bucket(user_ids_string);
if (!bucket) { if (!bucket) {
return 0; return 0;
} }
return bucket.size; return bucket.size;
}; }
self.get_msg_ids = function () { get_msg_ids() {
const ids = []; const ids = [];
for (const id_set of bucketer.values()) { for (const id_set of this.bucketer.values()) {
for (const id of id_set) { for (const id of id_set) {
ids.push(id); ids.push(id);
} }
} }
return util.sorted_ids(ids); return util.sorted_ids(ids);
}; }
self.get_msg_ids_for_person = function (user_ids_string) { get_msg_ids_for_person(user_ids_string) {
if (!user_ids_string) { if (!user_ids_string) {
return []; return [];
} }
const bucket = bucketer.get_bucket(user_ids_string); const bucket = this.bucketer.get_bucket(user_ids_string);
if (!bucket) { if (!bucket) {
return []; return [];
@@ -177,10 +175,9 @@ exports.unread_pm_counter = (function () {
const ids = Array.from(bucket); const ids = Array.from(bucket);
return util.sorted_ids(ids); return util.sorted_ids(ids);
}; }
}
return self; exports.unread_pm_counter = new UnreadPMCounter();
})();
function make_per_stream_bucketer() { function make_per_stream_bucketer() {
return new Bucketer({ return new Bucketer({