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
|
let all_invited_rooms = services
|
||||||
.state_cache
|
.state_cache
|
||||||
.rooms_invited_state(sender_user)
|
.rooms_invited(sender_user)
|
||||||
.map(|r| r.0)
|
.map(ToOwned::to_owned)
|
||||||
.collect::<Vec<OwnedRoomId>>();
|
.collect::<Vec<OwnedRoomId>>();
|
||||||
|
|
||||||
let all_knocked_rooms = services
|
let all_knocked_rooms = services
|
||||||
.state_cache
|
.state_cache
|
||||||
.rooms_knocked_state(sender_user)
|
.rooms_knocked(sender_user)
|
||||||
.map(|r| r.0)
|
.map(ToOwned::to_owned)
|
||||||
.collect::<Vec<OwnedRoomId>>();
|
.collect::<Vec<OwnedRoomId>>();
|
||||||
|
|
||||||
let (all_joined_rooms, all_invited_rooms, all_knocked_rooms) =
|
let (all_joined_rooms, all_invited_rooms, all_knocked_rooms) =
|
||||||
|
|||||||
@@ -123,14 +123,14 @@ impl Service {
|
|||||||
let rooms_invited = self
|
let rooms_invited = self
|
||||||
.services
|
.services
|
||||||
.state_cache
|
.state_cache
|
||||||
.rooms_invited_state(user_id)
|
.rooms_invited(user_id)
|
||||||
.map(|(r, _)| r);
|
.map(ToOwned::to_owned);
|
||||||
|
|
||||||
let rooms_knocked = self
|
let rooms_knocked = self
|
||||||
.services
|
.services
|
||||||
.state_cache
|
.state_cache
|
||||||
.rooms_knocked_state(user_id)
|
.rooms_knocked(user_id)
|
||||||
.map(|(r, _)| r);
|
.map(ToOwned::to_owned);
|
||||||
|
|
||||||
let all_rooms: Vec<_> = rooms_joined
|
let all_rooms: Vec<_> = rooms_joined
|
||||||
.chain(rooms_invited)
|
.chain(rooms_invited)
|
||||||
|
|||||||
@@ -396,6 +396,45 @@ pub fn rooms_joined<'a>(
|
|||||||
.map(|(_, room_id): (Ignore, &RoomId)| room_id)
|
.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.
|
/// Returns an iterator over all rooms a user was invited to.
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[tracing::instrument(skip(self), level = "debug")]
|
#[tracing::instrument(skip(self), level = "debug")]
|
||||||
|
|||||||
Reference in New Issue
Block a user