diff --git a/src/service/rooms/directory/mod.rs b/src/service/rooms/directory/mod.rs index f366ffe2..63ed3519 100644 --- a/src/service/rooms/directory/mod.rs +++ b/src/service/rooms/directory/mod.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use conduit::{implement, utils::stream::TryIgnore, Result}; use database::Map; use futures::Stream; -use ruma::RoomId; +use ruma::{api::client::room::Visibility, RoomId}; pub struct Service { db: Data, @@ -32,7 +32,16 @@ pub fn set_public(&self, room_id: &RoomId) { self.db.publicroomids.insert(room_i pub fn set_not_public(&self, room_id: &RoomId) { self.db.publicroomids.remove(room_id); } #[implement(Service)] -pub async fn is_public_room(&self, room_id: &RoomId) -> bool { self.db.publicroomids.get(room_id).await.is_ok() } +pub fn public_rooms(&self) -> impl Stream + Send { self.db.publicroomids.keys().ignore_err() } #[implement(Service)] -pub fn public_rooms(&self) -> impl Stream + Send { self.db.publicroomids.keys().ignore_err() } +pub async fn is_public_room(&self, room_id: &RoomId) -> bool { self.visibility(room_id).await == Visibility::Public } + +#[implement(Service)] +pub async fn visibility(&self, room_id: &RoomId) -> Visibility { + if self.db.publicroomids.get(room_id).await.is_ok() { + Visibility::Public + } else { + Visibility::Private + } +}