From 44e8a035aa94226737524ff1b8929c4b65233d8c Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Tue, 5 Aug 2025 23:22:40 +0800 Subject: [PATCH] fix: improve profile import validation and handle async lock correctly fix: refactor import_profile function for improved readability and maintainability --- src-tauri/src/cmd/profile.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/cmd/profile.rs b/src-tauri/src/cmd/profile.rs index 1c2a0f53..a8a7c699 100644 --- a/src-tauri/src/cmd/profile.rs +++ b/src-tauri/src/cmd/profile.rs @@ -139,12 +139,20 @@ pub async fn import_profile(url: String, option: Option) -> CmdResult logging!(info, Type::Cmd, true, "[导入订阅] 下载完成,开始保存配置"); // 获取导入前的配置数量用于验证 - let pre_count = Config::profiles().latest_ref().items.len(); + let pre_count = Config::profiles() + .latest_ref() + .items + .as_ref() + .map_or(0, |items| items.len()); Config::profiles().data_mut().append_item(item.clone())?; // 验证导入是否成功 - let post_count = Config::profiles().latest_ref().items.len(); + let post_count = Config::profiles() + .latest_ref() + .items + .as_ref() + .map_or(0, |items| items.len()); if post_count <= pre_count { logging!( error, @@ -179,7 +187,10 @@ pub async fn import_profile(url: String, option: Option) -> CmdResult // 异步保存配置文件并发送全局通知 let uid_clone = item.uid.clone(); crate::process::AsyncHandler::spawn(move || async move { - if let Err(e) = Config::profiles().data_mut().save_file() { + // 在异步块中重新获取锁,避免跨await问题 + let save_result = { Config::profiles().data_mut().save_file() }; + + if let Err(e) = save_result { logging!(error, Type::Cmd, true, "[导入订阅] 保存配置文件失败: {}", e); } else { logging!(info, Type::Cmd, true, "[导入订阅] 配置文件保存成功");