add exclude_disabled
and exclude_banned
room list admin cmd arguments
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
0fa6976d86
commit
192c1e08da
2 changed files with 43 additions and 5 deletions
|
@ -16,6 +16,14 @@ pub(super) enum RoomCommand {
|
||||||
/// - List all rooms the server knows about
|
/// - List all rooms the server knows about
|
||||||
List {
|
List {
|
||||||
page: Option<usize>,
|
page: Option<usize>,
|
||||||
|
|
||||||
|
/// Excludes rooms that we have federation disabled with
|
||||||
|
#[arg(long)]
|
||||||
|
exclude_disabled: bool,
|
||||||
|
|
||||||
|
/// Excludes rooms that we have banned
|
||||||
|
#[arg(long)]
|
||||||
|
exclude_banned: bool,
|
||||||
},
|
},
|
||||||
|
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
|
@ -179,6 +187,8 @@ pub(super) async fn process(command: RoomCommand, body: Vec<&str>) -> Result<Roo
|
||||||
|
|
||||||
RoomCommand::List {
|
RoomCommand::List {
|
||||||
page,
|
page,
|
||||||
} => list(body, page).await?,
|
exclude_disabled,
|
||||||
|
exclude_banned,
|
||||||
|
} => list(body, page, exclude_disabled, exclude_banned).await?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,46 @@
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
|
||||||
use ruma::{events::room::message::RoomMessageEventContent, OwnedRoomId};
|
use ruma::events::room::message::RoomMessageEventContent;
|
||||||
|
|
||||||
use crate::{escape_html, get_room_info, handler::PAGE_SIZE, services, Result};
|
use crate::{escape_html, get_room_info, handler::PAGE_SIZE, services, Result};
|
||||||
|
|
||||||
pub(super) async fn list(_body: Vec<&str>, page: Option<usize>) -> Result<RoomMessageEventContent> {
|
pub(super) async fn list(
|
||||||
|
_body: Vec<&str>, page: Option<usize>, exclude_disabled: bool, exclude_banned: bool,
|
||||||
|
) -> Result<RoomMessageEventContent> {
|
||||||
// TODO: i know there's a way to do this with clap, but i can't seem to find it
|
// TODO: i know there's a way to do this with clap, but i can't seem to find it
|
||||||
let page = page.unwrap_or(1);
|
let page = page.unwrap_or(1);
|
||||||
let mut rooms = services()
|
let mut rooms = services()
|
||||||
.rooms
|
.rooms
|
||||||
.metadata
|
.metadata
|
||||||
.iter_ids()
|
.iter_ids()
|
||||||
.filter_map(Result::ok)
|
.filter_map(|room_id| {
|
||||||
.map(|id: OwnedRoomId| get_room_info(&id))
|
room_id
|
||||||
|
.ok()
|
||||||
|
.filter(|room_id| {
|
||||||
|
if exclude_disabled
|
||||||
|
&& services()
|
||||||
|
.rooms
|
||||||
|
.metadata
|
||||||
|
.is_disabled(room_id)
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if exclude_banned
|
||||||
|
&& services()
|
||||||
|
.rooms
|
||||||
|
.metadata
|
||||||
|
.is_banned(room_id)
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
})
|
||||||
|
.map(|room_id| get_room_info(&room_id))
|
||||||
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
rooms.sort_by_key(|r| r.1);
|
rooms.sort_by_key(|r| r.1);
|
||||||
rooms.reverse();
|
rooms.reverse();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue