From 26c890d5ac18adf98109b4663c9eecdc289badef Mon Sep 17 00:00:00 2001
From: Jason Volk <jason@zemos.net>
Date: Mon, 4 Nov 2024 22:38:12 +0000
Subject: [PATCH] skip redundant receipts on syncs

Signed-off-by: Jason Volk <jason@zemos.net>
---
 src/api/client/sync/v3.rs | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/api/client/sync/v3.rs b/src/api/client/sync/v3.rs
index 08048902..2ac0bfea 100644
--- a/src/api/client/sync/v3.rs
+++ b/src/api/client/sync/v3.rs
@@ -28,7 +28,7 @@ use ruma::{
 	events::{
 		presence::PresenceEvent,
 		room::member::{MembershipState, RoomMemberEventContent},
-		AnyRawAccountDataEvent, StateEventType,
+		AnyRawAccountDataEvent, AnySyncEphemeralRoomEvent, StateEventType,
 		TimelineEventType::*,
 	},
 	serde::Raw,
@@ -983,20 +983,22 @@ async fn load_joined_room(
 		.collect()
 		.await;
 
-	let mut edus: Vec<_> = services
+	let edus: HashMap<OwnedUserId, Raw<AnySyncEphemeralRoomEvent>> = services
 		.rooms
 		.read_receipt
 		.readreceipts_since(room_id, since)
-		.filter_map(|(read_user, _, v)| async move {
-			(!services
+		.filter_map(|(read_user, _, edu)| async move {
+			services
 				.users
 				.user_is_ignored(&read_user, sender_user)
-				.await)
-				.then_some(v)
+				.await
+				.or_some((read_user, edu))
 		})
 		.collect()
 		.await;
 
+	let mut edus: Vec<Raw<AnySyncEphemeralRoomEvent>> = edus.into_values().collect();
+
 	if services.rooms.typing.last_typing_update(room_id).await? > since {
 		edus.push(
 			serde_json::from_str(