mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 10:57:58 +00:00
recent_topics: Update topics post message deletion.
Delete stored topic data in `recent_senders` and `recent_topics` about the message's topics and re-render them. The process is similar to topic editing. See `recent_senders.process_topic_edit` for logical details.
This commit is contained in:
@@ -199,4 +199,19 @@ run_test('process_message_for_senders', () => {
|
|||||||
assert.equal(
|
assert.equal(
|
||||||
rs.get_topic_recent_senders(stream5, topic4).toString(), '2,3',
|
rs.get_topic_recent_senders(stream5, topic4).toString(), '2,3',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
set_global('message_store', {
|
||||||
|
get: () => message1,
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(
|
||||||
|
rs.get_topic_recent_senders(stream1, topic1).toString(), '2,1',
|
||||||
|
);
|
||||||
|
// delete message1 and message5 sent by sender1
|
||||||
|
messages.splice(4, 1);
|
||||||
|
messages.splice(0, 1);
|
||||||
|
rs.update_topics_of_message_ids([message1.id, message5.id]);
|
||||||
|
assert.equal(
|
||||||
|
rs.get_topic_recent_senders(stream1, topic1).toString(), '2',
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -620,7 +620,58 @@ run_test('test_reify_local_echo_message', () => {
|
|||||||
}), false);
|
}), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
run_test('test_delete_messages', () => {
|
||||||
|
const rt = zrequire('recent_topics');
|
||||||
|
rt.set_filter('all');
|
||||||
|
rt.process_messages(messages);
|
||||||
|
|
||||||
|
set_global('message_list', {
|
||||||
|
all: {
|
||||||
|
all_messages: function () {
|
||||||
|
// messages[0] was removed.
|
||||||
|
const reduced_msgs = [...messages];
|
||||||
|
reduced_msgs.splice(0, 1);
|
||||||
|
return reduced_msgs;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
let all_topics = rt.get();
|
||||||
|
assert.equal(Array.from(all_topics.keys()).toString(),
|
||||||
|
'4:topic-10,1:topic-7,1:topic-6,1:topic-5,1:topic-4,1:topic-3,1:topic-2,1:topic-1');
|
||||||
|
rt.update_topics_of_message_ids([messages[0].id]);
|
||||||
|
|
||||||
|
all_topics = rt.get();
|
||||||
|
assert.equal(Array.from(all_topics.keys()).toString(),
|
||||||
|
'4:topic-10,1:topic-7,1:topic-6,1:topic-5,1:topic-4,1:topic-3,1:topic-2');
|
||||||
|
|
||||||
|
set_global('message_list', {
|
||||||
|
all: {
|
||||||
|
all_messages: function () {
|
||||||
|
// messages[0], messages[1] and message[2] were removed.
|
||||||
|
const reduced_msgs = [...messages];
|
||||||
|
reduced_msgs.splice(0, 3);
|
||||||
|
return reduced_msgs;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
rt.update_topics_of_message_ids([messages[1].id, messages[2].id]);
|
||||||
|
|
||||||
|
all_topics = rt.get();
|
||||||
|
assert.equal(Array.from(all_topics.keys()).toString(),
|
||||||
|
'4:topic-10,1:topic-7,1:topic-6,1:topic-5,1:topic-4,1:topic-3');
|
||||||
|
});
|
||||||
|
|
||||||
run_test('test_topic_edit', () => {
|
run_test('test_topic_edit', () => {
|
||||||
|
set_global('message_list', {
|
||||||
|
all: {
|
||||||
|
all_messages: function () {
|
||||||
|
return messages;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
// NOTE: This test should always run in the end as it modified the messages data.
|
// NOTE: This test should always run in the end as it modified the messages data.
|
||||||
const rt = zrequire('recent_topics');
|
const rt = zrequire('recent_topics');
|
||||||
rt.set_filter('all');
|
rt.set_filter('all');
|
||||||
|
|||||||
@@ -71,6 +71,26 @@ exports.process_topic_edit = function (old_stream_id, old_topic, new_topic, new_
|
|||||||
// the messages were moved to another stream or deleted.
|
// the messages were moved to another stream or deleted.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.update_topics_of_message_ids = function (message_ids) {
|
||||||
|
const topics_to_update = new Map();
|
||||||
|
for (const msg_id of message_ids) {
|
||||||
|
// Note: message_store retians data of msg post deletion.
|
||||||
|
const message = message_store.get(msg_id);
|
||||||
|
// Create unique keys for stream_id and topic.
|
||||||
|
const topic_key = message.stream_id + ":" + message.topic;
|
||||||
|
topics_to_update.set(topic_key, [message.stream_id, message.topic]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [stream_id, topic] of topics_to_update.values()) {
|
||||||
|
const topic_dict = topic_senders.get(stream_id);
|
||||||
|
topic_dict.delete(topic);
|
||||||
|
const topic_msgs = message_util.get_messages_in_topic(stream_id, topic);
|
||||||
|
for (const msg of topic_msgs) {
|
||||||
|
exports.process_message_for_senders(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
exports.compare_by_recency = function (user_a, user_b, stream_id, topic) {
|
exports.compare_by_recency = function (user_a, user_b, stream_id, topic) {
|
||||||
let a_message_id;
|
let a_message_id;
|
||||||
let b_message_id;
|
let b_message_id;
|
||||||
|
|||||||
@@ -236,6 +236,21 @@ exports.topic_in_search_results = function (keyword, stream, topic) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.update_topics_of_message_ids = function (message_ids) {
|
||||||
|
const topics_to_rerender = new Map();
|
||||||
|
for (const msg_id of message_ids) {
|
||||||
|
const message = message_store.get(msg_id);
|
||||||
|
const topic_key = get_topic_key(message.stream_id, message.topic);
|
||||||
|
topics_to_rerender.set(topic_key, [message.stream_id, message.topic]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [stream_id, topic] of topics_to_rerender.values()) {
|
||||||
|
topics.delete(get_topic_key(stream_id, topic));
|
||||||
|
const msgs = message_util.get_messages_in_topic(stream_id, topic);
|
||||||
|
exports.process_messages(msgs);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
exports.filters_should_hide_topic = function (topic_data) {
|
exports.filters_should_hide_topic = function (topic_data) {
|
||||||
const msg = message_store.get(topic_data.last_msg_id);
|
const msg = message_store.get(topic_data.last_msg_id);
|
||||||
|
|
||||||
|
|||||||
@@ -131,6 +131,8 @@ exports.remove_messages = function (message_ids) {
|
|||||||
}
|
}
|
||||||
list.remove_and_rerender(msg_ids_to_rerender);
|
list.remove_and_rerender(msg_ids_to_rerender);
|
||||||
}
|
}
|
||||||
|
recent_senders.update_topics_of_message_ids(message_ids);
|
||||||
|
recent_topics.update_topics_of_message_ids(message_ids);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.show_failed_message_success = function (message_id) {
|
exports.show_failed_message_success = function (message_id) {
|
||||||
|
|||||||
Reference in New Issue
Block a user