Add more optimized iterations for user memberships room_id's.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -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::<Vec<OwnedRoomId>>();
|
||||
|
||||
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::<Vec<OwnedRoomId>>();
|
||||
|
||||
let (all_joined_rooms, all_invited_rooms, all_knocked_rooms) =
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<Item = &RoomId> + 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<Item = &RoomId> + 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<Item = &RoomId> + 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")]
|
||||
|
||||
Reference in New Issue
Block a user