mirror of https://github.com/zulip/zulip.git
84 lines
3.0 KiB
JavaScript
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;
|
|
}
|