diff --git a/src/api/client/sync/v5.rs b/src/api/client/sync/v5.rs index 5c25009e..cb89937c 100644 --- a/src/api/client/sync/v5.rs +++ b/src/api/client/sync/v5.rs @@ -119,14 +119,14 @@ pub(crate) async fn sync_events_v5_route( let all_invited_rooms = services .state_cache - .rooms_invited_state(sender_user) - .map(|r| r.0) + .rooms_invited(sender_user) + .map(ToOwned::to_owned) .collect::>(); let all_knocked_rooms = services .state_cache - .rooms_knocked_state(sender_user) - .map(|r| r.0) + .rooms_knocked(sender_user) + .map(ToOwned::to_owned) .collect::>(); let (all_joined_rooms, all_invited_rooms, all_knocked_rooms) = diff --git a/src/service/deactivate/mod.rs b/src/service/deactivate/mod.rs index 48d7cfb7..60aaefdf 100644 --- a/src/service/deactivate/mod.rs +++ b/src/service/deactivate/mod.rs @@ -123,14 +123,14 @@ impl Service { let rooms_invited = self .services .state_cache - .rooms_invited_state(user_id) - .map(|(r, _)| r); + .rooms_invited(user_id) + .map(ToOwned::to_owned); let rooms_knocked = self .services .state_cache - .rooms_knocked_state(user_id) - .map(|(r, _)| r); + .rooms_knocked(user_id) + .map(ToOwned::to_owned); let all_rooms: Vec<_> = rooms_joined .chain(rooms_invited) diff --git a/src/service/rooms/state_cache/mod.rs b/src/service/rooms/state_cache/mod.rs index 377a94ec..16893f76 100644 --- a/src/service/rooms/state_cache/mod.rs +++ b/src/service/rooms/state_cache/mod.rs @@ -396,6 +396,45 @@ pub fn rooms_joined<'a>( .map(|(_, room_id): (Ignore, &RoomId)| room_id) } +/// Returns an iterator over all rooms a user was invited to. +#[implement(Service)] +#[tracing::instrument(skip(self), level = "debug")] +pub fn rooms_invited<'a>( + &'a self, + user_id: &'a UserId, +) -> impl Stream + Send + 'a { + self.db + .userroomid_invitestate + .keys_raw_prefix(user_id) + .ignore_err() + .map(|(_, room_id): (Ignore, &RoomId)| room_id) +} + +/// Returns an iterator over all rooms a user is currently knocking. +#[implement(Service)] +#[tracing::instrument(skip(self), level = "debug")] +pub fn rooms_knocked<'a>( + &'a self, + user_id: &'a UserId, +) -> impl Stream + Send + 'a { + self.db + .userroomid_knockedstate + .keys_raw_prefix(user_id) + .ignore_err() + .map(|(_, room_id): (Ignore, &RoomId)| room_id) +} + +/// Returns an iterator over all rooms a user left. +#[implement(Service)] +#[tracing::instrument(skip(self), level = "debug")] +pub fn rooms_left<'a>(&'a self, user_id: &'a UserId) -> impl Stream + Send + 'a { + self.db + .userroomid_leftstate + .keys_raw_prefix(user_id) + .ignore_err() + .map(|(_, room_id): (Ignore, &RoomId)| room_id) +} + /// Returns an iterator over all rooms a user was invited to. #[implement(Service)] #[tracing::instrument(skip(self), level = "debug")]