Files
zulip/static/js/recent_senders.js
Anders Kaseorg 28f3dfa284 js: Automatically convert var to let and const in most files.
This commit was originally automatically generated using `tools/lint
--only=eslint --fix`.  It was then modified by tabbott to contain only
changes to a set of files that are unlikely to result in significant
merge conflicts with any open pull request, excluding about 20 files.
His plan is to merge the remaining changes with more precise care,
potentially involving merging parts of conflicting pull requests
before running the `eslint --fix` operation.

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-11-03 12:42:39 -08:00

67 lines
2.3 KiB
JavaScript

const Dict = require('./dict').Dict;
const topic_senders = new Dict(); // key is stream-id, value is Dict
const stream_senders = new Dict(); // key is stream-id, value is Dict
exports.process_message_for_senders = function (message) {
const stream_id = message.stream_id.toString();
const topic = util.get_message_topic(message);
// Process most recent sender to topic
const topic_dict = topic_senders.get(stream_id) || new Dict({fold_case: true});
let sender_message_ids = topic_dict.get(topic) || new Dict();
let old_message_id = sender_message_ids.get(message.sender_id);
if (old_message_id === undefined || old_message_id < message.id) {
sender_message_ids.set(message.sender_id, message.id);
}
topic_dict.set(topic, sender_message_ids);
topic_senders.set(stream_id, topic_dict);
// Process most recent sender to whole stream
sender_message_ids = stream_senders.get(stream_id) || new Dict();
old_message_id = sender_message_ids.get(message.sender_id);
if (old_message_id === undefined || old_message_id < message.id) {
sender_message_ids.set(message.sender_id, message.id);
}
stream_senders.set(stream_id, sender_message_ids);
};
exports.compare_by_recency = function (user_a, user_b, stream_id, topic) {
stream_id = stream_id.toString();
let a_message_id;
let b_message_id;
const topic_dict = topic_senders.get(stream_id);
if (topic !== undefined && topic_dict !== undefined) {
const sender_message_ids = topic_dict.get(topic);
if (sender_message_ids !== undefined) {
b_message_id = sender_message_ids.get(user_b.user_id) || Number.NEGATIVE_INFINITY;
a_message_id = sender_message_ids.get(user_a.user_id) || Number.NEGATIVE_INFINITY;
if (a_message_id !== b_message_id) {
return b_message_id - a_message_id;
}
}
}
// Check recency for whole stream as tiebreaker
const stream_dict = stream_senders.get(stream_id);
if (stream_dict !== undefined) {
b_message_id = stream_dict.get(user_b.user_id) || Number.NEGATIVE_INFINITY;
a_message_id = stream_dict.get(user_a.user_id) || Number.NEGATIVE_INFINITY;
if (a_message_id !== b_message_id) {
return b_message_id - a_message_id;
}
}
return 0;
};
window.recent_senders = exports;