push_notifications: Refactor trigger from Message objects.

This is a cleaner way to reduce monkey-patched attributes we added
to the Message objects.
This commit is contained in:
PIG208
2021-09-03 22:49:27 +08:00
committed by Tim Abbott
parent 53888e5a26
commit e73d55af91
2 changed files with 48 additions and 36 deletions

View File

@@ -548,7 +548,9 @@ def initialize_push_notifications() -> None:
)
def get_gcm_alert(message: Message, mentioned_user_group_name: Optional[str] = None) -> str:
def get_gcm_alert(
message: Message, trigger: str, mentioned_user_group_name: Optional[str] = None
) -> str:
"""
Determine what alert string to display based on the missed messages.
"""
@@ -556,23 +558,23 @@ def get_gcm_alert(message: Message, mentioned_user_group_name: Optional[str] = N
display_recipient = get_display_recipient(message.recipient)
if (
message.recipient.type == Recipient.HUDDLE
and message.trigger == NotificationTriggers.PRIVATE_MESSAGE
and trigger == NotificationTriggers.PRIVATE_MESSAGE
):
return f"New private group message from {sender_str}"
elif (
message.recipient.type == Recipient.PERSONAL
and message.trigger == NotificationTriggers.PRIVATE_MESSAGE
and trigger == NotificationTriggers.PRIVATE_MESSAGE
):
return f"New private message from {sender_str}"
elif message.is_stream_message() and message.trigger == NotificationTriggers.MENTION:
elif message.is_stream_message() and 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 == NotificationTriggers.WILDCARD_MENTION:
elif message.is_stream_message() and trigger == NotificationTriggers.WILDCARD_MENTION:
return f"{sender_str} mentioned everyone in #{display_recipient}"
else:
assert message.is_stream_message() and message.trigger == NotificationTriggers.STREAM_PUSH
assert message.is_stream_message() and trigger == NotificationTriggers.STREAM_PUSH
return f"New stream message from {sender_str} in #{display_recipient}"
@@ -718,19 +720,22 @@ def get_apns_alert_title(message: Message) -> str:
def get_apns_alert_subtitle(
user_profile: UserProfile, message: Message, mentioned_user_group_name: Optional[str] = None
user_profile: UserProfile,
message: Message,
trigger: str,
mentioned_user_group_name: Optional[str] = None,
) -> str:
"""
On an iOS notification, this is the second bolded line.
"""
if message.trigger == NotificationTriggers.MENTION:
if 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 == NotificationTriggers.WILDCARD_MENTION:
elif trigger == NotificationTriggers.WILDCARD_MENTION:
return _("{full_name} mentioned everyone:").format(full_name=message.sender.full_name)
elif message.recipient.type == Recipient.PERSONAL:
return ""
@@ -769,6 +774,7 @@ def get_apns_badge_count_future(
def get_message_payload_apns(
user_profile: UserProfile,
message: Message,
trigger: str,
mentioned_user_group_id: Optional[int] = None,
mentioned_user_group_name: Optional[str] = None,
) -> Dict[str, Any]:
@@ -787,7 +793,7 @@ def get_message_payload_apns(
"alert": {
"title": get_apns_alert_title(message),
"subtitle": get_apns_alert_subtitle(
user_profile, message, mentioned_user_group_name
user_profile, message, trigger, mentioned_user_group_name
),
"body": content,
},
@@ -801,6 +807,7 @@ def get_message_payload_apns(
def get_message_payload_gcm(
user_profile: UserProfile,
message: Message,
trigger: str,
mentioned_user_group_id: Optional[int] = None,
mentioned_user_group_name: Optional[str] = None,
) -> Tuple[Dict[str, Any], Dict[str, Any]]:
@@ -813,7 +820,7 @@ def get_message_payload_gcm(
content, truncated = truncate_content(get_mobile_push_content(message.rendered_content))
data.update(
event="message",
alert=get_gcm_alert(message, mentioned_user_group_name),
alert=get_gcm_alert(message, trigger, mentioned_user_group_name),
zulip_message_id=message.id, # message_id is reserved for CCS
time=datetime_to_timestamp(message.date_sent),
content=content,
@@ -944,7 +951,7 @@ def handle_push_notification(user_profile_id: int, missed_message: Dict[str, Any
)
return
message.trigger = missed_message["trigger"]
trigger = missed_message["trigger"]
mentioned_user_group_name = None
mentioned_user_group_id = missed_message.get("mentioned_user_group_id")
@@ -955,10 +962,10 @@ def handle_push_notification(user_profile_id: int, missed_message: Dict[str, Any
mentioned_user_group_name = user_group.name
apns_payload = get_message_payload_apns(
user_profile, message, mentioned_user_group_id, mentioned_user_group_name
user_profile, message, trigger, mentioned_user_group_id, mentioned_user_group_name
)
gcm_payload, gcm_options = get_message_payload_gcm(
user_profile, message, mentioned_user_group_id, mentioned_user_group_name
user_profile, message, trigger, mentioned_user_group_id, mentioned_user_group_name
)
logger.info("Sending push notifications to mobile clients for user %s", user_profile_id)