zulip/static/js/message_helper.js

84 lines
3.0 KiB
JavaScript

import * as alert_words from "./alert_words";
import * as message_store from "./message_store";
import * as message_user_ids from "./message_user_ids";
import * as people from "./people";
import * as pm_conversations from "./pm_conversations";
import * as recent_senders from "./recent_senders";
import * as stream_topic_history from "./stream_topic_history";
import * as user_status from "./user_status";
import * as util from "./util";
export function process_new_message(message) {
// Call this function when processing a new message. After
// a message is processed and inserted into the message store
// cache, most modules use message_store.get to look at
// messages.
const cached_msg = message_store.get_cached_message(message.id);
if (cached_msg !== undefined) {
// Copy the match topic and content over if they exist on
// the new message
if (util.get_match_topic(message) !== undefined) {
util.set_match_data(cached_msg, message);
}
return cached_msg;
}
message_store.set_message_booleans(message);
message.sent_by_me = people.is_current_user(message.sender_email);
people.extract_people_from_message(message);
people.maybe_incr_recipient_count(message);
const sender = people.get_by_user_id(message.sender_id);
if (sender) {
message.sender_full_name = sender.full_name;
message.sender_email = sender.email;
message.status_emoji_info = user_status.get_status_emoji(message.sender_id);
}
// Convert topic even for PMs, as legacy code
// wants the empty field.
util.convert_message_topic(message);
switch (message.type) {
case "stream":
message.is_stream = true;
message.stream = message.display_recipient;
message.reply_to = message.sender_email;
stream_topic_history.add_message({
stream_id: message.stream_id,
topic_name: message.topic,
message_id: message.id,
});
recent_senders.process_stream_message(message);
message_user_ids.add_user_id(message.sender_id);
break;
case "private":
message.is_private = true;
message.reply_to = util.normalize_recipients(message_store.get_pm_emails(message));
message.display_reply_to = message_store.get_pm_full_names(message);
message.pm_with_url = people.pm_with_url(message);
message.to_user_ids = people.pm_reply_user_string(message);
pm_conversations.process_message(message);
recent_senders.process_private_message(message);
if (people.is_my_user_id(message.sender_id)) {
for (const recip of message.display_recipient) {
message_user_ids.add_user_id(recip.id);
}
}
break;
}
alert_words.process_message(message);
if (!message.reactions) {
message.reactions = [];
}
message_store.update_message_cache(message);
return message;
}