From 22ef704ac66606ae01fa8e26b2c8fda21e8fda7a Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 25 Jul 2025 13:15:42 +0000 Subject: [PATCH] Fix bug from roomuserid_knockedcount vs. roomid_knockedcount. The use of "count" instead of "sequence" leads to confusion with i.e. counting the elements of a set e.g. Iterator::count(). Signed-off-by: Jason Volk --- src/database/maps.rs | 4 +++ src/service/rooms/state_cache/mod.rs | 35 +++++++++++++++++-------- src/service/rooms/state_cache/update.rs | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) 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)