fix: factory reset process got blocked
This commit is contained in:
parent
f26b7ada50
commit
9ed98614fe
@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
|
||||
use std::{fs, io, path::PathBuf};
|
||||
use tauri::{AppHandle, Manager, Runtime, State};
|
||||
|
||||
use crate::core::utils::extensions::inference_llamacpp_extension::cleanup::cleanup_processes;
|
||||
use crate::core::{mcp::clean_up_mcp_servers, utils::extensions::inference_llamacpp_extension::cleanup::cleanup_processes};
|
||||
|
||||
use super::{server, setup, state::AppState};
|
||||
|
||||
@ -125,6 +125,7 @@ pub fn factory_reset(app_handle: tauri::AppHandle, state: State<'_, AppState>) {
|
||||
log::info!("Factory reset, removing data folder: {:?}", data_folder);
|
||||
|
||||
tauri::async_runtime::block_on(async {
|
||||
clean_up_mcp_servers(state.clone()).await;
|
||||
cleanup_processes(state).await;
|
||||
|
||||
if data_folder.exists() {
|
||||
@ -138,7 +139,7 @@ pub fn factory_reset(app_handle: tauri::AppHandle, state: State<'_, AppState>) {
|
||||
let _ = fs::create_dir_all(&data_folder).map_err(|e| e.to_string());
|
||||
|
||||
// Reset the configuration
|
||||
let mut default_config = AppConfiguration::default();
|
||||
let mut default_config: AppConfiguration = AppConfiguration::default();
|
||||
default_config.data_folder = default_data_folder_path(app_handle.clone());
|
||||
let _ = update_app_configuration(app_handle.clone(), default_config);
|
||||
|
||||
|
||||
@ -751,6 +751,26 @@ pub async fn reset_mcp_restart_count(state: State<'_, AppState>, server_name: St
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn clean_up_mcp_servers(
|
||||
state: State<'_, AppState>,
|
||||
) {
|
||||
log::info!("Cleaning up MCP servers");
|
||||
|
||||
// Stop all running MCP servers
|
||||
let _ = stop_mcp_servers(state.mcp_servers.clone()).await;
|
||||
|
||||
// Clear active servers and restart counts
|
||||
{
|
||||
let mut active_servers = state.mcp_active_servers.lock().await;
|
||||
active_servers.clear();
|
||||
}
|
||||
{
|
||||
let mut restart_counts = state.mcp_restart_counts.lock().await;
|
||||
restart_counts.clear();
|
||||
}
|
||||
log::info!("MCP servers cleaned up successfully");
|
||||
}
|
||||
|
||||
pub async fn stop_mcp_servers(
|
||||
servers_state: Arc<Mutex<HashMap<String, RunningService<RoleClient, ()>>>>,
|
||||
) -> Result<(), String> {
|
||||
|
||||
@ -199,30 +199,6 @@ pub fn setup_mcp(app: &App) {
|
||||
let state = app.state::<AppState>();
|
||||
let servers = state.mcp_servers.clone();
|
||||
let app_handle: tauri::AppHandle = app.handle().clone();
|
||||
// Setup kill-mcp-servers event listener (similar to kill-sidecar)
|
||||
let app_handle_for_kill = app_handle.clone();
|
||||
app_handle.listen("kill-mcp-servers", move |_event| {
|
||||
let app_handle = app_handle_for_kill.clone();
|
||||
tauri::async_runtime::spawn(async move {
|
||||
log::info!("Received kill-mcp-servers event - cleaning up MCP servers");
|
||||
let app_state = app_handle.state::<AppState>();
|
||||
// Stop all running MCP servers
|
||||
if let Err(e) = super::mcp::stop_mcp_servers(app_state.mcp_servers.clone()).await {
|
||||
log::error!("Failed to stop MCP servers: {}", e);
|
||||
return;
|
||||
}
|
||||
// Clear active servers and restart counts
|
||||
{
|
||||
let mut active_servers = app_state.mcp_active_servers.lock().await;
|
||||
active_servers.clear();
|
||||
}
|
||||
{
|
||||
let mut restart_counts = app_state.mcp_restart_counts.lock().await;
|
||||
restart_counts.clear();
|
||||
}
|
||||
log::info!("MCP servers cleaned up successfully");
|
||||
});
|
||||
});
|
||||
tauri::async_runtime::spawn(async move {
|
||||
if let Err(e) = run_mcp_commands(&app_handle, servers).await {
|
||||
log::error!("Failed to run mcp commands: {}", e);
|
||||
|
||||
@ -10,6 +10,8 @@ use std::{collections::HashMap, sync::Arc};
|
||||
use tauri::{Emitter, Manager, RunEvent};
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use crate::core::mcp::clean_up_mcp_servers;
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
let mut builder = tauri::Builder::default();
|
||||
@ -143,10 +145,10 @@ pub fn run() {
|
||||
.on_window_event(|window, event| match event {
|
||||
tauri::WindowEvent::CloseRequested { .. } => {
|
||||
if window.label() == "main" {
|
||||
window.emit("kill-mcp-servers", ()).unwrap();
|
||||
let state = window.app_handle().state::<AppState>();
|
||||
|
||||
tauri::async_runtime::block_on(async {
|
||||
clean_up_mcp_servers(state.clone()).await;
|
||||
cleanup_processes(state).await;
|
||||
});
|
||||
}
|
||||
@ -173,6 +175,7 @@ pub fn run() {
|
||||
}
|
||||
|
||||
// Quick cleanup with shorter timeout
|
||||
clean_up_mcp_servers(state.clone()).await;
|
||||
cleanup_processes(state).await;
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user