Skip to main content

tuwunel_admin/room/directory/
list.rs

1use futures::StreamExt;
2use tuwunel_core::Result;
3
4use crate::{PAGE_SIZE, admin_command, get_room_info};
5
6#[admin_command]
7pub(super) async fn directory_list(&self, page: Option<usize>) -> Result {
8	let page = page.unwrap_or(1);
9	let mut rooms: Vec<_> = self
10		.services
11		.directory
12		.public_rooms()
13		.then(|room_id| get_room_info(self.services, room_id))
14		.collect()
15		.await;
16
17	rooms.sort_by_key(|r| r.1);
18	rooms.reverse();
19
20	let rooms: Vec<_> = rooms
21		.into_iter()
22		.skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE))
23		.take(PAGE_SIZE)
24		.collect();
25
26	if rooms.is_empty() {
27		self.write_str("No rooms are published.").await?;
28
29		return Ok(());
30	}
31
32	write!(self, "Rooms (page {page}):\n```\n").await?;
33	for (id, members, name) in &rooms {
34		writeln!(self, "{id} | Members: {members} | Name: {name}").await?;
35	}
36	write!(self, "```").await
37}