diff --git a/zerver/lib/push_notifications.py b/zerver/lib/push_notifications.py index 51bf60c377..4d0edb97c3 100644 --- a/zerver/lib/push_notifications.py +++ b/zerver/lib/push_notifications.py @@ -700,16 +700,15 @@ def get_apns_alert_title(message: Message) -> str: def get_apns_alert_subtitle( - user_profile: UserProfile, message: Message, mentioned_user_group_id: Optional[int] = None + user_profile: UserProfile, message: Message, mentioned_user_group_name: Optional[str] = None ) -> str: """ On an iOS notification, this is the second bolded line. """ if message.trigger == "mentioned": - if mentioned_user_group_id is not None: - user_group = access_user_group_by_id(mentioned_user_group_id, user_profile) + 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=user_group.name + 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) @@ -750,7 +749,7 @@ def get_apns_badge_count_future( def get_message_payload_apns( - user_profile: UserProfile, message: Message, mentioned_user_group_id: Optional[int] = None + user_profile: UserProfile, message: Message, mentioned_user_group_name: Optional[str] = None ) -> Dict[str, Any]: """A `message` payload for iOS, via APNs.""" zulip_data = get_message_payload(user_profile, message) @@ -764,7 +763,9 @@ def get_message_payload_apns( apns_data = { "alert": { "title": get_apns_alert_title(message), - "subtitle": get_apns_alert_subtitle(user_profile, message, mentioned_user_group_id), + "subtitle": get_apns_alert_subtitle( + user_profile, message, mentioned_user_group_name + ), "body": content, }, "sound": "default", @@ -915,10 +916,14 @@ def handle_push_notification(user_profile_id: int, missed_message: Dict[str, Any return message.trigger = missed_message["trigger"] + mentioned_user_group_name = None + mentioned_user_group_id = missed_message.get("mentioned_user_group_id") - apns_payload = get_message_payload_apns( - user_profile, message, missed_message.get("mentioned_user_group_id") - ) + if mentioned_user_group_id is not None: + user_group = access_user_group_by_id(mentioned_user_group_id, user_profile) + mentioned_user_group_name = user_group.name + + apns_payload = get_message_payload_apns(user_profile, message, mentioned_user_group_name) gcm_payload, gcm_options = get_message_payload_gcm(user_profile, message) logger.info("Sending push notifications to mobile clients for user %s", user_profile_id) diff --git a/zerver/tests/test_push_notifications.py b/zerver/tests/test_push_notifications.py index a979b6a6ee..c253974d9b 100644 --- a/zerver/tests/test_push_notifications.py +++ b/zerver/tests/test_push_notifications.py @@ -1643,8 +1643,8 @@ class TestGetAPNsPayload(PushNotificationTest): message = self.get_message(Recipient.STREAM, stream.id) message.trigger = "mentioned" message.stream_name = "Verona" - mentioned_user_group_id = user_group.id - payload = get_message_payload_apns(user_profile, message, mentioned_user_group_id) + mentioned_user_group_name = user_group.name + payload = get_message_payload_apns(user_profile, message, mentioned_user_group_name) expected = { "alert": { "title": "#Verona > Test topic",