refactor: remove unnecessary async/await from service and proxy functions

This commit is contained in:
Tunglies
2025-08-17 13:10:00 +08:00
Unverified
parent b8a7b346d5
commit 7bb584b925
7 changed files with 55 additions and 59 deletions

View File

@@ -3,13 +3,15 @@ use crate::{
core::{service, CoreManager}, core::{service, CoreManager},
utils::i18n::t, utils::i18n::t,
}; };
use anyhow::Result;
async fn execute_service_operation( async fn execute_service_operation_sync<F, E>(service_op: F, op_type: &str) -> CmdResult
service_op: impl std::future::Future<Output = Result<(), impl ToString + std::fmt::Debug>>, where
op_type: &str, F: FnOnce() -> Result<(), E>,
) -> CmdResult { E: ToString + std::fmt::Debug,
if service_op.await.is_err() { {
let emsg = format!("{} {} failed", op_type, "Service"); if let Err(e) = service_op() {
let emsg = format!("{} {} failed: {}", op_type, "Service", e.to_string());
return Err(t(emsg.as_str())); return Err(t(emsg.as_str()));
} }
if CoreManager::global().restart_core().await.is_err() { if CoreManager::global().restart_core().await.is_err() {
@@ -21,22 +23,22 @@ async fn execute_service_operation(
#[tauri::command] #[tauri::command]
pub async fn install_service() -> CmdResult { 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] #[tauri::command]
pub async fn uninstall_service() -> CmdResult { 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] #[tauri::command]
pub async fn reinstall_service() -> CmdResult { 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] #[tauri::command]
pub async fn repair_service() -> CmdResult { 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] #[tauri::command]

View File

@@ -16,7 +16,7 @@ mod platform {
mod platform { mod platform {
use super::CmdResult; use super::CmdResult;
pub async fn invoke_uwp_tool() -> CmdResult { pub fn invoke_uwp_tool() -> CmdResult {
Ok(()) Ok(())
} }
} }
@@ -24,5 +24,5 @@ mod platform {
/// Command exposed to Tauri /// Command exposed to Tauri
#[tauri::command] #[tauri::command]
pub async fn invoke_uwp_tool() -> CmdResult { pub async fn invoke_uwp_tool() -> CmdResult {
platform::invoke_uwp_tool().await platform::invoke_uwp_tool()
} }

View File

@@ -96,8 +96,7 @@ impl Config {
error_msg error_msg
); );
CoreManager::global() CoreManager::global()
.use_default_config("config_validate::boot_error", &error_msg) .use_default_config("config_validate::boot_error", &error_msg)?;
.await?;
Some(("config_validate::boot_error", error_msg)) Some(("config_validate::boot_error", error_msg))
} else { } else {
logging!(info, Type::Config, true, "配置验证成功"); logging!(info, Type::Config, true, "配置验证成功");
@@ -107,16 +106,13 @@ impl Config {
Err(err) => { Err(err) => {
logging!(warn, Type::Config, true, "验证进程执行失败: {}", err); logging!(warn, Type::Config, true, "验证进程执行失败: {}", err);
CoreManager::global() CoreManager::global()
.use_default_config("config_validate::process_terminated", "") .use_default_config("config_validate::process_terminated", "")?;
.await?;
Some(("config_validate::process_terminated", String::new())) Some(("config_validate::process_terminated", String::new()))
} }
} }
} else { } else {
logging!(warn, Type::Config, true, "生成配置文件失败,使用默认配置"); logging!(warn, Type::Config, true, "生成配置文件失败,使用默认配置");
CoreManager::global() CoreManager::global().use_default_config("config_validate::error", "")?;
.use_default_config("config_validate::error", "")
.await?;
Some(("config_validate::error", String::new())) Some(("config_validate::error", String::new()))
}; };

View File

@@ -135,7 +135,7 @@ impl CoreManager {
Ok(false) 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); let runtime_path = dirs::app_home_dir()?.join(RUNTIME_CONFIG);
*Config::runtime().draft_mut() = Box::new(IRuntime { *Config::runtime().draft_mut() = Box::new(IRuntime {
config: Some(Config::clash().latest_ref().0.clone()), config: Some(Config::clash().latest_ref().0.clone()),
@@ -185,7 +185,7 @@ impl CoreManager {
"检测到Merge文件仅进行语法检查: {}", "检测到Merge文件仅进行语法检查: {}",
config_path config_path
); );
return self.validate_file_syntax(config_path).await; return self.validate_file_syntax(config_path);
} }
// 检查是否为脚本文件 // 检查是否为脚本文件
@@ -217,7 +217,7 @@ impl CoreManager {
"检测到脚本文件使用JavaScript验证: {}", "检测到脚本文件使用JavaScript验证: {}",
config_path config_path
); );
return self.validate_script_file(config_path).await; return self.validate_script_file(config_path);
} }
// 对YAML配置文件使用Clash内核验证 // 对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); 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) { let content = match std::fs::read_to_string(path) {
Ok(content) => content, Ok(content) => content,
@@ -843,7 +843,7 @@ impl CoreManager {
async fn attempt_service_init(&self) -> Result<()> { async fn attempt_service_init(&self) -> Result<()> {
if service::check_service_needs_reinstall().await { if service::check_service_needs_reinstall().await {
logging!(info, Type::Core, true, "服务版本不匹配或状态异常,执行重装"); logging!(info, Type::Core, true, "服务版本不匹配或状态异常,执行重装");
if let Err(e) = service::reinstall_service().await { if let Err(e) = service::reinstall_service() {
logging!( logging!(
warn, warn,
Type::Core, Type::Core,
@@ -960,7 +960,7 @@ impl CoreManager {
true, true,
"无服务安装记录 (首次运行或状态重置),尝试安装服务" "无服务安装记录 (首次运行或状态重置),尝试安装服务"
); );
match service::install_service().await { match service::install_service() {
Ok(_) => { Ok(_) => {
logging!(info, Type::Core, true, "服务安装成功(首次尝试)"); logging!(info, Type::Core, true, "服务安装成功(首次尝试)");
let mut new_state = service::ServiceState::default(); let mut new_state = service::ServiceState::default();
@@ -1065,7 +1065,7 @@ impl CoreManager {
pub async fn start_core(&self) -> Result<()> { pub async fn start_core(&self) -> Result<()> {
if service::is_service_available().await.is_ok() { if service::is_service_available().await.is_ok() {
if service::check_service_needs_reinstall().await { if service::check_service_needs_reinstall().await {
service::reinstall_service().await?; service::reinstall_service()?;
} }
logging!(info, Type::Core, true, "服务可用,使用服务模式启动"); logging!(info, Type::Core, true, "服务可用,使用服务模式启动");
self.start_core_by_service().await?; self.start_core_by_service().await?;

View File

@@ -218,7 +218,7 @@ impl EventDrivenProxyManager {
Self::enable_system_proxy(state).await; Self::enable_system_proxy(state).await;
} }
ProxyEvent::DisableProxy => { ProxyEvent::DisableProxy => {
Self::disable_system_proxy(state).await; Self::disable_system_proxy(state);
} }
ProxyEvent::SwitchToPac => { ProxyEvent::SwitchToPac => {
Self::switch_proxy_mode(state, true).await; Self::switch_proxy_mode(state, true).await;
@@ -307,7 +307,7 @@ impl EventDrivenProxyManager {
if !current.enable || current.url != expected.url { if !current.enable || current.url != expected.url {
log::info!(target: "app", "PAC代理设置异常正在恢复..."); log::info!(target: "app", "PAC代理设置异常正在恢复...");
Self::restore_pac_proxy(&expected.url).await; Self::restore_pac_proxy(&expected.url);
sleep(Duration::from_millis(500)).await; sleep(Duration::from_millis(500)).await;
let restored = Self::get_auto_proxy_with_timeout().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 { if !current.enable || current.host != expected.host || current.port != expected.port {
log::info!(target: "app", "系统代理设置异常,正在恢复..."); log::info!(target: "app", "系统代理设置异常,正在恢复...");
Self::restore_sys_proxy(&expected).await; Self::restore_sys_proxy(&expected);
sleep(Duration::from_millis(500)).await; sleep(Duration::from_millis(500)).await;
let restored = Self::get_sys_proxy_with_timeout().await; let restored = Self::get_sys_proxy_with_timeout().await;
@@ -350,16 +350,16 @@ impl EventDrivenProxyManager {
if pac_enabled { if pac_enabled {
let expected = Self::get_expected_pac_config(); let expected = Self::get_expected_pac_config();
Self::restore_pac_proxy(&expected.url).await; Self::restore_pac_proxy(&expected.url);
} else { } else {
let expected = Self::get_expected_sys_proxy(); 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; Self::check_and_restore_proxy(state).await;
} }
async fn disable_system_proxy(_state: &Arc<RwLock<ProxyState>>) { fn disable_system_proxy(_state: &Arc<RwLock<ProxyState>>) {
log::info!(target: "app", "禁用系统代理"); log::info!(target: "app", "禁用系统代理");
#[cfg(not(target_os = "windows"))] #[cfg(not(target_os = "windows"))]
@@ -380,13 +380,13 @@ impl EventDrivenProxyManager {
logging_error!(Type::System, true, disabled_sys.set_system_proxy()); logging_error!(Type::System, true, disabled_sys.set_system_proxy());
let expected = Self::get_expected_pac_config(); let expected = Self::get_expected_pac_config();
Self::restore_pac_proxy(&expected.url).await; Self::restore_pac_proxy(&expected.url);
} else { } else {
let disabled_auto = Autoproxy::default(); let disabled_auto = Autoproxy::default();
logging_error!(Type::System, true, disabled_auto.set_auto_proxy()); logging_error!(Type::System, true, disabled_auto.set_auto_proxy());
let expected = Self::get_expected_sys_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); 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"))] #[cfg(not(target_os = "windows"))]
{ {
let new_autoproxy = Autoproxy { 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"))] #[cfg(not(target_os = "windows"))]
{ {
logging_error!(Type::System, true, expected.set_system_proxy()); logging_error!(Type::System, true, expected.set_system_proxy());

View File

@@ -112,7 +112,7 @@ pub struct JsonResponse {
} }
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub async fn uninstall_service() -> Result<()> { pub fn uninstall_service() -> Result<()> {
logging!(info, Type::Service, true, "uninstall service"); logging!(info, Type::Service, true, "uninstall service");
use deelevate::{PrivilegeLevel, Token}; use deelevate::{PrivilegeLevel, Token};
@@ -146,7 +146,7 @@ pub async fn uninstall_service() -> Result<()> {
} }
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub async fn install_service() -> Result<()> { pub fn install_service() -> Result<()> {
logging!(info, Type::Service, true, "install service"); logging!(info, Type::Service, true, "install service");
use deelevate::{PrivilegeLevel, Token}; 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!( logging!(
warn, warn,
Type::Service, Type::Service,
@@ -209,7 +209,7 @@ pub async fn reinstall_service() -> Result<()> {
} }
// 再安装服务 // 再安装服务
match install_service().await { match install_service() {
Ok(_) => { Ok(_) => {
// 记录安装信息并保存 // 记录安装信息并保存
service_state.record_install(); service_state.record_install();
@@ -228,7 +228,7 @@ pub async fn reinstall_service() -> Result<()> {
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub async fn uninstall_service() -> Result<()> { pub fn uninstall_service() -> Result<()> {
logging!(info, Type::Service, true, "uninstall service"); logging!(info, Type::Service, true, "uninstall service");
use users::get_effective_uid; use users::get_effective_uid;
@@ -268,7 +268,7 @@ pub async fn uninstall_service() -> Result<()> {
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub async fn install_service() -> Result<()> { pub fn install_service() -> Result<()> {
logging!(info, Type::Service, true, "install service"); logging!(info, Type::Service, true, "install service");
use users::get_effective_uid; 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!( logging!(
warn, warn,
Type::Service, Type::Service,
@@ -337,7 +337,7 @@ pub async fn reinstall_service() -> Result<()> {
} }
// 再安装服务 // 再安装服务
match install_service().await { match install_service() {
Ok(_) => { Ok(_) => {
// 记录安装信息并保存 // 记录安装信息并保存
service_state.record_install(); service_state.record_install();
@@ -356,7 +356,7 @@ pub async fn reinstall_service() -> Result<()> {
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub async fn uninstall_service() -> Result<()> { pub fn uninstall_service() -> Result<()> {
use crate::utils::i18n::t; use crate::utils::i18n::t;
logging!(info, Type::Service, true, "uninstall service"); logging!(info, Type::Service, true, "uninstall service");
@@ -392,7 +392,7 @@ pub async fn uninstall_service() -> Result<()> {
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub async fn install_service() -> Result<()> { pub fn install_service() -> Result<()> {
use crate::utils::i18n::t; use crate::utils::i18n::t;
logging!(info, Type::Service, true, "install service"); logging!(info, Type::Service, true, "install service");
@@ -428,7 +428,7 @@ pub async fn install_service() -> Result<()> {
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub async fn reinstall_service() -> Result<()> { pub fn reinstall_service() -> Result<()> {
logging!(info, Type::Service, true, "reinstall service"); 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!( logging!(
warn, warn,
Type::Service, Type::Service,
@@ -457,7 +457,7 @@ pub async fn reinstall_service() -> Result<()> {
} }
// 再安装服务 // 再安装服务
match install_service().await { match install_service() {
Ok(_) => { Ok(_) => {
// 记录安装信息并保存 // 记录安装信息并保存
service_state.record_install(); service_state.record_install();
@@ -862,11 +862,9 @@ pub(super) async fn run_core_by_service(config_file: &PathBuf) -> Result<()> {
} }
log::info!(target: "app", "开始重装服务"); log::info!(target: "app", "开始重装服务");
if let Err(err) = reinstall_service().await { if let Err(err) = reinstall_service() {
log::warn!(target: "app", "服务重装失败: {err}"); log::warn!(target: "app", "服务重装失败: {err}");
bail!("Failed to reinstall service: {}", err);
log::info!(target: "app", "尝试使用现有服务");
return start_with_existing_service(config_file).await;
} }
log::info!(target: "app", "服务重装成功,尝试启动"); 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 { if check_service_needs_reinstall().await {
log::info!(target: "app", "服务需要重装"); log::info!(target: "app", "服务需要重装");
if let Err(err) = reinstall_service().await { if let Err(err) = reinstall_service() {
log::warn!(target: "app", "服务重装失败: {err}"); log::warn!(target: "app", "服务重装失败: {err}");
bail!("Failed to reinstall service: {}", err); bail!("Failed to reinstall service: {}", err);
} }
@@ -970,7 +968,7 @@ pub async fn is_service_available() -> Result<()> {
} }
/// 强制重装服务UI修复按钮 /// 强制重装服务UI修复按钮
pub async fn force_reinstall_service() -> Result<()> { pub fn force_reinstall_service() -> Result<()> {
log::info!(target: "app", "用户请求强制重装服务"); log::info!(target: "app", "用户请求强制重装服务");
let service_state = ServiceState::default(); let service_state = ServiceState::default();
@@ -978,7 +976,7 @@ pub async fn force_reinstall_service() -> Result<()> {
log::info!(target: "app", "已重置服务状态,开始执行重装"); log::info!(target: "app", "已重置服务状态,开始执行重装");
match reinstall_service().await { match reinstall_service() {
Ok(()) => { Ok(()) => {
log::info!(target: "app", "服务重装成功"); log::info!(target: "app", "服务重装成功");
Ok(()) Ok(())

View File

@@ -157,7 +157,7 @@ impl LogsMonitor {
let task = tokio::spawn(async move { let task = tokio::spawn(async move {
loop { loop {
// Get fresh IPC path and client for each connection attempt // 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), Ok((path, client)) => (path, client),
Err(e) => { Err(e) => {
logging!(error, Type::Ipc, true, "Failed to create IPC client: {}", 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), (std::path::PathBuf, kode_bridge::IpcStreamClient),
Box<dyn std::error::Error + Send + Sync>, Box<dyn std::error::Error + Send + Sync>,
> { > {