diff --git a/src-tauri/src/cmd/service.rs b/src-tauri/src/cmd/service.rs index c0f5b2fc..7326986e 100644 --- a/src-tauri/src/cmd/service.rs +++ b/src-tauri/src/cmd/service.rs @@ -3,13 +3,15 @@ use crate::{ core::{service, CoreManager}, utils::i18n::t, }; +use anyhow::Result; -async fn execute_service_operation( - service_op: impl std::future::Future>, - op_type: &str, -) -> CmdResult { - if service_op.await.is_err() { - let emsg = format!("{} {} failed", op_type, "Service"); +async fn execute_service_operation_sync(service_op: F, op_type: &str) -> CmdResult +where + F: FnOnce() -> Result<(), E>, + E: ToString + std::fmt::Debug, +{ + if let Err(e) = service_op() { + let emsg = format!("{} {} failed: {}", op_type, "Service", e.to_string()); return Err(t(emsg.as_str())); } if CoreManager::global().restart_core().await.is_err() { @@ -21,22 +23,22 @@ async fn execute_service_operation( #[tauri::command] pub async fn install_service() -> CmdResult { - execute_service_operation(service::install_service(), "Install").await + execute_service_operation_sync(service::install_service, "Install").await } #[tauri::command] pub async fn uninstall_service() -> CmdResult { - execute_service_operation(service::uninstall_service(), "Uninstall").await + execute_service_operation_sync(service::uninstall_service, "Uninstall").await } #[tauri::command] pub async fn reinstall_service() -> CmdResult { - execute_service_operation(service::reinstall_service(), "Reinstall").await + execute_service_operation_sync(service::reinstall_service, "Reinstall").await } #[tauri::command] pub async fn repair_service() -> CmdResult { - execute_service_operation(service::force_reinstall_service(), "Repair").await + execute_service_operation_sync(service::force_reinstall_service, "Repair").await } #[tauri::command] diff --git a/src-tauri/src/cmd/uwp.rs b/src-tauri/src/cmd/uwp.rs index 28b88bd4..d6b98655 100644 --- a/src-tauri/src/cmd/uwp.rs +++ b/src-tauri/src/cmd/uwp.rs @@ -16,7 +16,7 @@ mod platform { mod platform { use super::CmdResult; - pub async fn invoke_uwp_tool() -> CmdResult { + pub fn invoke_uwp_tool() -> CmdResult { Ok(()) } } @@ -24,5 +24,5 @@ mod platform { /// Command exposed to Tauri #[tauri::command] pub async fn invoke_uwp_tool() -> CmdResult { - platform::invoke_uwp_tool().await + platform::invoke_uwp_tool() } diff --git a/src-tauri/src/config/config.rs b/src-tauri/src/config/config.rs index 19cf1524..f40ec737 100644 --- a/src-tauri/src/config/config.rs +++ b/src-tauri/src/config/config.rs @@ -96,8 +96,7 @@ impl Config { error_msg ); CoreManager::global() - .use_default_config("config_validate::boot_error", &error_msg) - .await?; + .use_default_config("config_validate::boot_error", &error_msg)?; Some(("config_validate::boot_error", error_msg)) } else { logging!(info, Type::Config, true, "配置验证成功"); @@ -107,16 +106,13 @@ impl Config { Err(err) => { logging!(warn, Type::Config, true, "验证进程执行失败: {}", err); CoreManager::global() - .use_default_config("config_validate::process_terminated", "") - .await?; + .use_default_config("config_validate::process_terminated", "")?; Some(("config_validate::process_terminated", String::new())) } } } else { logging!(warn, Type::Config, true, "生成配置文件失败,使用默认配置"); - CoreManager::global() - .use_default_config("config_validate::error", "") - .await?; + CoreManager::global().use_default_config("config_validate::error", "")?; Some(("config_validate::error", String::new())) }; diff --git a/src-tauri/src/core/core.rs b/src-tauri/src/core/core.rs index 50717a68..2af1c1d8 100644 --- a/src-tauri/src/core/core.rs +++ b/src-tauri/src/core/core.rs @@ -135,7 +135,7 @@ impl CoreManager { Ok(false) } /// 使用默认配置 - pub async fn use_default_config(&self, msg_type: &str, msg_content: &str) -> Result<()> { + pub fn use_default_config(&self, msg_type: &str, msg_content: &str) -> Result<()> { let runtime_path = dirs::app_home_dir()?.join(RUNTIME_CONFIG); *Config::runtime().draft_mut() = Box::new(IRuntime { config: Some(Config::clash().latest_ref().0.clone()), @@ -185,7 +185,7 @@ impl CoreManager { "检测到Merge文件,仅进行语法检查: {}", config_path ); - return self.validate_file_syntax(config_path).await; + return self.validate_file_syntax(config_path); } // 检查是否为脚本文件 @@ -217,7 +217,7 @@ impl CoreManager { "检测到脚本文件,使用JavaScript验证: {}", config_path ); - return self.validate_script_file(config_path).await; + return self.validate_script_file(config_path); } // 对YAML配置文件使用Clash内核验证 @@ -301,7 +301,7 @@ impl CoreManager { } } /// 只进行文件语法检查,不进行完整验证 - async fn validate_file_syntax(&self, config_path: &str) -> Result<(bool, String)> { + fn validate_file_syntax(&self, config_path: &str) -> Result<(bool, String)> { logging!(info, Type::Config, true, "开始检查文件: {}", config_path); // 读取文件内容 @@ -329,7 +329,7 @@ impl CoreManager { } } /// 验证脚本文件语法 - async fn validate_script_file(&self, path: &str) -> Result<(bool, String)> { + fn validate_script_file(&self, path: &str) -> Result<(bool, String)> { // 读取脚本内容 let content = match std::fs::read_to_string(path) { Ok(content) => content, @@ -843,7 +843,7 @@ impl CoreManager { async fn attempt_service_init(&self) -> Result<()> { if service::check_service_needs_reinstall().await { logging!(info, Type::Core, true, "服务版本不匹配或状态异常,执行重装"); - if let Err(e) = service::reinstall_service().await { + if let Err(e) = service::reinstall_service() { logging!( warn, Type::Core, @@ -960,7 +960,7 @@ impl CoreManager { true, "无服务安装记录 (首次运行或状态重置),尝试安装服务" ); - match service::install_service().await { + match service::install_service() { Ok(_) => { logging!(info, Type::Core, true, "服务安装成功(首次尝试)"); let mut new_state = service::ServiceState::default(); @@ -1065,7 +1065,7 @@ impl CoreManager { pub async fn start_core(&self) -> Result<()> { if service::is_service_available().await.is_ok() { if service::check_service_needs_reinstall().await { - service::reinstall_service().await?; + service::reinstall_service()?; } logging!(info, Type::Core, true, "服务可用,使用服务模式启动"); self.start_core_by_service().await?; diff --git a/src-tauri/src/core/event_driven_proxy.rs b/src-tauri/src/core/event_driven_proxy.rs index ff1751dd..af416e72 100644 --- a/src-tauri/src/core/event_driven_proxy.rs +++ b/src-tauri/src/core/event_driven_proxy.rs @@ -218,7 +218,7 @@ impl EventDrivenProxyManager { Self::enable_system_proxy(state).await; } ProxyEvent::DisableProxy => { - Self::disable_system_proxy(state).await; + Self::disable_system_proxy(state); } ProxyEvent::SwitchToPac => { Self::switch_proxy_mode(state, true).await; @@ -307,7 +307,7 @@ impl EventDrivenProxyManager { if !current.enable || current.url != expected.url { log::info!(target: "app", "PAC代理设置异常,正在恢复..."); - Self::restore_pac_proxy(&expected.url).await; + Self::restore_pac_proxy(&expected.url); sleep(Duration::from_millis(500)).await; let restored = Self::get_auto_proxy_with_timeout().await; @@ -329,7 +329,7 @@ impl EventDrivenProxyManager { if !current.enable || current.host != expected.host || current.port != expected.port { log::info!(target: "app", "系统代理设置异常,正在恢复..."); - Self::restore_sys_proxy(&expected).await; + Self::restore_sys_proxy(&expected); sleep(Duration::from_millis(500)).await; let restored = Self::get_sys_proxy_with_timeout().await; @@ -350,16 +350,16 @@ impl EventDrivenProxyManager { if pac_enabled { let expected = Self::get_expected_pac_config(); - Self::restore_pac_proxy(&expected.url).await; + Self::restore_pac_proxy(&expected.url); } else { let expected = Self::get_expected_sys_proxy(); - Self::restore_sys_proxy(&expected).await; + Self::restore_sys_proxy(&expected); } Self::check_and_restore_proxy(state).await; } - async fn disable_system_proxy(_state: &Arc>) { + fn disable_system_proxy(_state: &Arc>) { log::info!(target: "app", "禁用系统代理"); #[cfg(not(target_os = "windows"))] @@ -380,13 +380,13 @@ impl EventDrivenProxyManager { logging_error!(Type::System, true, disabled_sys.set_system_proxy()); let expected = Self::get_expected_pac_config(); - Self::restore_pac_proxy(&expected.url).await; + Self::restore_pac_proxy(&expected.url); } else { let disabled_auto = Autoproxy::default(); logging_error!(Type::System, true, disabled_auto.set_auto_proxy()); let expected = Self::get_expected_sys_proxy(); - Self::restore_sys_proxy(&expected).await; + Self::restore_sys_proxy(&expected); } Self::update_state_timestamp(state, |s| s.pac_enabled = to_pac); @@ -506,7 +506,7 @@ impl EventDrivenProxyManager { } } - async fn restore_pac_proxy(expected_url: &str) { + fn restore_pac_proxy(expected_url: &str) { #[cfg(not(target_os = "windows"))] { let new_autoproxy = Autoproxy { @@ -522,7 +522,7 @@ impl EventDrivenProxyManager { } } - async fn restore_sys_proxy(expected: &Sysproxy) { + fn restore_sys_proxy(expected: &Sysproxy) { #[cfg(not(target_os = "windows"))] { logging_error!(Type::System, true, expected.set_system_proxy()); diff --git a/src-tauri/src/core/service.rs b/src-tauri/src/core/service.rs index 9539ed1c..1940de4d 100644 --- a/src-tauri/src/core/service.rs +++ b/src-tauri/src/core/service.rs @@ -112,7 +112,7 @@ pub struct JsonResponse { } #[cfg(target_os = "windows")] -pub async fn uninstall_service() -> Result<()> { +pub fn uninstall_service() -> Result<()> { logging!(info, Type::Service, true, "uninstall service"); use deelevate::{PrivilegeLevel, Token}; @@ -146,7 +146,7 @@ pub async fn uninstall_service() -> Result<()> { } #[cfg(target_os = "windows")] -pub async fn install_service() -> Result<()> { +pub fn install_service() -> Result<()> { logging!(info, Type::Service, true, "install service"); use deelevate::{PrivilegeLevel, Token}; @@ -198,7 +198,7 @@ pub async fn reinstall_service() -> Result<()> { } // 先卸载服务 - if let Err(err) = uninstall_service().await { + if let Err(err) = uninstall_service() { logging!( warn, Type::Service, @@ -209,7 +209,7 @@ pub async fn reinstall_service() -> Result<()> { } // 再安装服务 - match install_service().await { + match install_service() { Ok(_) => { // 记录安装信息并保存 service_state.record_install(); @@ -228,7 +228,7 @@ pub async fn reinstall_service() -> Result<()> { } #[cfg(target_os = "linux")] -pub async fn uninstall_service() -> Result<()> { +pub fn uninstall_service() -> Result<()> { logging!(info, Type::Service, true, "uninstall service"); use users::get_effective_uid; @@ -268,7 +268,7 @@ pub async fn uninstall_service() -> Result<()> { } #[cfg(target_os = "linux")] -pub async fn install_service() -> Result<()> { +pub fn install_service() -> Result<()> { logging!(info, Type::Service, true, "install service"); use users::get_effective_uid; @@ -326,7 +326,7 @@ pub async fn reinstall_service() -> Result<()> { } // 先卸载服务 - if let Err(err) = uninstall_service().await { + if let Err(err) = uninstall_service() { logging!( warn, Type::Service, @@ -337,7 +337,7 @@ pub async fn reinstall_service() -> Result<()> { } // 再安装服务 - match install_service().await { + match install_service() { Ok(_) => { // 记录安装信息并保存 service_state.record_install(); @@ -356,7 +356,7 @@ pub async fn reinstall_service() -> Result<()> { } #[cfg(target_os = "macos")] -pub async fn uninstall_service() -> Result<()> { +pub fn uninstall_service() -> Result<()> { use crate::utils::i18n::t; logging!(info, Type::Service, true, "uninstall service"); @@ -392,7 +392,7 @@ pub async fn uninstall_service() -> Result<()> { } #[cfg(target_os = "macos")] -pub async fn install_service() -> Result<()> { +pub fn install_service() -> Result<()> { use crate::utils::i18n::t; logging!(info, Type::Service, true, "install service"); @@ -428,7 +428,7 @@ pub async fn install_service() -> Result<()> { } #[cfg(target_os = "macos")] -pub async fn reinstall_service() -> Result<()> { +pub fn reinstall_service() -> Result<()> { logging!(info, Type::Service, true, "reinstall service"); // 获取当前服务状态 @@ -446,7 +446,7 @@ pub async fn reinstall_service() -> Result<()> { } // 先卸载服务 - if let Err(err) = uninstall_service().await { + if let Err(err) = uninstall_service() { logging!( warn, Type::Service, @@ -457,7 +457,7 @@ pub async fn reinstall_service() -> Result<()> { } // 再安装服务 - match install_service().await { + match install_service() { Ok(_) => { // 记录安装信息并保存 service_state.record_install(); @@ -862,11 +862,9 @@ pub(super) async fn run_core_by_service(config_file: &PathBuf) -> Result<()> { } log::info!(target: "app", "开始重装服务"); - if let Err(err) = reinstall_service().await { + if let Err(err) = reinstall_service() { log::warn!(target: "app", "服务重装失败: {err}"); - - log::info!(target: "app", "尝试使用现有服务"); - return start_with_existing_service(config_file).await; + bail!("Failed to reinstall service: {}", err); } log::info!(target: "app", "服务重装成功,尝试启动"); @@ -890,7 +888,7 @@ pub(super) async fn run_core_by_service(config_file: &PathBuf) -> Result<()> { if check_service_needs_reinstall().await { log::info!(target: "app", "服务需要重装"); - if let Err(err) = reinstall_service().await { + if let Err(err) = reinstall_service() { log::warn!(target: "app", "服务重装失败: {err}"); bail!("Failed to reinstall service: {}", err); } @@ -970,7 +968,7 @@ pub async fn is_service_available() -> Result<()> { } /// 强制重装服务(UI修复按钮) -pub async fn force_reinstall_service() -> Result<()> { +pub fn force_reinstall_service() -> Result<()> { log::info!(target: "app", "用户请求强制重装服务"); let service_state = ServiceState::default(); @@ -978,7 +976,7 @@ pub async fn force_reinstall_service() -> Result<()> { log::info!(target: "app", "已重置服务状态,开始执行重装"); - match reinstall_service().await { + match reinstall_service() { Ok(()) => { log::info!(target: "app", "服务重装成功"); Ok(()) diff --git a/src-tauri/src/ipc/logs.rs b/src-tauri/src/ipc/logs.rs index e632a1cc..ecc5bf1c 100644 --- a/src-tauri/src/ipc/logs.rs +++ b/src-tauri/src/ipc/logs.rs @@ -157,7 +157,7 @@ impl LogsMonitor { let task = tokio::spawn(async move { loop { // Get fresh IPC path and client for each connection attempt - let (_ipc_path_buf, client) = match Self::create_ipc_client().await { + let (_ipc_path_buf, client) = match Self::create_ipc_client() { Ok((path, client)) => (path, client), Err(e) => { logging!(error, Type::Ipc, true, "Failed to create IPC client: {}", e); @@ -230,7 +230,7 @@ impl LogsMonitor { } } - async fn create_ipc_client() -> Result< + fn create_ipc_client() -> Result< (std::path::PathBuf, kode_bridge::IpcStreamClient), Box, > {