Skip to content

Commit

Permalink
yaml 编辑测试
Browse files Browse the repository at this point in the history
  • Loading branch information
TC999 committed Feb 8, 2025
1 parent da1f0fa commit 765e196
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 3 deletions.
62 changes: 61 additions & 1 deletion src/ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ pub struct AppDataCleaner {
folder_descriptions: Option<FolderDescriptions>,
yaml_error_logged: bool, // 新增字段,用于标记是否已经记录过错误
status: Option<String>, // 添加 status 字段
editing_folder: Option<(String, String)>, // 当前编辑的文件夹和描述
show_edit_window: bool, // 控制编辑窗口的显示
}

impl Default for AppDataCleaner {
Expand Down Expand Up @@ -75,6 +77,10 @@ impl AppDataCleaner {

ctx.set_fonts(fonts);
}

fn edit_description(&mut self, folder: &str, description: String) {
self.editing_folder = Some((folder.to_string(), description));
self.show_edit_window = true;
}

impl eframe::App for AppDataCleaner {
Expand Down Expand Up @@ -183,6 +189,13 @@ impl eframe::App for AppDataCleaner {
ui.label("无描述");
}

// 编辑按钮
if ui.button("编辑描述").clicked() {
// 打开编辑窗口
// 传递当前文件夹名称和描述
self.edit_description(folder, description.unwrap_or("".to_string()));
}

if !self.ignored_folders.contains(folder) {
if ui.button("彻底删除").clicked() {
self.confirm_delete = Some((folder.clone(), false));
Expand All @@ -205,6 +218,21 @@ impl eframe::App for AppDataCleaner {
response1 | response2 | response3 // 返回合并的 Response
});
}
// 显示编辑窗口
if self.show_edit_window {
egui::Window::new("编辑描述")
.open(&mut self.show_edit_window)
.show(ctx, |ui| {
if let Some((ref folder, ref mut description)) = self.editing_folder {
ui.label(format!("文件夹: {}", folder));
ui.text_edit_singleline(description);
if ui.button("保存").clicked() {
self.save_description(folder, description);
self.show_edit_window = false;
}
}
});
}
if ui.button("打开").clicked() {
if let Some(base_path) =
utils::get_appdata_dir(&self.selected_appdata_folder)
Expand All @@ -221,6 +249,38 @@ impl eframe::App for AppDataCleaner {
});
});

fn save_description(&mut self, folder: &str, description: &str) {
// 加载现有描述文件
let mut folder_descriptions = self
.folder_descriptions
.clone()
.unwrap_or_else(|| FolderDescriptions::default());

// 更新描述
match self.selected_appdata_folder.as_str() {
"Roaming" => {
folder_descriptions.Roaming.insert(folder.to_string(), description.to_string());
}
"Local" => {
folder_descriptions.Local.insert(folder.to_string(), description.to_string());
}
"LocalLow" => {
folder_descriptions.LocalLow.insert(folder.to_string(), description.to_string());
}
_ => {}
}

// 保存到 YAML 文件
if let Err(e) = crate::yaml_loader::save_folder_descriptions("folders_description.yaml", &folder_descriptions) {
logger::log_error(&format!("保存 YAML 文件失败: {}", e));
} else {
logger::log_info("描述已保存");
}

// 更新内存中的描述文件
self.folder_descriptions = Some(folder_descriptions);
}

// 关于窗口
if self.show_about_window {
about::show_about_window(ctx, &mut self.show_about_window);
Expand All @@ -229,4 +289,4 @@ impl eframe::App for AppDataCleaner {
// 显示移动窗口
self.move_module.show_move_window(ctx);
}
}
}
21 changes: 19 additions & 2 deletions src/yaml_loader.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fs;
use std::fs::File;
use std::io::Write;
use std::path::Path;

#[derive(Debug, Serialize, Deserialize)]
Expand Down Expand Up @@ -36,7 +38,10 @@ impl FolderDescriptions {
}

// 新增函数,用于加载文件夹描述
pub fn load_folder_descriptions(file_path: &str, yaml_error_logged: &mut bool) -> Option<FolderDescriptions> {
pub fn load_folder_descriptions(
file_path: &str,
yaml_error_logged: &mut bool,
) -> Option<FolderDescriptions> {
match FolderDescriptions::load_from_yaml(file_path) {
Ok(descriptions) => Some(descriptions),
Err(e) => {
Expand All @@ -48,4 +53,16 @@ pub fn load_folder_descriptions(file_path: &str, yaml_error_logged: &mut bool) -
None
}
}
}
}

pub fn save_folder_descriptions(
file_path: &str,
descriptions: &FolderDescriptions,
) -> Result<(), String> {
let yaml_string =
serde_yaml::to_string(descriptions).map_err(|e| format!("序列化 YAML 失败: {}", e))?;
let mut file = File::create(file_path).map_err(|e| format!("创建 YAML 文件失败: {}", e))?;
file.write_all(yaml_string.as_bytes())
.map_err(|e| format!("写入 YAML 文件失败: {}", e))?;
Ok(())
}

0 comments on commit 765e196

Please sign in to comment.