mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
notification_data: Create common source for trigger strings.
This reduces loose strings in the codebase, and allows us to not worry about the exact naming (`stream_email_enabled` or `stream_emails_enabled`?) and tense (`mentioned` or `mention`?). Ideally this new class should have been in `lib/notification_data.py`, which is our file for things like this. But, the next commit requires using this data in `models.py`, and importing from `notification_data.py` to `models.py` causes recursive imports.
This commit is contained in:
committed by
Tim Abbott
parent
a748a2f03c
commit
c3319a5231
@@ -2,6 +2,7 @@ from dataclasses import dataclass
|
||||
from typing import Collection, Dict, List, Optional, Set
|
||||
|
||||
from zerver.lib.mention import MentionData
|
||||
from zerver.models import NotificationTriggers
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -74,13 +75,13 @@ class UserMessageNotificationsData:
|
||||
return None
|
||||
|
||||
if private_message:
|
||||
return "private_message"
|
||||
return NotificationTriggers.PRIVATE_MESSAGE
|
||||
elif self.mentioned:
|
||||
return "mentioned"
|
||||
return NotificationTriggers.MENTION
|
||||
elif self.wildcard_mention_notify:
|
||||
return "wildcard_mentioned"
|
||||
return NotificationTriggers.WILDCARD_MENTION
|
||||
elif self.stream_push_notify:
|
||||
return "stream_push_notify"
|
||||
return NotificationTriggers.STREAM_PUSH
|
||||
else:
|
||||
return None
|
||||
|
||||
@@ -102,13 +103,13 @@ class UserMessageNotificationsData:
|
||||
return None
|
||||
|
||||
if private_message:
|
||||
return "private_message"
|
||||
return NotificationTriggers.PRIVATE_MESSAGE
|
||||
elif self.mentioned:
|
||||
return "mentioned"
|
||||
return NotificationTriggers.MENTION
|
||||
elif self.wildcard_mention_notify:
|
||||
return "wildcard_mentioned"
|
||||
return NotificationTriggers.WILDCARD_MENTION
|
||||
elif self.stream_email_notify:
|
||||
return "stream_email_notify"
|
||||
return NotificationTriggers.STREAM_EMAIL
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ from zerver.lib.user_groups import access_user_group_by_id
|
||||
from zerver.models import (
|
||||
ArchivedMessage,
|
||||
Message,
|
||||
NotificationTriggers,
|
||||
PushDeviceToken,
|
||||
Recipient,
|
||||
UserMessage,
|
||||
@@ -559,19 +560,25 @@ def get_gcm_alert(message: Message, mentioned_user_group_name: Optional[str] = N
|
||||
"""
|
||||
sender_str = message.sender.full_name
|
||||
display_recipient = get_display_recipient(message.recipient)
|
||||
if message.recipient.type == Recipient.HUDDLE and message.trigger == "private_message":
|
||||
if (
|
||||
message.recipient.type == Recipient.HUDDLE
|
||||
and message.trigger == NotificationTriggers.PRIVATE_MESSAGE
|
||||
):
|
||||
return f"New private group message from {sender_str}"
|
||||
elif message.recipient.type == Recipient.PERSONAL and message.trigger == "private_message":
|
||||
elif (
|
||||
message.recipient.type == Recipient.PERSONAL
|
||||
and message.trigger == NotificationTriggers.PRIVATE_MESSAGE
|
||||
):
|
||||
return f"New private message from {sender_str}"
|
||||
elif message.is_stream_message() and message.trigger == "mentioned":
|
||||
elif message.is_stream_message() and message.trigger == NotificationTriggers.MENTION:
|
||||
if mentioned_user_group_name is None:
|
||||
return f"{sender_str} mentioned you in #{display_recipient}"
|
||||
else:
|
||||
return f"{sender_str} mentioned @{mentioned_user_group_name} in #{display_recipient}"
|
||||
elif message.is_stream_message() and message.trigger == "wildcard_mentioned":
|
||||
elif message.is_stream_message() and message.trigger == NotificationTriggers.WILDCARD_MENTION:
|
||||
return f"{sender_str} mentioned everyone in #{display_recipient}"
|
||||
else:
|
||||
assert message.is_stream_message() and message.trigger == "stream_push_notify"
|
||||
assert message.is_stream_message() and message.trigger == NotificationTriggers.STREAM_PUSH
|
||||
return f"New stream message from {sender_str} in #{display_recipient}"
|
||||
|
||||
|
||||
@@ -722,14 +729,14 @@ def get_apns_alert_subtitle(
|
||||
"""
|
||||
On an iOS notification, this is the second bolded line.
|
||||
"""
|
||||
if message.trigger == "mentioned":
|
||||
if message.trigger == NotificationTriggers.MENTION:
|
||||
if mentioned_user_group_name is not None:
|
||||
return _("{full_name} mentioned @{user_group_name}:").format(
|
||||
full_name=message.sender.full_name, user_group_name=mentioned_user_group_name
|
||||
)
|
||||
else:
|
||||
return _("{full_name} mentioned you:").format(full_name=message.sender.full_name)
|
||||
elif message.trigger == "wildcard_mentioned":
|
||||
elif message.trigger == NotificationTriggers.WILDCARD_MENTION:
|
||||
return _("{full_name} mentioned everyone:").format(full_name=message.sender.full_name)
|
||||
elif message.recipient.type == Recipient.PERSONAL:
|
||||
return ""
|
||||
|
||||
@@ -3331,6 +3331,15 @@ class MissedMessageEmailAddress(models.Model):
|
||||
self.save(update_fields=["times_used"])
|
||||
|
||||
|
||||
class NotificationTriggers:
|
||||
# "private_message" is for 1:1 PMs as well as huddles
|
||||
PRIVATE_MESSAGE = "private_message"
|
||||
MENTION = "mentioned"
|
||||
WILDCARD_MENTION = "wildcard_mentioned"
|
||||
STREAM_PUSH = "stream_push_notify"
|
||||
STREAM_EMAIL = "stream_email_notify"
|
||||
|
||||
|
||||
class ScheduledMessage(models.Model):
|
||||
id: int = models.AutoField(auto_created=True, primary_key=True, verbose_name="ID")
|
||||
sender: UserProfile = models.ForeignKey(UserProfile, on_delete=CASCADE)
|
||||
|
||||
@@ -67,6 +67,7 @@ from zerver.lib.test_helpers import mock_queue_publish
|
||||
from zerver.lib.user_groups import create_user_group
|
||||
from zerver.models import (
|
||||
Message,
|
||||
NotificationTriggers,
|
||||
PushDeviceToken,
|
||||
RealmAuditLog,
|
||||
Recipient,
|
||||
@@ -1509,7 +1510,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
"Content of personal message",
|
||||
)
|
||||
message = Message.objects.get(id=message_id)
|
||||
message.trigger = "private_message"
|
||||
message.trigger = NotificationTriggers.PRIVATE_MESSAGE
|
||||
payload = get_message_payload_apns(user_profile, message)
|
||||
expected = {
|
||||
"alert": {
|
||||
@@ -1543,7 +1544,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
self.sender, [self.example_user("othello"), self.example_user("cordelia")]
|
||||
)
|
||||
message = Message.objects.get(id=message_id)
|
||||
message.trigger = "private_message"
|
||||
message.trigger = NotificationTriggers.PRIVATE_MESSAGE
|
||||
payload = get_message_payload_apns(user_profile, message)
|
||||
expected = {
|
||||
"alert": {
|
||||
@@ -1576,7 +1577,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
def test_get_message_payload_apns_stream_message(self) -> None:
|
||||
stream = Stream.objects.filter(name="Verona").get()
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "push_stream_notify"
|
||||
message.trigger = NotificationTriggers.STREAM_PUSH
|
||||
message.stream_name = "Verona"
|
||||
payload = get_message_payload_apns(self.sender, message)
|
||||
expected = {
|
||||
@@ -1608,7 +1609,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
user_profile = self.example_user("othello")
|
||||
stream = Stream.objects.filter(name="Verona").get()
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "mentioned"
|
||||
message.trigger = NotificationTriggers.MENTION
|
||||
message.stream_name = "Verona"
|
||||
payload = get_message_payload_apns(user_profile, message)
|
||||
expected = {
|
||||
@@ -1641,7 +1642,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
user_group = create_user_group("test_user_group", [user_profile], get_realm("zulip"))
|
||||
stream = Stream.objects.filter(name="Verona").get()
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "mentioned"
|
||||
message.trigger = NotificationTriggers.MENTION
|
||||
message.stream_name = "Verona"
|
||||
payload = get_message_payload_apns(user_profile, message, user_group.id, user_group.name)
|
||||
expected = {
|
||||
@@ -1675,7 +1676,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
user_profile = self.example_user("othello")
|
||||
stream = Stream.objects.filter(name="Verona").get()
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "wildcard_mentioned"
|
||||
message.trigger = NotificationTriggers.WILDCARD_MENTION
|
||||
message.stream_name = "Verona"
|
||||
payload = get_message_payload_apns(user_profile, message)
|
||||
expected = {
|
||||
@@ -1710,7 +1711,7 @@ class TestGetAPNsPayload(PushNotificationTest):
|
||||
self.sender, [self.example_user("othello"), self.example_user("cordelia")]
|
||||
)
|
||||
message = Message.objects.get(id=message_id)
|
||||
message.trigger = "private_message"
|
||||
message.trigger = NotificationTriggers.PRIVATE_MESSAGE
|
||||
payload = get_message_payload_apns(user_profile, message)
|
||||
expected = {
|
||||
"alert": {
|
||||
@@ -1813,7 +1814,7 @@ class TestGetGCMPayload(PushNotificationTest):
|
||||
|
||||
def test_get_message_payload_gcm_private_message(self) -> None:
|
||||
message = self.get_message(Recipient.PERSONAL, 1)
|
||||
message.trigger = "private_message"
|
||||
message.trigger = NotificationTriggers.PRIVATE_MESSAGE
|
||||
hamlet = self.example_user("hamlet")
|
||||
payload, gcm_options = get_message_payload_gcm(hamlet, message)
|
||||
self.assertDictEqual(
|
||||
@@ -1846,7 +1847,7 @@ class TestGetGCMPayload(PushNotificationTest):
|
||||
def test_get_message_payload_gcm_stream_notifications(self) -> None:
|
||||
stream = Stream.objects.get(name="Denmark")
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "stream_push_notify"
|
||||
message.trigger = NotificationTriggers.STREAM_PUSH
|
||||
message.stream_name = "Denmark"
|
||||
hamlet = self.example_user("hamlet")
|
||||
payload, gcm_options = get_message_payload_gcm(hamlet, message)
|
||||
@@ -1883,7 +1884,7 @@ class TestGetGCMPayload(PushNotificationTest):
|
||||
def test_get_message_payload_gcm_redacted_content(self) -> None:
|
||||
stream = Stream.objects.get(name="Denmark")
|
||||
message = self.get_message(Recipient.STREAM, stream.id)
|
||||
message.trigger = "stream_push_notify"
|
||||
message.trigger = NotificationTriggers.STREAM_PUSH
|
||||
message.stream_name = "Denmark"
|
||||
hamlet = self.example_user("hamlet")
|
||||
payload, gcm_options = get_message_payload_gcm(hamlet, message)
|
||||
|
||||
Reference in New Issue
Block a user