From ab2d0da20cf7b95e1df768786755468d33d2852b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Wed, 27 May 2026 13:44:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20disabled.rs=20?= =?UTF-8?q?=E2=80=94=20=E7=A6=81=E7=94=A8=E8=B7=AF=E5=BE=84=20JSON=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AF=BB=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src-tauri/src/commands/disabled.rs | 62 ++++++++++++++++++++++++++++++ src-tauri/src/commands/mod.rs | 1 + src-tauri/src/lib.rs | 2 + 3 files changed, 65 insertions(+) create mode 100644 src-tauri/src/commands/disabled.rs diff --git a/src-tauri/src/commands/disabled.rs b/src-tauri/src/commands/disabled.rs new file mode 100644 index 0000000..2c3282d --- /dev/null +++ b/src-tauri/src/commands/disabled.rs @@ -0,0 +1,62 @@ +use serde::{Deserialize, Serialize}; +use std::fs; +use std::path::PathBuf; + +fn disabled_file_path() -> PathBuf { + dirs::data_dir() + .or_else(dirs::home_dir) + .unwrap_or_else(|| PathBuf::from(".")) + .join("PathEditor") + .join("disabled.json") +} + +#[derive(Serialize, Deserialize, Default)] +struct DisabledState { + #[serde(default)] + system: Vec, + #[serde(default)] + user: Vec, +} + +/// 保存禁用路径列表(即时持久化,不依赖注册表保存按钮) +#[tauri::command] +pub fn save_disabled_state(system: Vec, user: Vec) -> Result<(), String> { + let state = DisabledState { system, user }; + let path = disabled_file_path(); + + if let Some(parent) = path.parent() { + fs::create_dir_all(parent) + .map_err(|e| format!("无法创建配置目录: {}", e))?; + } + + let json = serde_json::to_string_pretty(&state) + .map_err(|e| format!("JSON 序列化失败: {}", e))?; + + fs::write(&path, &json) + .map_err(|e| format!("无法写入 disabled.json: {}", e))?; + + log::info!("已保存禁用状态到: {}", path.display()); + Ok(()) +} + +/// 加载禁用路径列表,返回 (system_disabled, user_disabled) +#[tauri::command] +pub fn load_disabled_state() -> Result<(Vec, Vec), String> { + let path = disabled_file_path(); + + if !path.exists() { + return Ok((vec![], vec![])); + } + + let content = fs::read_to_string(&path) + .map_err(|e| format!("无法读取 disabled.json: {}", e))?; + + if content.trim().is_empty() { + return Ok((vec![], vec![])); + } + + let state: DisabledState = serde_json::from_str(&content) + .map_err(|e| format!("JSON 解析失败: {}", e))?; + + Ok((state.system, state.user)) +} diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index c449329..73aa901 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -2,3 +2,4 @@ pub mod registry; pub mod system; pub mod backup; pub mod fs; +pub mod disabled; diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index a5294ee..3a41db6 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -26,6 +26,8 @@ pub fn run() { commands::backup::backup_registry, commands::backup::get_appdata_dir, commands::fs::read_text_file, + commands::disabled::save_disabled_state, + commands::disabled::load_disabled_state, ]) .run(tauri::generate_context!()) .expect("error while running tauri application");