mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	clear_push_notification: Upgrade method to accept multiples users.
do_clear_mobile_push_notifications_for_ids can now be used to clear push_notification for multiple users at once. This method loops over users, so no performance optimization is gained.
This commit is contained in:
		| @@ -4038,7 +4038,7 @@ def do_update_pointer(user_profile: UserProfile, client: Client, | ||||
|                                    message__id__gt=prev_pointer, | ||||
|                                    message__id__lte=pointer).extra(where=[UserMessage.where_unread()]) \ | ||||
|             .update(flags=F('flags').bitor(UserMessage.flags.read)) | ||||
|         do_clear_mobile_push_notifications_for_ids(user_profile, app_message_ids) | ||||
|         do_clear_mobile_push_notifications_for_ids([user_profile.id], app_message_ids) | ||||
|         event_time = timezone_now() | ||||
|  | ||||
|         count = len(app_message_ids) | ||||
| @@ -4091,7 +4091,7 @@ def do_mark_all_as_read(user_profile: UserProfile, client: Client) -> int: | ||||
|     ).extra( | ||||
|         where=[UserMessage.where_active_push_notification()], | ||||
|     ).values_list("message_id", flat=True)[0:10000] | ||||
|     do_clear_mobile_push_notifications_for_ids(user_profile, all_push_message_ids) | ||||
|     do_clear_mobile_push_notifications_for_ids([user_profile.id], all_push_message_ids) | ||||
|  | ||||
|     msgs = UserMessage.objects.filter( | ||||
|         user_profile=user_profile, | ||||
| @@ -4160,7 +4160,7 @@ def do_mark_stream_messages_as_read(user_profile: UserProfile, | ||||
|     event_time = timezone_now() | ||||
|  | ||||
|     send_event(user_profile.realm, event, [user_profile.id]) | ||||
|     do_clear_mobile_push_notifications_for_ids(user_profile, message_ids) | ||||
|     do_clear_mobile_push_notifications_for_ids([user_profile.id], message_ids) | ||||
|  | ||||
|     do_increment_logging_stat(user_profile, COUNT_STATS['messages_read::hour'], | ||||
|                               None, event_time, increment=count) | ||||
| @@ -4168,31 +4168,41 @@ def do_mark_stream_messages_as_read(user_profile: UserProfile, | ||||
|                               None, event_time, increment=min(1, count)) | ||||
|     return count | ||||
|  | ||||
| def do_clear_mobile_push_notifications_for_ids(user_profile: UserProfile, | ||||
| def do_clear_mobile_push_notifications_for_ids(user_profile_ids: List[int], | ||||
|                                                message_ids: List[int]) -> None: | ||||
|     filtered_message_ids = list(UserMessage.objects.filter( | ||||
|     # This functions supports clearing notifications for several users | ||||
|     # only for the message-edit use case where we'll have a single message_id. | ||||
|     assert len(user_profile_ids) == 1 or len(message_ids) == 1 | ||||
|  | ||||
|     messages_by_user = defaultdict(list) | ||||
|     notifications_to_update = list(UserMessage.objects.filter( | ||||
|         message_id__in=message_ids, | ||||
|         user_profile=user_profile, | ||||
|         user_profile_id__in=user_profile_ids, | ||||
|     ).extra( | ||||
|         where=[UserMessage.where_active_push_notification()], | ||||
|     ).values_list('message_id', flat=True)) | ||||
|     ).values_list('user_profile_id', 'message_id')) | ||||
|     for (user_id, message_id) in notifications_to_update: | ||||
|         messages_by_user[user_id].append(message_id) | ||||
|  | ||||
|     num_detached = settings.MAX_UNBATCHED_REMOVE_NOTIFICATIONS - 1 | ||||
|     for message_id in filtered_message_ids[:num_detached]: | ||||
|         # Older clients (all clients older than 2019-02-13) will only | ||||
|         # see the first message ID in a given notification-message. | ||||
|         # To help them out, send a few of these separately. | ||||
|         queue_json_publish("missedmessage_mobile_notifications", { | ||||
|             "type": "remove", | ||||
|             "user_profile_id": user_profile.id, | ||||
|             "message_ids": [message_id], | ||||
|         }) | ||||
|     if filtered_message_ids[num_detached:]: | ||||
|         queue_json_publish("missedmessage_mobile_notifications", { | ||||
|             "type": "remove", | ||||
|             "user_profile_id": user_profile.id, | ||||
|             "message_ids": filtered_message_ids[num_detached:], | ||||
|         }) | ||||
|     for user_profile_id in user_profile_ids: | ||||
|         filtered_message_ids = messages_by_user[user_profile_id] | ||||
|         for message_id in filtered_message_ids[:num_detached]: | ||||
|             # Older clients (all clients older than 2019-02-13) will only | ||||
|             # see the first message ID in a given notification-message. | ||||
|             # To help them out, send a few of these separately. | ||||
|             queue_json_publish("missedmessage_mobile_notifications", { | ||||
|                 "type": "remove", | ||||
|                 "user_profile_id": user_profile_id, | ||||
|                 "message_ids": [message_id], | ||||
|             }) | ||||
|  | ||||
|         if filtered_message_ids[num_detached:]: | ||||
|             queue_json_publish("missedmessage_mobile_notifications", { | ||||
|                 "type": "remove", | ||||
|                 "user_profile_id": user_profile_id, | ||||
|                 "message_ids": filtered_message_ids[num_detached:], | ||||
|             }) | ||||
|  | ||||
| def do_update_message_flags(user_profile: UserProfile, | ||||
|                             client: Client, | ||||
| @@ -4249,7 +4259,7 @@ def do_update_message_flags(user_profile: UserProfile, | ||||
|  | ||||
|     if flag == "read" and operation == "add": | ||||
|         event_time = timezone_now() | ||||
|         do_clear_mobile_push_notifications_for_ids(user_profile, messages) | ||||
|         do_clear_mobile_push_notifications_for_ids([user_profile.id], messages) | ||||
|  | ||||
|         do_increment_logging_stat(user_profile, COUNT_STATS['messages_read::hour'], | ||||
|                                   None, event_time, increment=count) | ||||
|   | ||||
| @@ -698,11 +698,10 @@ def get_remove_payload_apns(user_profile: UserProfile, message_ids: List[int]) - | ||||
|     return apns_data | ||||
|  | ||||
| def handle_remove_push_notification(user_profile_id: int, message_ids: List[int]) -> None: | ||||
|     """This should be called when a message that had previously had a | ||||
|     mobile push executed is read.  This triggers a mobile push notifica | ||||
|     mobile app when the message is read on the server, to remove the | ||||
|     """This should be called when a message that previously had a | ||||
|     mobile push notification executed is read.  This triggers a push to the | ||||
|     mobile app, when the message is read on the server, to remove the | ||||
|     message from the notification. | ||||
|  | ||||
|     """ | ||||
|     user_profile = get_user_profile_by_id(user_profile_id) | ||||
|     message_ids = bulk_access_messages_expect_usermessage(user_profile_id, message_ids) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user