From 26c890d5ac18adf98109b4663c9eecdc289badef Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 4 Nov 2024 22:38:12 +0000 Subject: [PATCH] skip redundant receipts on syncs Signed-off-by: Jason Volk --- 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> = 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> = edus.into_values().collect(); + if services.rooms.typing.last_typing_update(room_id).await? > since { edus.push( serde_json::from_str(