mirror of
https://github.com/zulip/zulip.git
synced 2026-07-03 21:10:12 +08:00
unread: Fix double counting of mentions in direct messages.
Created a new set `direct_message_with_mention_count` which stores direct messages containing mentions. In `new_message_count`, direct messages with mention were added twice, once by res.mentioned_message_count and once by res.private_message_count so subtracting intersection of both `direct_message_with_mention_count` now gives accurate count. Fixes #25453
This commit is contained in:
parent
3c05bd94a4
commit
b8d84abc47
@ -35,6 +35,7 @@ export function clear_old_unreads_missing() {
|
||||
}
|
||||
|
||||
export const unread_mentions_counter = new Set();
|
||||
export const direct_message_with_mention_count = new Set();
|
||||
const unread_messages = new Set();
|
||||
|
||||
// Map with keys of the form "{stream_id}:{topic.toLowerCase()}" and
|
||||
@ -703,6 +704,7 @@ export function update_message_for_mention(message, content_edited = false) {
|
||||
// an unread mention of the user.
|
||||
if (!message.unread) {
|
||||
unread_mentions_counter.delete(message.id);
|
||||
direct_message_with_mention_count.delete(message.id);
|
||||
remove_message_from_unread_mention_topics(message.id);
|
||||
return false;
|
||||
}
|
||||
@ -715,8 +717,12 @@ export function update_message_for_mention(message, content_edited = false) {
|
||||
if (is_unmuted_mention || message.mentioned_me_directly) {
|
||||
unread_mentions_counter.add(message.id);
|
||||
add_message_to_unread_mention_topics(message.id);
|
||||
if (!message.stream_id) {
|
||||
direct_message_with_mention_count.add(message.id);
|
||||
}
|
||||
} else {
|
||||
unread_mentions_counter.delete(message.id);
|
||||
direct_message_with_mention_count.delete(message.id);
|
||||
remove_message_from_unread_mention_topics(message.id);
|
||||
}
|
||||
|
||||
@ -738,6 +744,7 @@ export function mark_as_read(message_id) {
|
||||
remove_message_from_unread_mention_topics(message_id);
|
||||
unread_topic_counter.delete(message_id);
|
||||
unread_mentions_counter.delete(message_id);
|
||||
direct_message_with_mention_count.delete(message_id);
|
||||
unread_messages.delete(message_id);
|
||||
|
||||
const message = message_store.get(message_id);
|
||||
@ -751,6 +758,7 @@ export function declare_bankruptcy() {
|
||||
unread_direct_message_counter.clear();
|
||||
unread_topic_counter.clear();
|
||||
unread_mentions_counter.clear();
|
||||
direct_message_with_mention_count.clear();
|
||||
unread_messages.clear();
|
||||
unread_mention_topics.clear();
|
||||
}
|
||||
@ -774,6 +782,7 @@ export function get_counts() {
|
||||
// should strive to keep it free of side effects on globals or DOM.
|
||||
res.private_message_count = 0;
|
||||
res.mentioned_message_count = unread_mentions_counter.size;
|
||||
res.direct_message_with_mention_count = direct_message_with_mention_count.size;
|
||||
|
||||
// This sets stream_count, topic_count, and home_unread_messages
|
||||
const topic_res = unread_topic_counter.get_counts();
|
||||
@ -805,7 +814,11 @@ export function calculate_notifiable_count(res) {
|
||||
settings_config.desktop_icon_count_display_values.none.code;
|
||||
if (only_show_notifiable) {
|
||||
// DESKTOP_ICON_COUNT_DISPLAY_NOTIFIABLE
|
||||
new_message_count = res.mentioned_message_count + res.private_message_count;
|
||||
new_message_count =
|
||||
res.mentioned_message_count +
|
||||
res.private_message_count -
|
||||
// Avoid double-counting direct messages containing mentions
|
||||
res.direct_message_with_mention_count;
|
||||
} else if (no_notifications) {
|
||||
// DESKTOP_ICON_COUNT_DISPLAY_NONE
|
||||
new_message_count = 0;
|
||||
@ -909,9 +922,11 @@ export function initialize(params) {
|
||||
unread_direct_message_counter.set_huddles(unread_msgs.huddles);
|
||||
unread_direct_message_counter.set_pms(unread_msgs.pms);
|
||||
unread_topic_counter.set_streams(unread_msgs.streams);
|
||||
|
||||
for (const message_id of unread_msgs.mentions) {
|
||||
unread_mentions_counter.add(message_id);
|
||||
if (unread_direct_message_counter.get_msg_ids().includes(message_id)) {
|
||||
direct_message_with_mention_count.add(message_id);
|
||||
}
|
||||
}
|
||||
clear_and_populate_unread_mention_topics();
|
||||
|
||||
|
||||
@ -560,7 +560,7 @@ test("mentions", () => {
|
||||
muted_direct_mention_message.id,
|
||||
private_mention_me_message.id,
|
||||
]);
|
||||
test_notifiable_count(counts.home_unread_messages, 5);
|
||||
test_notifiable_count(counts.home_unread_messages, 4);
|
||||
|
||||
unread.mark_as_read(mention_me_message.id);
|
||||
unread.mark_as_read(mention_all_message.id);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user