skip redundant receipts on syncs

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-11-04 22:38:12 +00:00
parent 137e3008ea
commit 26c890d5ac

View file

@ -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(