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::{ events::{
presence::PresenceEvent, presence::PresenceEvent,
room::member::{MembershipState, RoomMemberEventContent}, room::member::{MembershipState, RoomMemberEventContent},
AnyRawAccountDataEvent, StateEventType, AnyRawAccountDataEvent, AnySyncEphemeralRoomEvent, StateEventType,
TimelineEventType::*, TimelineEventType::*,
}, },
serde::Raw, serde::Raw,
@ -983,20 +983,22 @@ async fn load_joined_room(
.collect() .collect()
.await; .await;
let mut edus: Vec<_> = services let edus: HashMap<OwnedUserId, Raw<AnySyncEphemeralRoomEvent>> = services
.rooms .rooms
.read_receipt .read_receipt
.readreceipts_since(room_id, since) .readreceipts_since(room_id, since)
.filter_map(|(read_user, _, v)| async move { .filter_map(|(read_user, _, edu)| async move {
(!services services
.users .users
.user_is_ignored(&read_user, sender_user) .user_is_ignored(&read_user, sender_user)
.await) .await
.then_some(v) .or_some((read_user, edu))
}) })
.collect() .collect()
.await; .await;
let mut edus: Vec<Raw<AnySyncEphemeralRoomEvent>> = edus.into_values().collect();
if services.rooms.typing.last_typing_update(room_id).await? > since { if services.rooms.typing.last_typing_update(room_id).await? > since {
edus.push( edus.push(
serde_json::from_str( serde_json::from_str(