Skip to content

Commit e6aef7b

Browse files
donjuanplatinumjevolk
authored andcommitted
add delete-rooms admin command
1 parent ddb42fe commit e6aef7b

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/admin/room/commands.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,52 @@ pub(super) async fn room_prune_empty(&self, force: bool) -> Result {
132132

133133
Ok(())
134134
}
135+
136+
#[admin_command]
137+
pub(super) async fn room_delete_rooms(
138+
&self,
139+
page: Option<usize>,
140+
room_index: Vec<usize>,
141+
force: bool,
142+
exclude_disabled: bool,
143+
exclude_banned: bool,
144+
) -> Result {
145+
let page = page.unwrap_or(1);
146+
let mut rooms = self
147+
.services
148+
.metadata
149+
.iter_ids()
150+
.filter_map(async |room_id| {
151+
(!exclude_disabled || !self.services.metadata.is_disabled(room_id).await)
152+
.then_some(room_id)
153+
})
154+
.filter_map(async |room_id| {
155+
(!exclude_banned || !self.services.metadata.is_banned(room_id).await)
156+
.then_some(room_id)
157+
})
158+
.then(|room_id| get_room_info(self.services, room_id))
159+
.collect::<Vec<_>>()
160+
.await;
161+
162+
rooms.sort_by_key(|r| r.1);
163+
rooms.reverse();
164+
let rooms = rooms
165+
.into_iter()
166+
.skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE))
167+
.take(PAGE_SIZE)
168+
.collect::<Vec<_>>();
169+
// get room_id from room_index
170+
let rooms = room_index
171+
.iter()
172+
.filter_map(|i| {
173+
i.checked_sub(1)
174+
.and_then(|idx| rooms.get(idx).cloned())
175+
})
176+
.collect::<Vec<_>>();
177+
// call the delete_room function for each room
178+
for room in rooms {
179+
self.room_delete(room.0, force).await?;
180+
}
181+
182+
Ok(())
183+
}

src/admin/room/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,21 @@ pub(super) enum RoomCommand {
6969
#[arg(short, long)]
7070
force: bool,
7171
},
72+
73+
/// - Delete rooms
74+
DeleteRooms {
75+
#[arg(long)]
76+
page: Option<usize>,
77+
78+
room_index: Vec<usize>,
79+
80+
#[arg(short, long)]
81+
force: bool,
82+
83+
#[arg(long)]
84+
exclude_disabled: bool,
85+
86+
#[arg(long)]
87+
exclude_banned: bool,
88+
},
7289
}

0 commit comments

Comments
 (0)