notification: Use existing email format for missed 1:1 DM via DM group.

To maintain API compatibility, we render the email notification for
missed 1:1 direct messages using DirectMessageGroup with the same
format as messages sent to a Personal recipient.
This commit is contained in:
Mohammad Reza Kianifar
2025-06-05 01:41:09 +00:00
committed by Tim Abbott
parent 2dbc17b453
commit 015f674520
3 changed files with 118 additions and 21 deletions

View File

@@ -209,10 +209,13 @@ def build_message_list(
messages_to_render: list[dict[str, Any]] = []
def sender_string(message: Message) -> str:
if message.recipient.type in (Recipient.STREAM, Recipient.DIRECT_MESSAGE_GROUP):
if message.recipient.type == Recipient.STREAM:
return message.sender.full_name
else:
return ""
elif message.recipient.type == Recipient.DIRECT_MESSAGE_GROUP:
display_recipient = get_display_recipient(message.recipient)
if len(display_recipient) > 2:
return message.sender.full_name
return ""
def fix_plaintext_image_urls(content: str) -> str:
# Replace image URLs in plaintext content of the form
@@ -272,7 +275,8 @@ def build_message_list(
grouping: dict[str, Any] = {"user": message.sender_id}
narrow_link = personal_narrow_url(
realm=user.realm,
sender=message.sender,
sender_id=message.sender.id,
sender_full_name=message.sender.full_name,
)
header = f"You and {message.sender.full_name}"
header_html = Markup(
@@ -500,35 +504,37 @@ def do_send_missedmessage_events_reply_in_zulip(
reply_to_name = "Zulip"
senders = list({m["message"].sender for m in missed_messages})
if missed_messages[0]["message"].recipient.type == Recipient.DIRECT_MESSAGE_GROUP:
display_recipient = get_display_recipient(missed_messages[0]["message"].recipient)
message = missed_messages[0]["message"]
if message.recipient.type == Recipient.DIRECT_MESSAGE_GROUP:
display_recipient = get_display_recipient(message.recipient)
narrow_url = direct_message_group_narrow_url(
user=user_profile,
display_recipient=display_recipient,
)
context.update(narrow_url=narrow_url)
other_recipients = [r["full_name"] for r in display_recipient if r["id"] != user_profile.id]
context.update(group_pm=True)
if len(other_recipients) == 2:
direct_message_group_display_name = " and ".join(other_recipients)
context.update(direct_message_group_display_name=direct_message_group_display_name)
if len(other_recipients) <= 1:
context.update(group_pm=False, private_message=True)
elif len(other_recipients) == 2:
group_display_name = " and ".join(other_recipients)
context.update(group_pm=True, direct_message_group_display_name=group_display_name)
elif len(other_recipients) == 3:
direct_message_group_display_name = (
group_display_name = (
f"{other_recipients[0]}, {other_recipients[1]}, and {other_recipients[2]}"
)
context.update(direct_message_group_display_name=direct_message_group_display_name)
context.update(group_pm=True, direct_message_group_display_name=group_display_name)
else:
direct_message_group_display_name = "{}, and {} others".format(
group_display_name = "{}, and {} others".format(
", ".join(other_recipients[:2]), len(other_recipients) - 2
)
context.update(direct_message_group_display_name=direct_message_group_display_name)
elif missed_messages[0]["message"].recipient.type == Recipient.PERSONAL:
context.update(group_pm=True, direct_message_group_display_name=group_display_name)
elif message.recipient.type == Recipient.PERSONAL:
narrow_url = personal_narrow_url(
realm=user_profile.realm,
sender=missed_messages[0]["message"].sender,
sender_id=message.sender.id,
sender_full_name=message.sender.full_name,
)
context.update(narrow_url=narrow_url)
context.update(private_message=True)
context.update(narrow_url=narrow_url, private_message=True)
elif (
context["mention"]
or context["stream_email_notify"]
@@ -550,7 +556,6 @@ def do_send_missedmessage_events_reply_in_zulip(
]
}
)
message = missed_messages[0]["message"]
assert message.recipient.type == Recipient.STREAM
stream = Stream.objects.only("id", "name").get(id=message.recipient.type_id)
narrow_url = message_link_url(