From 7b691962a0b23592e49247bce08a6ce25fe2da5d Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 19 Nov 2025 16:34:00 +0100 Subject: [PATCH] Can get sync thread status --- .../matrix_sync_thread_controller.rs | 20 +++++++++++++++++++ .../src/extractors/matrix_client_extractor.rs | 10 +++++++--- matrixgw_backend/src/main.rs | 4 ++++ .../src/matrix_connection/matrix_manager.rs | 7 +++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/matrixgw_backend/src/controllers/matrix_sync_thread_controller.rs b/matrixgw_backend/src/controllers/matrix_sync_thread_controller.rs index ee76bfc..a071701 100644 --- a/matrixgw_backend/src/controllers/matrix_sync_thread_controller.rs +++ b/matrixgw_backend/src/controllers/matrix_sync_thread_controller.rs @@ -37,3 +37,23 @@ pub async fn stop_sync( } } } + +#[derive(serde::Serialize)] +struct GetSyncStatusResponse { + started: bool, +} + +/// Get sync thread status +pub async fn status( + client: MatrixClientExtractor, + manager: web::Data>, +) -> HttpResult { + let started = ractor::call!( + manager.as_ref(), + MatrixManagerMsg::SyncThreadGetStatus, + client.auth.user.email + ) + .expect("RPC to Matrix Manager failed"); + + Ok(HttpResponse::Ok().json(GetSyncStatusResponse { started })) +} diff --git a/matrixgw_backend/src/extractors/matrix_client_extractor.rs b/matrixgw_backend/src/extractors/matrix_client_extractor.rs index 5a25e06..0a80c3e 100644 --- a/matrixgw_backend/src/extractors/matrix_client_extractor.rs +++ b/matrixgw_backend/src/extractors/matrix_client_extractor.rs @@ -39,9 +39,13 @@ impl FromRequest for MatrixClientExtractor { matrix_manager_actor, MatrixManagerMsg::GetClient, auth.user.email.clone() - ) - .expect("Failed to query manager actor!") - .expect("Failed to get client!"); + ); + + let client = match client { + Ok(Ok(client)) => client, + Ok(Err(err)) => panic!("Failed to get client! {err:?}"), + Err(err) => panic!("Failed to query manager actor! {err:#?}"), + }; Ok(Self { auth, client }) }) diff --git a/matrixgw_backend/src/main.rs b/matrixgw_backend/src/main.rs index 72e98d9..f873bf8 100644 --- a/matrixgw_backend/src/main.rs +++ b/matrixgw_backend/src/main.rs @@ -129,6 +129,10 @@ async fn main() -> std::io::Result<()> { "/api/matrix_sync/stop", web::post().to(matrix_sync_thread_controller::stop_sync), ) + .route( + "/api/matrix_sync/status", + web::get().to(matrix_sync_thread_controller::status), + ) }) .workers(4) .bind(&AppConfig::get().listen_address)? diff --git a/matrixgw_backend/src/matrix_connection/matrix_manager.rs b/matrixgw_backend/src/matrix_connection/matrix_manager.rs index da25d39..68415b9 100644 --- a/matrixgw_backend/src/matrix_connection/matrix_manager.rs +++ b/matrixgw_backend/src/matrix_connection/matrix_manager.rs @@ -16,6 +16,7 @@ pub enum MatrixManagerMsg { DisconnectClient(UserEmail), StartSyncThread(UserEmail), StopSyncThread(UserEmail), + SyncThreadGetStatus(UserEmail, RpcReplyPort), SyncThreadTerminated(UserEmail, MatrixSyncTaskID), } @@ -127,6 +128,12 @@ impl Actor for MatrixManagerActor { log::error!("Failed to request sync thread stop: {e}"); } } + MatrixManagerMsg::SyncThreadGetStatus(email, reply) => { + let started = state.running_sync_threads.contains_key(&email); + if let Err(e) = reply.send(started) { + log::error!("Failed to send sync thread status! {e}"); + } + } MatrixManagerMsg::SyncThreadTerminated(email, task_id) => { if state.running_sync_threads.get(&email) == Some(&task_id) { log::info!(