mirror of https://github.com/zulip/zulip.git
unread: Replace buckets with Set.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
This commit is contained in:
parent
5262ff790e
commit
2f91f583fc
|
@ -14,55 +14,6 @@ exports.set_messages_read_in_narrow = function (value) {
|
||||||
exports.messages_read_in_narrow = value;
|
exports.messages_read_in_narrow = value;
|
||||||
};
|
};
|
||||||
|
|
||||||
function make_id_set() {
|
|
||||||
/* This is just a basic set class where
|
|
||||||
elements should be numeric ids.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const self = {};
|
|
||||||
const ids = new Dict();
|
|
||||||
|
|
||||||
self.clear = function () {
|
|
||||||
ids.clear();
|
|
||||||
};
|
|
||||||
|
|
||||||
self.add = function (id) {
|
|
||||||
ids.set(id, true);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.has = function (id) {
|
|
||||||
return ids.has(id);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.add_many = function (id_list) {
|
|
||||||
_.each(id_list, function (id) {
|
|
||||||
ids.set(id, true);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
self.del = function (id) {
|
|
||||||
ids.del(id);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.count = function () {
|
|
||||||
return ids.num_items();
|
|
||||||
};
|
|
||||||
|
|
||||||
self.members = function () {
|
|
||||||
return ids.keys();
|
|
||||||
};
|
|
||||||
|
|
||||||
self.max = function () {
|
|
||||||
return _.max(ids.keys());
|
|
||||||
};
|
|
||||||
|
|
||||||
self.is_empty = function () {
|
|
||||||
return ids.is_empty();
|
|
||||||
};
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
const unread_messages = new Set();
|
const unread_messages = new Set();
|
||||||
|
|
||||||
function make_bucketer(options) {
|
function make_bucketer(options) {
|
||||||
|
@ -93,10 +44,10 @@ function make_bucketer(options) {
|
||||||
reverse_lookup.set(item_id, bucket);
|
reverse_lookup.set(item_id, bucket);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.del = function (item_id) {
|
self.delete = function (item_id) {
|
||||||
const bucket = reverse_lookup.get(item_id);
|
const bucket = reverse_lookup.get(item_id);
|
||||||
if (bucket) {
|
if (bucket) {
|
||||||
bucket.del(item_id);
|
bucket.delete(item_id);
|
||||||
reverse_lookup.del(item_id);
|
reverse_lookup.del(item_id);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -121,7 +72,7 @@ exports.unread_pm_counter = (function () {
|
||||||
|
|
||||||
const bucketer = make_bucketer({
|
const bucketer = make_bucketer({
|
||||||
fold_case: false,
|
fold_case: false,
|
||||||
make_bucket: make_id_set,
|
make_bucket: () => new Set(),
|
||||||
});
|
});
|
||||||
|
|
||||||
self.clear = function () {
|
self.clear = function () {
|
||||||
|
@ -162,14 +113,14 @@ exports.unread_pm_counter = (function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.del = function (message_id) {
|
self.del = function (message_id) {
|
||||||
bucketer.del(message_id);
|
bucketer.delete(message_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_counts = function () {
|
self.get_counts = function () {
|
||||||
const pm_dict = new Dict(); // Hash by user_ids_string -> count
|
const pm_dict = new Dict(); // Hash by user_ids_string -> count
|
||||||
let total_count = 0;
|
let total_count = 0;
|
||||||
bucketer.each(function (id_set, user_ids_string) {
|
bucketer.each(function (id_set, user_ids_string) {
|
||||||
const count = id_set.count();
|
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;
|
||||||
});
|
});
|
||||||
|
@ -189,14 +140,14 @@ exports.unread_pm_counter = (function () {
|
||||||
if (!bucket) {
|
if (!bucket) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return bucket.count();
|
return bucket.size;
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_msg_ids = function () {
|
self.get_msg_ids = function () {
|
||||||
const lists = [];
|
const lists = [];
|
||||||
|
|
||||||
bucketer.each(function (id_set) {
|
bucketer.each(function (id_set) {
|
||||||
const members = id_set.members();
|
const members = [...id_set];
|
||||||
lists.push(members);
|
lists.push(members);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -216,7 +167,7 @@ exports.unread_pm_counter = (function () {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const ids = bucket.members();
|
const ids = [...bucket];
|
||||||
return util.sorted_ids(ids);
|
return util.sorted_ids(ids);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -226,7 +177,7 @@ exports.unread_pm_counter = (function () {
|
||||||
function make_per_stream_bucketer() {
|
function make_per_stream_bucketer() {
|
||||||
return make_bucketer({
|
return make_bucketer({
|
||||||
fold_case: true, // bucket keys are topics
|
fold_case: true, // bucket keys are topics
|
||||||
make_bucket: make_id_set,
|
make_bucket: () => new Set(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +220,7 @@ exports.unread_topic_counter = (function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.del = function (msg_id) {
|
self.del = function (msg_id) {
|
||||||
bucketer.del(msg_id);
|
bucketer.delete(msg_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
function str_dict() {
|
function str_dict() {
|
||||||
|
@ -297,7 +248,7 @@ exports.unread_topic_counter = (function () {
|
||||||
res.topic_count.set(stream_id, str_dict());
|
res.topic_count.set(stream_id, str_dict());
|
||||||
let stream_count = 0;
|
let stream_count = 0;
|
||||||
per_stream_bucketer.each(function (msgs, topic) {
|
per_stream_bucketer.each(function (msgs, topic) {
|
||||||
const topic_count = msgs.count();
|
const topic_count = msgs.size;
|
||||||
res.topic_count.get(stream_id).set(topic, topic_count);
|
res.topic_count.get(stream_id).set(topic, topic_count);
|
||||||
if (!muting.is_topic_muted(stream_id, topic)) {
|
if (!muting.is_topic_muted(stream_id, topic)) {
|
||||||
stream_count += topic_count;
|
stream_count += topic_count;
|
||||||
|
@ -330,7 +281,7 @@ exports.unread_topic_counter = (function () {
|
||||||
|
|
||||||
const result = _.map(topic_names, function (topic_name) {
|
const result = _.map(topic_names, function (topic_name) {
|
||||||
const msgs = per_stream_bucketer.get_bucket(topic_name);
|
const msgs = per_stream_bucketer.get_bucket(topic_name);
|
||||||
const message_id = msgs.max();
|
const message_id = Math.max(...msgs);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// retrieve the topic with its original case, since topic_name
|
// retrieve the topic with its original case, since topic_name
|
||||||
|
@ -355,7 +306,7 @@ exports.unread_topic_counter = (function () {
|
||||||
const sub = stream_data.get_sub_by_id(stream_id);
|
const sub = stream_data.get_sub_by_id(stream_id);
|
||||||
per_stream_bucketer.each(function (msgs, topic) {
|
per_stream_bucketer.each(function (msgs, topic) {
|
||||||
if (sub && !muting.is_topic_muted(stream_id, topic)) {
|
if (sub && !muting.is_topic_muted(stream_id, topic)) {
|
||||||
stream_count += msgs.count();
|
stream_count += msgs.size;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -373,7 +324,7 @@ exports.unread_topic_counter = (function () {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return topic_bucket.count();
|
return topic_bucket.size;
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_msg_ids_for_stream = function (stream_id) {
|
self.get_msg_ids_for_stream = function (stream_id) {
|
||||||
|
@ -387,7 +338,7 @@ exports.unread_topic_counter = (function () {
|
||||||
const sub = stream_data.get_sub_by_id(stream_id);
|
const sub = stream_data.get_sub_by_id(stream_id);
|
||||||
per_stream_bucketer.each(function (msgs, topic) {
|
per_stream_bucketer.each(function (msgs, topic) {
|
||||||
if (sub && !muting.is_topic_muted(stream_id, topic)) {
|
if (sub && !muting.is_topic_muted(stream_id, topic)) {
|
||||||
topic_lists.push(msgs.members());
|
topic_lists.push([...msgs]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -407,7 +358,7 @@ exports.unread_topic_counter = (function () {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const ids = topic_bucket.members();
|
const ids = [...topic_bucket];
|
||||||
return util.sorted_ids(ids);
|
return util.sorted_ids(ids);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -424,7 +375,7 @@ exports.unread_topic_counter = (function () {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !id_set.is_empty();
|
return id_set.size !== 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
Loading…
Reference in New Issue