server down handling
This commit is contained in:
@@ -3,7 +3,7 @@ use tracing::{error, info};
|
||||
|
||||
use crate::get_app_handle;
|
||||
|
||||
static APP_MENU_WINDOW_LABEL: &str = "app_menu";
|
||||
pub static APP_MENU_WINDOW_LABEL: &str = "app_menu";
|
||||
|
||||
pub fn open_app_menu_window() {
|
||||
let app_handle = get_app_handle();
|
||||
|
||||
@@ -1,13 +1,29 @@
|
||||
use crate::get_app_handle;
|
||||
use tauri::Manager;
|
||||
use tauri::{Emitter, Manager};
|
||||
use tauri_plugin_dialog::{DialogExt, MessageDialogBuilder, MessageDialogKind};
|
||||
use tauri_plugin_positioner::WindowExt;
|
||||
use tracing::{error, info};
|
||||
|
||||
pub static HEALTH_MANAGER_WINDOW_LABEL: &str = "health_manager";
|
||||
pub static HEALTH_MANAGER_EVENT: &str = "health-error";
|
||||
|
||||
pub fn open_health_manager_window() {
|
||||
fn close_window_if_exists(label: &str) {
|
||||
let app_handle = get_app_handle();
|
||||
if let Some(window) = app_handle.get_window(label) {
|
||||
if let Err(e) = window.close() {
|
||||
error!("Failed to close {} window: {}", label, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Closes primary UI windows and shows the health manager with an optional error message.
|
||||
pub fn show_health_manager_with_error(error_message: Option<String>) {
|
||||
let app_handle = get_app_handle();
|
||||
// Ensure other windows are closed before showing health manager
|
||||
close_window_if_exists(crate::services::scene::SPLASH_WINDOW_LABEL);
|
||||
close_window_if_exists(crate::services::scene::SCENE_WINDOW_LABEL);
|
||||
close_window_if_exists(crate::services::app_menu::APP_MENU_WINDOW_LABEL);
|
||||
|
||||
let existing_webview_window = app_handle.get_window(HEALTH_MANAGER_WINDOW_LABEL);
|
||||
|
||||
if let Some(window) = existing_webview_window {
|
||||
@@ -21,6 +37,12 @@ pub fn open_health_manager_window() {
|
||||
.kind(MessageDialogKind::Error)
|
||||
.show(|_| {});
|
||||
}
|
||||
|
||||
if let Some(message) = error_message {
|
||||
if let Err(e) = window.emit(HEALTH_MANAGER_EVENT, message.clone()) {
|
||||
error!("Failed to emit health error event: {}", e);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -58,6 +80,12 @@ pub fn open_health_manager_window() {
|
||||
error!("Failed to move health manager window to center: {}", e);
|
||||
}
|
||||
|
||||
if let Some(message) = error_message {
|
||||
if let Err(e) = webview_window.emit(HEALTH_MANAGER_EVENT, message.clone()) {
|
||||
error!("Failed to emit health error event: {}", e);
|
||||
}
|
||||
}
|
||||
|
||||
if let Err(e) = webview_window.show() {
|
||||
error!("Failed to show health manager window: {}", e);
|
||||
MessageDialogBuilder::new(
|
||||
|
||||
@@ -7,6 +7,8 @@ use crate::{
|
||||
get_app_handle, lock_r, lock_w,
|
||||
models::app_config::AppConfig,
|
||||
services::cursor::{normalized_to_absolute, CursorPosition, CursorPositions},
|
||||
services::health_manager::{close_health_manager_window, show_health_manager_with_error},
|
||||
services::scene::open_scene_window,
|
||||
state::{init_app_data_scoped, AppDataRefreshScope, FDOLL},
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
@@ -74,6 +76,10 @@ fn on_initialized(payload: Payload, _socket: RawClient) {
|
||||
if let Some(clients) = guard.clients.as_mut() {
|
||||
clients.is_ws_initialized = true;
|
||||
}
|
||||
|
||||
// Connection restored: close health manager and reopen scene
|
||||
close_health_manager_window();
|
||||
open_scene_window();
|
||||
} else {
|
||||
info!("Received initialized event with empty payload");
|
||||
}
|
||||
@@ -385,8 +391,20 @@ pub async fn report_cursor_data(cursor_position: CursorPosition) {
|
||||
.await
|
||||
{
|
||||
Ok(Ok(_)) => (),
|
||||
Ok(Err(e)) => error!("Failed to emit cursor report: {}", e),
|
||||
Err(e) => error!("Failed to execute blocking task for cursor report: {}", e),
|
||||
Ok(Err(e)) => {
|
||||
error!("Failed to emit cursor report: {}", e);
|
||||
show_health_manager_with_error(Some(format!(
|
||||
"WebSocket emit failed: {}",
|
||||
e
|
||||
)));
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Failed to execute blocking task for cursor report: {}", e);
|
||||
show_health_manager_with_error(Some(format!(
|
||||
"WebSocket task failed: {}",
|
||||
e
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user