tuwunel_admin/room/directory/
list.rs1use futures::StreamExt;
2use tuwunel_core::{Result, itertools::Itertools};
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 rooms: Vec<_> = self
10 .services
11 .directory
12 .public_rooms()
13 .then(|room_id| get_room_info(self.services, room_id))
14 .collect::<Vec<_>>()
15 .await
16 .into_iter()
17 .sorted_by_key(|r| r.1)
18 .rev()
19 .skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE))
20 .take(PAGE_SIZE)
21 .collect();
22
23 if rooms.is_empty() {
24 self.write_str("No rooms are published.").await?;
25
26 return Ok(());
27 }
28
29 write!(self, "Rooms (page {page}):\n```\n").await?;
30 for (id, members, name) in &rooms {
31 writeln!(self, "{id} | Members: {members} | Name: {name}").await?;
32 }
33 write!(self, "```").await
34}