2024-07-27 00:11:41 +00:00
|
|
|
use clap::Subcommand;
|
|
|
|
use conduit::Result;
|
|
|
|
use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName, UserId};
|
2024-06-07 19:47:07 -04:00
|
|
|
|
2024-07-27 00:11:41 +00:00
|
|
|
use crate::Command;
|
|
|
|
|
|
|
|
#[derive(Debug, Subcommand)]
|
|
|
|
pub(crate) enum RoomStateCacheCommand {
|
|
|
|
ServerInRoom {
|
|
|
|
server: Box<ServerName>,
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomServers {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
ServerRooms {
|
|
|
|
server: Box<ServerName>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomMembers {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
LocalUsersInRoom {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
ActiveLocalUsersInRoom {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomJoinedCount {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomInvitedCount {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomUserOnceJoined {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomMembersInvited {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
GetInviteCount {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
GetLeftCount {
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomsJoined {
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomsLeft {
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
RoomsInvited {
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
},
|
|
|
|
|
|
|
|
InviteState {
|
|
|
|
user_id: Box<UserId>,
|
|
|
|
room_id: Box<RoomId>,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
pub(super) async fn process(
|
|
|
|
subcommand: RoomStateCacheCommand, context: &Command<'_>,
|
|
|
|
) -> Result<RoomMessageEventContent> {
|
|
|
|
let services = context.services;
|
2024-06-07 19:47:07 -04:00
|
|
|
|
|
|
|
match subcommand {
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::ServerInRoom {
|
2024-06-08 13:49:39 -04:00
|
|
|
server,
|
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let result = services.rooms.state_cache.server_in_room(&server, &room_id);
|
2024-06-08 13:49:39 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{result:#?}\n```"
|
|
|
|
)))
|
2024-06-08 13:49:39 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomServers {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.room_servers(&room_id).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::ServerRooms {
|
2024-06-07 19:47:07 -04:00
|
|
|
server,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.server_rooms(&server).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomMembers {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.room_members(&room_id).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::LocalUsersInRoom {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Vec<_> = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.local_users_in_room(&room_id)
|
|
|
|
.collect();
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::ActiveLocalUsersInRoom {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Vec<_> = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.active_local_users_in_room(&room_id)
|
|
|
|
.collect();
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomJoinedCount {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results = services.rooms.state_cache.room_joined_count(&room_id);
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomInvitedCount {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results = services.rooms.state_cache.room_invited_count(&room_id);
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomUserOnceJoined {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.room_useroncejoined(&room_id)
|
|
|
|
.collect();
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomMembersInvited {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.room_members_invited(&room_id)
|
|
|
|
.collect();
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::GetInviteCount {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
user_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.get_invite_count(&room_id, &user_id);
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::GetLeftCount {
|
2024-06-07 19:47:07 -04:00
|
|
|
room_id,
|
|
|
|
user_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results = services
|
2024-06-07 19:47:07 -04:00
|
|
|
.rooms
|
|
|
|
.state_cache
|
|
|
|
.get_left_count(&room_id, &user_id);
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomsJoined {
|
2024-06-07 19:47:07 -04:00
|
|
|
user_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.rooms_joined(&user_id).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomsInvited {
|
2024-06-07 19:47:07 -04:00
|
|
|
user_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.rooms_invited(&user_id).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::RoomsLeft {
|
2024-06-07 19:47:07 -04:00
|
|
|
user_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results: Result<Vec<_>> = services.rooms.state_cache.rooms_left(&user_id).collect();
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
2024-07-27 00:11:41 +00:00
|
|
|
RoomStateCacheCommand::InviteState {
|
2024-06-07 19:47:07 -04:00
|
|
|
user_id,
|
|
|
|
room_id,
|
|
|
|
} => {
|
|
|
|
let timer = tokio::time::Instant::now();
|
2024-07-27 00:11:41 +00:00
|
|
|
let results = services.rooms.state_cache.invite_state(&user_id, &room_id);
|
2024-06-07 19:47:07 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
)))
|
2024-06-07 19:47:07 -04:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|