implement room.ephemeral.(not_)rooms filter on /sync

This commit is contained in:
Benjamin Lee 2024-05-03 17:39:40 -07:00
parent 0aae761da4
commit 0c3d1e5745
No known key found for this signature in database
GPG key ID: FB9624E2885D55A4
2 changed files with 24 additions and 16 deletions

View file

@ -1101,23 +1101,29 @@ async fn load_joined_room(
.map(|(_, pdu)| pdu.to_sync_room_event())
.collect();
let mut edus: Vec<_> = services()
.rooms
.read_receipt
.readreceipts_since(room_id, since)
.filter_map(Result::ok) // Filter out buggy events
.map(|(_, _, v)| v)
.collect();
let edus = if filter.room.ephemeral.room_allowed(room_id) {
let mut edus: Vec<_> = services()
.rooms
.read_receipt
.readreceipts_since(room_id, since)
.filter_map(Result::ok) // Filter out buggy events
.map(|(_, _, v)| v)
.collect();
if services().rooms.typing.last_typing_update(room_id).await? > since {
edus.push(
serde_json::from_str(
&serde_json::to_string(&services().rooms.typing.typings_all(room_id).await?)
.expect("event is valid, we just created it"),
)
.expect("event is valid, we just created it"),
);
}
if services().rooms.typing.last_typing_update(room_id).await? > since {
edus.push(
serde_json::from_str(
&serde_json::to_string(&services().rooms.typing.typings_all(room_id).await?)
.expect("event is valid, we just created it"),
)
.expect("event is valid, we just created it"),
);
}
edus
} else {
vec![]
};
// Save the state after this sync so we can send the correct state diff next
// sync

View file

@ -137,6 +137,7 @@ pub(crate) struct CompiledFilterDefinition<'a> {
pub(crate) struct CompiledRoomFilter<'a> {
rooms: AllowDenyList<'a, RoomId>,
pub(crate) timeline: CompiledRoomEventFilter<'a>,
pub(crate) ephemeral: CompiledRoomEventFilter<'a>,
pub(crate) state: CompiledRoomEventFilter<'a>,
}
@ -168,6 +169,7 @@ impl<'a> TryFrom<&'a RoomFilter> for CompiledRoomFilter<'a> {
// all of the sub-filters
rooms: AllowDenyList::from_slices(source.rooms.as_deref(), &source.not_rooms),
timeline: (&source.timeline).try_into()?,
ephemeral: (&source.ephemeral).try_into()?,
state: (&source.state).try_into()?,
})
}