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},
utils::i18n::t,
};
use anyhow::Result;
async fn execute_service_operation(
service_op: impl std::future::Future<Output = Result<(), impl ToString + std::fmt::Debug>>,
op_type: &str,
) -> CmdResult {
if service_op.await.is_err() {
let emsg = format!("{} {} failed", op_type, "Service");
async fn execute_service_operation_sync<F, E>(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]

View File

@@ -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()
}

View File

@@ -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()))
};

View File

@@ -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?;

View File

@@ -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<RwLock<ProxyState>>) {
fn disable_system_proxy(_state: &Arc<RwLock<ProxyState>>) {
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());

View File

@@ -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(())

View File

@@ -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<dyn std::error::Error + Send + Sync>,
> {