diff --git a/src/database/maps.rs b/src/database/maps.rs index fbd86a0a..e40a81cd 100644 --- a/src/database/maps.rs +++ b/src/database/maps.rs @@ -141,6 +141,10 @@ pub(super) static MAPS: &[Descriptor] = &[ name: "referencedevents", ..descriptor::RANDOM }, + Descriptor { + name: "roomid_knockedcount", + ..descriptor::RANDOM_SMALL + }, Descriptor { name: "roomid_invitedcount", ..descriptor::RANDOM_SMALL diff --git a/src/service/rooms/state_cache/mod.rs b/src/service/rooms/state_cache/mod.rs index 3d502b28..5de4d47f 100644 --- a/src/service/rooms/state_cache/mod.rs +++ b/src/service/rooms/state_cache/mod.rs @@ -38,6 +38,7 @@ struct Services { } struct Data { + roomid_knockedcount: Arc, roomid_invitedcount: Arc, roomid_inviteviaservers: Arc, roomid_joinedcount: Arc, @@ -72,6 +73,7 @@ impl crate::Service for Service { users: args.depend::("users"), }, db: Data { + roomid_knockedcount: args.db["roomid_knockedcount"].clone(), roomid_invitedcount: args.db["roomid_invitedcount"].clone(), roomid_inviteviaservers: args.db["roomid_inviteviaservers"].clone(), roomid_joinedcount: args.db["roomid_joinedcount"].clone(), @@ -249,6 +251,28 @@ pub async fn room_joined_count(&self, room_id: &RoomId) -> Result { .deserialized() } +/// Returns the number of users which are currently invited to a room +#[implement(Service)] +#[tracing::instrument(skip(self), level = "trace")] +pub async fn room_invited_count(&self, room_id: &RoomId) -> Result { + self.db + .roomid_invitedcount + .get(room_id) + .await + .deserialized() +} + +/// Returns the number of users which are currently knocking upon a room +#[implement(Service)] +#[tracing::instrument(skip(self), level = "trace")] +pub async fn room_knocked_count(&self, room_id: &RoomId) -> Result { + self.db + .roomid_knockedcount + .get(room_id) + .await + .deserialized() +} + #[implement(Service)] #[tracing::instrument(skip(self), level = "debug")] /// Returns an iterator of all our local users in the room, even if they're @@ -273,17 +297,6 @@ pub fn active_local_users_in_room<'a>( .filter(|user| self.services.users.is_active(user)) } -/// Returns the number of users which are currently invited to a room -#[implement(Service)] -#[tracing::instrument(skip(self), level = "trace")] -pub async fn room_invited_count(&self, room_id: &RoomId) -> Result { - self.db - .roomid_invitedcount - .get(room_id) - .await - .deserialized() -} - /// Returns an iterator over all User IDs who ever joined a room. #[implement(Service)] #[tracing::instrument(skip(self), level = "debug")] diff --git a/src/service/rooms/state_cache/update.rs b/src/service/rooms/state_cache/update.rs index a811f4d2..2c52af42 100644 --- a/src/service/rooms/state_cache/update.rs +++ b/src/service/rooms/state_cache/update.rs @@ -198,7 +198,7 @@ pub async fn update_joined_count(&self, room_id: &RoomId) { .roomid_invitedcount .raw_put(room_id, invitedcount); self.db - .roomuserid_knockedcount + .roomid_knockedcount .raw_put(room_id, knockedcount); self.room_servers(room_id)