From df946a141447710efe44abc46723a5d5e78f057c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 9 Dec 2024 00:55:25 +0800 Subject: [PATCH 01/32] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20CONTRIBUTING.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b863d9..265cc46 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,7 +45,7 @@ - 推送您的更改到 GitHub 上的分支。 - 点击拉取“拉取请求(Pull Request)”按钮,选择您的分支,并开始新的拉取请求。 -- 填写拉取请求模板,详细说明您所做的更改以及它们为什么有用。 + - 提交拉取请求。 ### 关于分支 From 887dfd721fcb296ee21e7753f3cb79307b1be19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:14:49 +0800 Subject: [PATCH 02/32] Update CONTRIBUTING.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 265cc46..655bd70 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,7 +52,7 @@ #### 常驻分支 -- **main**: 此分支用于存放稳定的主代码,所有新功能或修复的 bug 都应**先提交到 dev 分支**,然后合并到 main 分支。 +- **main**: 此分支用于存放稳定的主代码,所有新功能或修复的 bug 都应**先提交到 beta 分支**,然后合并到 main 分支。 #### 其他临时分支 From e529a78222408ddd816fd5d33560dca06e32e7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Thu, 12 Dec 2024 23:46:21 +0800 Subject: [PATCH 03/32] Update Cargo.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 15a4af6..5a1e879 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.3-b3" +version = "1.0.4" edition = "2021" [dependencies] From 745d6f89df99e6be07b6a63b60d31e6c4f10d457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Thu, 12 Dec 2024 23:59:24 +0800 Subject: [PATCH 04/32] =?UTF-8?q?=E6=96=87=E6=A1=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 08e93df..929fd48 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ 完全开源免费的清理 Appdata 的小工具!完全使用 ChatGPT 生成! +## 暂停维护通知 +作者学业繁重,平日无力维护,寒假继续开发,但 PR 会正常审查合并 +

开发原因

Windows系统安装的软件卸载时,即使使用专业卸载工具卸载后,appdata 中的文件仍旧不会删除,故开发此软件清理。

@@ -46,6 +49,10 @@ - 双击运行 - 点击“立即扫描”,软件会自动扫描 Appdata 文件夹,并显示扫描结果。 - 自行选择“删除”或“移动”(暂未实现) +#### 关于文件夹描述 +程序默认不带任何规则,请自行下载规则并放到软件根目录,后续出模板 + +这是[作者本人维护的描述规则](https://github.com/TC999/TC999-subscription) ### 从源码编译 #### 本地编译 @@ -70,14 +77,15 @@ cargo build --release #### 或直接运行 CI 构建 ## 代码结构说明 -- `src`: 代码目录 +- `src`: 程序源代码目录 - `assets`: 资源文件目录(注:字体文件不可删除,否则运行会显示方块!) - `Cargo.toml`: 依赖管理文件 ## ✔ 待办 - [x] 白名单模块(防止误删,保护重要数据 +- [x] 文件夹描述 - [ ] 移动文件夹 -- [x] 打开文件夹(已成功,测试中,[103b1](https://github.com/TC999/AppDataCleaner/releases/tag/v1.0.3-b1) +- [x] 打开文件夹(已成功 - [ ] 多国语言支持(暂时不考虑,反正鬼佬也不用(不是 - [ ] 优化界面 - [ ] 优化代码 @@ -109,7 +117,7 @@ cargo build --release [issues-image]: https://img.shields.io/github/issues/TC999/AppDataCleaner?style=flat-square&logo=github&label=议题 [pulls-url]: https://github.com/TC999/AppDataCleaner/pulls "拉取请求" -[pulls-image]: https://custom-icon-badges.demolab.com/github/issues-pr-raw/TC999/AppDataCleaner?style=flat&logo=git-pull-request&%3Fcolor%3Dgreen&label=%E6%8B%89%E5%8F%96%E8%AF%B7%E6%B1%82 +[pulls-image]: https://img.shields.io/github/issues-pr-raw/TC999/AppDataCleaner?style=flat&logo=github&%3Fcolor%3Dgreen&label=%E6%8B%89%E5%8F%96%E8%AF%B7%E6%B1%82 [stars-url]: https://github.com/TC999/AppDataCleaner/stargazers "星标" [stars-image]: https://img.shields.io/github/stars/TC999/AppDataCleaner?style=flat-square&logo=github&label=星标 From 6f62c179ef741b345d34ede9c7e7150d892f2815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:00:08 +0800 Subject: [PATCH 05/32] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5a1e879..3631506 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,11 +7,11 @@ edition = "2021" egui = "0.29.1" eframe = "0.29.1" dirs-next = "2.0" -tokio = { version = "1", features = ["full"] } +tokio = { version = "1.42.0", features = ["full"] } walkdir = "2.4" log = "0.4" simplelog = "0.12" sha2 = "0.10" native-dialog = "0.7.0" -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0.216", features = ["derive"] } serde_yaml = "0.9.34+deprecated" From a201fa348e1cf596392b539b6970fa6e54064025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Fri, 20 Dec 2024 23:02:42 +0800 Subject: [PATCH 06/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 655bd70..ddfc78d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,6 +60,7 @@ - **feat**: 此分支用于提交新的功能 - **doc**: 此分支专门用于修复文档, 不涉及功能改动。 - **fix**: 此分支专门用于修复 dev 分支中出现的错误。 +- **pages**:项目网站源代码托管 - **crash**: 废稿 我们的维护团队将审查您的更改,并可能提出修改建议或批准合并。感谢您的贡献,让我们一起使这个项目变得更好! From 0dc3ba0ed8f0d68e91a8451d4e53e2b80cef0fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Sun, 29 Dec 2024 11:40:36 +0800 Subject: [PATCH 07/32] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BD=91=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ddfc78d..6ac41e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,6 +29,10 @@ 请确保每个新功能都在单独的代码文件中实现,并作为模块导入到主项目中。 - 示例:关于软件窗口,所有代码全部放于`about.rs`中,在`ui.rs`中留相关入口,在`main.rs`中作为模块导入 + +### 项目网站贡献 + +代码在`pages`分支中 ## 4. 提交您的修改 From 51147e89b041d6c8f4e8bca0a3052ee122c50c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Thu, 2 Jan 2025 17:58:50 +0800 Subject: [PATCH 08/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/about.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/about.rs b/src/about.rs index 4d2e2fb..297c0ae 100644 --- a/src/about.rs +++ b/src/about.rs @@ -24,5 +24,7 @@ pub fn show_about_window(ctx: &egui::Context, open: &mut bool) { }); ui.label("许可证: GPL-3.0"); ui.label(format!("版本: {}", version)); + ui.label("鸣谢:"); + ui.hyperlink_to("egui", "https://github.com/emilk/egui"); }); } From 04f467fecc08f1dac05fc3b7b5b5dee47bffccd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Fri, 3 Jan 2025 21:29:28 +0800 Subject: [PATCH 09/32] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=81=9C=E6=9B=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 929fd48..d1e453f 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,6 @@ 完全开源免费的清理 Appdata 的小工具!完全使用 ChatGPT 生成! -## 暂停维护通知 -作者学业繁重,平日无力维护,寒假继续开发,但 PR 会正常审查合并 -

开发原因

Windows系统安装的软件卸载时,即使使用专业卸载工具卸载后,appdata 中的文件仍旧不会删除,故开发此软件清理。

From 5d1e3b959240f06e159434eb617630a1f1fb81b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:05:38 +0800 Subject: [PATCH 10/32] =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=A7=BB=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ src/ui.rs | 15 +++------------ src/yaml_loader.rs | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 27b3ead..23796cf 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,6 @@ Cargo.lock *.log adcignore.txt /rules + +# yaml 规则文件 +*.yaml \ No newline at end of file diff --git a/src/ui.rs b/src/ui.rs index ca1e2cb..424498e 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -7,7 +7,7 @@ use crate::move_module; // 导入移动模块 use crate::open; use crate::scanner; use crate::utils; -use crate::yaml_loader::FolderDescriptions; +use crate::yaml_loader::{FolderDescriptions, load_folder_descriptions}; use eframe::egui::{self, Grid, ScrollArea}; use std::collections::HashSet; use std::sync::mpsc::{Receiver, Sender}; @@ -80,16 +80,7 @@ impl eframe::App for AppDataCleaner { // 加载描述文件 if self.folder_descriptions.is_none() { - match FolderDescriptions::load_from_yaml("folders_description.yaml") { - Ok(descriptions) => self.folder_descriptions = Some(descriptions), - Err(e) => { - if !self.yaml_error_logged { - eprintln!("加载 YAML 文件失败: {}", e); - logger::log_error(&format!("加载 YAML 文件失败: {}", e)); - self.yaml_error_logged = true; // 记录错误,避免重复输出 - } - } - } + self.folder_descriptions = load_folder_descriptions("folders_description.yaml", &mut self.yaml_error_logged); } if self.is_logging_enabled != self.previous_logging_state { @@ -248,4 +239,4 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); } -} +} \ No newline at end of file diff --git a/src/yaml_loader.rs b/src/yaml_loader.rs index 6edc5a4..b297077 100644 --- a/src/yaml_loader.rs +++ b/src/yaml_loader.rs @@ -34,3 +34,18 @@ impl FolderDescriptions { } } } + +// 新增函数,用于加载文件夹描述 +pub fn load_folder_descriptions(file_path: &str, yaml_error_logged: &mut bool) -> Option { + match FolderDescriptions::load_from_yaml(file_path) { + Ok(descriptions) => Some(descriptions), + Err(e) => { + if !*yaml_error_logged { + eprintln!("加载 YAML 文件失败: {}", e); + crate::logger::log_error(&format!("加载 YAML 文件失败: {}", e)); + *yaml_error_logged = true; // 记录错误,避免重复输出 + } + None + } + } +} \ No newline at end of file From 245118cd3d9c75f5bff1b466f0e04fb93c7ad3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Sun, 5 Jan 2025 16:20:57 +0800 Subject: [PATCH 11/32] =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=A7=BB=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/confirmation.rs | 32 ++++++++++++++++++++++++++++++++ src/ui.rs | 34 +++++++++++----------------------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index fa74e1f..01c0573 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -1,4 +1,7 @@ use eframe::egui; +use crate::logger; +use crate::delete; +use crate::utils; pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { let mut result = None; @@ -22,3 +25,32 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { result } + +pub fn handle_delete_confirmation( + ctx: &egui::Context, + confirm_delete: &mut Option<(String, bool)>, + selected_appdata_folder: &str, +) { + if let Some((folder_name, _)) = confirm_delete { + let message = format!("确定要彻底删除文件夹 {} 吗?", folder_name); + logger::log_info(&message); + if let Some(confirm) = show_confirmation(ctx, &message) { + if confirm { + if let Some(base_path) = utils::get_appdata_dir(selected_appdata_folder) { + let full_path = base_path.join(folder_name); + if let Err(err) = delete::delete_folder(&full_path) { + eprintln!("Error: {}", err); + logger::log_error(&format!("Error: {}", err)); + } + } else { + eprintln!("无法获取 {} 文件夹路径", selected_appdata_folder); + logger::log_error(&format!( + "无法获取 {} 文件夹路径", + selected_appdata_folder + )); + } + } + *confirm_delete = None; // 清除状态 + } + } +} \ No newline at end of file diff --git a/src/ui.rs b/src/ui.rs index 424498e..c2e394c 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -80,7 +80,16 @@ impl eframe::App for AppDataCleaner { // 加载描述文件 if self.folder_descriptions.is_none() { - self.folder_descriptions = load_folder_descriptions("folders_description.yaml", &mut self.yaml_error_logged); + match FolderDescriptions::load_from_yaml("folders_description.yaml") { + Ok(descriptions) => self.folder_descriptions = Some(descriptions), + Err(e) => { + if !self.yaml_error_logged { + eprintln!("加载 YAML 文件失败: {}", e); + logger::log_error(&format!("加载 YAML 文件失败: {}", e)); + self.yaml_error_logged = true; // 记录错误,避免重复输出 + } + } + } } if self.is_logging_enabled != self.previous_logging_state { @@ -94,28 +103,7 @@ impl eframe::App for AppDataCleaner { } // 删除确认弹窗逻辑 - if let Some((folder_name, _)) = &self.confirm_delete { - let message = format!("确定要彻底删除文件夹 {} 吗?", folder_name); - logger::log_info(&message); - if let Some(confirm) = confirmation::show_confirmation(ctx, &message) { - if confirm { - if let Some(base_path) = utils::get_appdata_dir(&self.selected_appdata_folder) { - let full_path = base_path.join(folder_name); - if let Err(err) = delete::delete_folder(&full_path) { - eprintln!("Error: {}", err); - logger::log_error(&format!("Error: {}", err)); - } - } else { - eprintln!("无法获取 {} 文件夹路径", self.selected_appdata_folder); - logger::log_error(&format!( - "无法获取 {} 文件夹路径", - self.selected_appdata_folder - )); - } - } - self.confirm_delete = None; // 清除状态 - } - } + confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder); // 顶部菜单 egui::TopBottomPanel::top("menu_bar").show(ctx, |ui| { From 582ed59794ae4a91d61fd5b6fd958cedd638f3d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:19:06 +0800 Subject: [PATCH 12/32] =?UTF-8?q?ui=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui.rs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index c2e394c..a0ebde3 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -80,16 +80,7 @@ impl eframe::App for AppDataCleaner { // 加载描述文件 if self.folder_descriptions.is_none() { - match FolderDescriptions::load_from_yaml("folders_description.yaml") { - Ok(descriptions) => self.folder_descriptions = Some(descriptions), - Err(e) => { - if !self.yaml_error_logged { - eprintln!("加载 YAML 文件失败: {}", e); - logger::log_error(&format!("加载 YAML 文件失败: {}", e)); - self.yaml_error_logged = true; // 记录错误,避免重复输出 - } - } - } + self.folder_descriptions = load_folder_descriptions("folders_description.yaml", &mut self.yaml_error_logged); } if self.is_logging_enabled != self.previous_logging_state { From 4eb715e7082653e2f9c0f65b961dab6a8f9ee981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:33:09 +0800 Subject: [PATCH 13/32] Update release.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a9f68b..7ba8bd9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,3 +51,5 @@ jobs: files: | target\release\AppDataCleaner.exe target\release\AppDataCleaner.pdb + env: + GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} From 9a10efc5a8a84094a49b07a0117b13d70c7eb9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:33:53 +0800 Subject: [PATCH 14/32] Update release.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ba8bd9..a658202 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,7 +49,7 @@ jobs: draft: false make_latest: true files: | - target\release\AppDataCleaner.exe - target\release\AppDataCleaner.pdb + target/release/AppDataCleaner.exe + target/release/AppDataCleaner.pdb env: GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} From 0a64a1c58f4c66876ea2325645e2d484b9102af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:36:58 +0800 Subject: [PATCH 15/32] =?UTF-8?q?=E6=B0=B4=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3631506..68907fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.4" +version = "1.0.4-b1" edition = "2021" [dependencies] From 499875f14fc8b9fbb254b36ca3f6443cfd7614cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 21:52:24 +0800 Subject: [PATCH 16/32] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/confirmation.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index 01c0573..94f03aa 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -26,6 +26,19 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { result } +// 新增函数,用于显示成功提示 +pub fn show_success(ctx: &egui::Context, message: &str) { + egui::Window::new("操作成功") + .collapsible(false) + .resizable(false) + .show(ctx, |ui| { + ui.label(message); + if ui.button("关闭").clicked() { + ui.close_menu(); // 关闭窗口 + } + }); +} + pub fn handle_delete_confirmation( ctx: &egui::Context, confirm_delete: &mut Option<(String, bool)>, @@ -37,10 +50,16 @@ pub fn handle_delete_confirmation( if let Some(confirm) = show_confirmation(ctx, &message) { if confirm { if let Some(base_path) = utils::get_appdata_dir(selected_appdata_folder) { - let full_path = base_path.join(folder_name); + let full_path = base_path.join(&folder_name); // 传递引用 if let Err(err) = delete::delete_folder(&full_path) { eprintln!("Error: {}", err); logger::log_error(&format!("Error: {}", err)); + } else { + // 检查文件夹是否已成功删除 + if !full_path.exists() { + let success_message = format!("文件夹 {} 已成功删除", folder_name); + show_success(ctx, &success_message); + } } } else { eprintln!("无法获取 {} 文件夹路径", selected_appdata_folder); From d50402bfe1ebd72ae2e0d6f22b2744b80fc164c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 21:57:31 +0800 Subject: [PATCH 17/32] bak --- src/confirmation.rs | 48 ++++++++++++++++++++++----------------------- src/ui.rs | 4 +++- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index 94f03aa..f1f4a80 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -3,7 +3,7 @@ use crate::logger; use crate::delete; use crate::utils; -pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { +pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &mut Option) -> Option { let mut result = None; egui::Window::new("确认操作") @@ -12,6 +12,11 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { .show(ctx, |ui| { ui.label(message); + // 显示状态信息 + if let Some(status_message) = status { + ui.label(status_message); + } + ui.horizontal(|ui| { if ui.button("确认").clicked() { result = Some(true); @@ -26,39 +31,32 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option { result } -// 新增函数,用于显示成功提示 -pub fn show_success(ctx: &egui::Context, message: &str) { - egui::Window::new("操作成功") - .collapsible(false) - .resizable(false) - .show(ctx, |ui| { - ui.label(message); - if ui.button("关闭").clicked() { - ui.close_menu(); // 关闭窗口 - } - }); -} - pub fn handle_delete_confirmation( ctx: &egui::Context, confirm_delete: &mut Option<(String, bool)>, selected_appdata_folder: &str, + status: &mut Option, ) { if let Some((folder_name, _)) = confirm_delete { let message = format!("确定要彻底删除文件夹 {} 吗?", folder_name); logger::log_info(&message); - if let Some(confirm) = show_confirmation(ctx, &message) { + if let Some(confirm) = show_confirmation(ctx, &message, status) { if confirm { if let Some(base_path) = utils::get_appdata_dir(selected_appdata_folder) { - let full_path = base_path.join(&folder_name); // 传递引用 - if let Err(err) = delete::delete_folder(&full_path) { - eprintln!("Error: {}", err); - logger::log_error(&format!("Error: {}", err)); - } else { - // 检查文件夹是否已成功删除 - if !full_path.exists() { - let success_message = format!("文件夹 {} 已成功删除", folder_name); - show_success(ctx, &success_message); + let full_path = base_path.join(&folder_name); + match delete::delete_folder(&full_path) { + Ok(_) => { + // 检查文件夹是否已成功删除 + if !full_path.exists() { + *status = Some(format!("文件夹 {} 已成功删除", folder_name)); + } else { + *status = Some(format!("文件夹 {} 删除失败", folder_name)); + } + } + Err(err) => { + eprintln!("Error: {}", err); + logger::log_error(&format!("Error: {}", err)); + *status = Some(format!("删除文件夹 {} 时发生错误: {}", folder_name, err)); } } } else { @@ -67,9 +65,9 @@ pub fn handle_delete_confirmation( "无法获取 {} 文件夹路径", selected_appdata_folder )); + *status = Some(format!("无法获取 {} 文件夹路径", selected_appdata_folder)); } } - *confirm_delete = None; // 清除状态 } } } \ No newline at end of file diff --git a/src/ui.rs b/src/ui.rs index a0ebde3..06aa7d7 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -94,7 +94,7 @@ impl eframe::App for AppDataCleaner { } // 删除确认弹窗逻辑 - confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder); + confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder, &mut self.status); // 顶部菜单 egui::TopBottomPanel::top("menu_bar").show(ctx, |ui| { @@ -176,6 +176,7 @@ impl eframe::App for AppDataCleaner { if !self.ignored_folders.contains(folder) { if ui.button("彻底删除").clicked() { self.confirm_delete = Some((folder.clone(), false)); + self.status = None; // 每次点击"彻底删除"时清除状态 } if ui.button("移动").clicked() { self.move_module.show_window = true; @@ -217,5 +218,6 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); + } } \ No newline at end of file From 2e9a2769a63935437b987423872121bc18b52e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 21:59:22 +0800 Subject: [PATCH 18/32] fix --- src/confirmation.rs | 2 +- src/ui.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index f1f4a80..37ec42d 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -3,7 +3,7 @@ use crate::logger; use crate::delete; use crate::utils; -pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &mut Option) -> Option { +pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option) -> Option { let mut result = None; egui::Window::new("确认操作") diff --git a/src/ui.rs b/src/ui.rs index 06aa7d7..f9ef888 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -27,6 +27,7 @@ pub struct AppDataCleaner { move_module: move_module::MoveModule, // 移动模块实例 folder_descriptions: Option, yaml_error_logged: bool, // 新增字段,用于标记是否已经记录过错误 + status: Option, // 添加 status 字段 } impl Default for AppDataCleaner { @@ -47,6 +48,7 @@ impl Default for AppDataCleaner { move_module: Default::default(), folder_descriptions: None, yaml_error_logged: false, // 初始时假定未记录过错误 + status: None, // 初始化为 None } } } From 281169a8d6019ae4e861f814242b9df3f99c872f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:05:28 +0800 Subject: [PATCH 19/32] bak --- src/confirmation.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/confirmation.rs b/src/confirmation.rs index 37ec42d..6469a3f 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -59,6 +59,8 @@ pub fn handle_delete_confirmation( *status = Some(format!("删除文件夹 {} 时发生错误: {}", folder_name, err)); } } + // 成功删除文件夹后关闭弹窗 + *confirm_delete = None; } else { eprintln!("无法获取 {} 文件夹路径", selected_appdata_folder); logger::log_error(&format!( From e4b1624e8af3aa84051784362049fa17f10c652b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:16:56 +0800 Subject: [PATCH 20/32] bak --- src/confirmation.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index 6469a3f..c9eb6f7 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -3,7 +3,7 @@ use crate::logger; use crate::delete; use crate::utils; -pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option) -> Option { +pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option, confirm_delete: &mut Option<(String, bool)>) -> Option { let mut result = None; egui::Window::new("确认操作") @@ -18,12 +18,19 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option Date: Tue, 7 Jan 2025 22:18:47 +0800 Subject: [PATCH 21/32] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/confirmation.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index c9eb6f7..07887d7 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -3,7 +3,7 @@ use crate::logger; use crate::delete; use crate::utils; -pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option, confirm_delete: &mut Option<(String, bool)>) -> Option { +pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option) -> Option { let mut result = None; egui::Window::new("确认操作") @@ -20,8 +20,7 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option, ) { - if let Some((folder_name, _)) = confirm_delete { + if let Some((folder_name, _)) = confirm_delete.clone() { let message = format!("确定要彻底删除文件夹 {} 吗?", folder_name); logger::log_info(&message); - if let Some(confirm) = show_confirmation(ctx, &message, status, confirm_delete) { + if let Some(confirm) = show_confirmation(ctx, &message, status) { if confirm { if let Some(base_path) = utils::get_appdata_dir(selected_appdata_folder) { let full_path = base_path.join(&folder_name); @@ -74,6 +73,8 @@ pub fn handle_delete_confirmation( )); *status = Some(format!("无法获取 {} 文件夹路径", selected_appdata_folder)); } + } else { + *confirm_delete = None; // 用户选择关闭或取消 } } } From 29ad67cec5e1b07f8d07cfcf41c6e70c8bfa0ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:33:13 +0800 Subject: [PATCH 22/32] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui.rs b/src/ui.rs index f9ef888..715d00b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -136,6 +136,11 @@ impl eframe::App for AppDataCleaner { while let Ok((folder, size)) = rx.try_recv() { self.folder_data.push((folder, size)); } + + // 如果接收到的文件夹数据为空,表示扫描已完成 + if self.folder_data.is_empty() { + self.is_scanning = false; + } } if self.is_scanning { @@ -220,6 +225,5 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); - } } \ No newline at end of file From 147a79e4cb991b08123023baabd5c172f2620e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:35:54 +0800 Subject: [PATCH 23/32] =?UTF-8?q?=E4=BF=AE=E4=B8=80=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scanner.rs | 2 ++ src/ui.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/scanner.rs b/src/scanner.rs index f3d00de..9893d37 100644 --- a/src/scanner.rs +++ b/src/scanner.rs @@ -34,6 +34,8 @@ pub fn scan_appdata(tx: Sender<(String, u64)>, folder_type: &str) { } } } + // 发送一个特殊标志,表示扫描完成 + tx.send(("__SCAN_COMPLETE__".to_string(), 0)).unwrap(); }); } } diff --git a/src/ui.rs b/src/ui.rs index 715d00b..1910a08 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -134,12 +134,12 @@ impl eframe::App for AppDataCleaner { if let Some(rx) = &self.rx { while let Ok((folder, size)) = rx.try_recv() { - self.folder_data.push((folder, size)); - } - - // 如果接收到的文件夹数据为空,表示扫描已完成 - if self.folder_data.is_empty() { - self.is_scanning = false; + // 检查是否接收到扫描完成标志 + if folder == "__SCAN_COMPLETE__" { + self.is_scanning = false; + } else { + self.folder_data.push((folder, size)); + } } } From 11903c7d250887bf2bd0b4568533473217d8179c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:39:28 +0800 Subject: [PATCH 24/32] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#35?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 1910a08..c0acba9 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -48,7 +48,8 @@ impl Default for AppDataCleaner { move_module: Default::default(), folder_descriptions: None, yaml_error_logged: false, // 初始时假定未记录过错误 - status: None, // 初始化为 None + //status: None, // 初始化为 None + status: Some("未扫描".to_string()), // 初始化为 "未扫描" } } } @@ -109,11 +110,12 @@ impl eframe::App for AppDataCleaner { ui.checkbox(&mut self.is_logging_enabled, "启用日志"); ui.menu_button("切换文件夹", |ui| { - for folder in ["Roaming", "Local", "LocalLow"] { + for folder in ["Roaming","Local","LocalLow"] { if ui.button(folder).clicked() { self.selected_appdata_folder = folder.to_string(); self.folder_data.clear(); self.is_scanning = false; + self.status = Some("未扫描".to_string()); // 更新状态为 "未扫描" ui.close_menu(); } } @@ -125,6 +127,7 @@ impl eframe::App for AppDataCleaner { if ui.button("立即扫描").clicked() && !self.is_scanning { self.is_scanning = true; self.folder_data.clear(); + self.status = Some("扫描中...".to_string()); // 更新状态为 "扫描中..." let tx = self.tx.clone().unwrap(); let folder_type = self.selected_appdata_folder.clone(); @@ -137,16 +140,16 @@ impl eframe::App for AppDataCleaner { // 检查是否接收到扫描完成标志 if folder == "__SCAN_COMPLETE__" { self.is_scanning = false; + self.status = Some("扫描完成".to_string()); // 更新状态为 "扫描完成" } else { self.folder_data.push((folder, size)); } } } - if self.is_scanning { - ui.label("扫描中..."); - } else { - ui.label("扫描完成"); + // 显示状态 + if let Some(status) = &self.status { + ui.label(status); } ScrollArea::vertical().show(ui, |ui| { From df417e1849f1f618965431a8446fa18dd566283d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:42:10 +0800 Subject: [PATCH 25/32] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- src/ui.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index c0acba9..c21c418 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -110,7 +110,7 @@ impl eframe::App for AppDataCleaner { ui.checkbox(&mut self.is_logging_enabled, "启用日志"); ui.menu_button("切换文件夹", |ui| { - for folder in ["Roaming","Local","LocalLow"] { + for folder in ["Roaming", "Local", "LocalLow"] { if ui.button(folder).clicked() { self.selected_appdata_folder = folder.to_string(); self.folder_data.clear(); @@ -229,4 +229,4 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); } -} \ No newline at end of file +} From ebfb08521d624f3a538c86f96ce3ad061cbb0eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:45:37 +0800 Subject: [PATCH 26/32] Update Cargo.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 68907fc..3c772be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.4-b1" +version = "1.0.4-b3" edition = "2021" [dependencies] From 322ba964345d11e6d18989dbcfb8534cc03556f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Wed, 8 Jan 2025 09:41:13 +0800 Subject: [PATCH 27/32] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=90=8E=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E6=89=AB=E6=8F=8F=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/confirmation.rs | 4 ++++ src/ui.rs | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/confirmation.rs b/src/confirmation.rs index 07887d7..774d1a8 100644 --- a/src/confirmation.rs +++ b/src/confirmation.rs @@ -42,6 +42,7 @@ pub fn handle_delete_confirmation( confirm_delete: &mut Option<(String, bool)>, selected_appdata_folder: &str, status: &mut Option, + folder_data: &mut Vec<(String, u64)>, // 新增参数 ) { if let Some((folder_name, _)) = confirm_delete.clone() { let message = format!("确定要彻底删除文件夹 {} 吗?", folder_name); @@ -55,6 +56,9 @@ pub fn handle_delete_confirmation( // 检查文件夹是否已成功删除 if !full_path.exists() { *status = Some(format!("文件夹 {} 已成功删除", folder_name)); + println!("文件夹 {} 已成功删除", folder_name); + // 从 folder_data 中移除对应项目 + folder_data.retain(|(name, _)| name != &folder_name); } else { *status = Some(format!("文件夹 {} 删除失败", folder_name)); } diff --git a/src/ui.rs b/src/ui.rs index c21c418..2343e2d 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -97,7 +97,7 @@ impl eframe::App for AppDataCleaner { } // 删除确认弹窗逻辑 - confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder, &mut self.status); + confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder, &mut self.status, &mut self.folder_data); // 传递 folder_data // 顶部菜单 egui::TopBottomPanel::top("menu_bar").show(ctx, |ui| { @@ -229,4 +229,4 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); } -} +} \ No newline at end of file From f8eb9a468d9d2992a4f7a3014d80ce05a4d8a564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Wed, 8 Jan 2025 09:46:52 +0800 Subject: [PATCH 28/32] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3c772be..83642ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.4-b3" +version = "1.0.4-b4" edition = "2021" [dependencies] From 7e17ef97067324f4fa107613d28c0e0c58343604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:29:22 +0800 Subject: [PATCH 29/32] Update Cargo.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈生杂物房 <88823709+TC999@users.noreply.github.com> --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 83642ed..060c522 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.4-b4" +version = "1.0.5" edition = "2021" [dependencies] From 1d784ad8a8e3f36303c6455bf78c423e6323d4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 3 Feb 2025 22:08:39 +0800 Subject: [PATCH 30/32] =?UTF-8?q?=E9=94=81=E5=AE=9A=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E6=A0=8F=EF=BC=8C=E6=8E=92=E5=BA=8F=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 2343e2d..4c1565d 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -7,7 +7,7 @@ use crate::move_module; // 导入移动模块 use crate::open; use crate::scanner; use crate::utils; -use crate::yaml_loader::{FolderDescriptions, load_folder_descriptions}; +use crate::yaml_loader::{load_folder_descriptions, FolderDescriptions}; use eframe::egui::{self, Grid, ScrollArea}; use std::collections::HashSet; use std::sync::mpsc::{Receiver, Sender}; @@ -26,8 +26,11 @@ pub struct AppDataCleaner { ignored_folders: HashSet, // 忽略文件夹集合 move_module: move_module::MoveModule, // 移动模块实例 folder_descriptions: Option, - yaml_error_logged: bool, // 新增字段,用于标记是否已经记录过错误 - status: Option, // 添加 status 字段 + yaml_error_logged: bool, // 新增字段,用于标记是否已经记录过错误 + status: Option, // 添加 status 字段 + sort_criterion: Option, // 新增字段,排序标准 "name" 或 "size" + sort_order: Option, // 新增字段,排序顺序 "asc" 或 "desc" + total_size: u64, // 新增字段,总大小 } impl Default for AppDataCleaner { @@ -47,9 +50,11 @@ impl Default for AppDataCleaner { ignored_folders: ignore::load_ignored_folders(), move_module: Default::default(), folder_descriptions: None, - yaml_error_logged: false, // 初始时假定未记录过错误 - //status: None, // 初始化为 None + yaml_error_logged: false, // 初始时假定未记录过错误 status: Some("未扫描".to_string()), // 初始化为 "未扫描" + sort_criterion: None, // 初始化为 None + sort_order: None, // 初始化为 None + total_size: 0, // 初始化为 0 } } } @@ -83,7 +88,8 @@ impl eframe::App for AppDataCleaner { // 加载描述文件 if self.folder_descriptions.is_none() { - self.folder_descriptions = load_folder_descriptions("folders_description.yaml", &mut self.yaml_error_logged); + self.folder_descriptions = + load_folder_descriptions("folders_description.yaml", &mut self.yaml_error_logged); } if self.is_logging_enabled != self.previous_logging_state { @@ -97,7 +103,13 @@ impl eframe::App for AppDataCleaner { } // 删除确认弹窗逻辑 - confirmation::handle_delete_confirmation(ctx, &mut self.confirm_delete, &self.selected_appdata_folder, &mut self.status, &mut self.folder_data); // 传递 folder_data + confirmation::handle_delete_confirmation( + ctx, + &mut self.confirm_delete, + &self.selected_appdata_folder, + &mut self.status, + &mut self.folder_data, + ); // 传递 folder_data // 顶部菜单 egui::TopBottomPanel::top("menu_bar").show(ctx, |ui| { @@ -152,6 +164,12 @@ impl eframe::App for AppDataCleaner { ui.label(status); } + // 计算总大小 + self.total_size = self.folder_data.iter().map(|(_, size)| size).sum(); + + // 显示总大小 + ui.label(format!("总大小: {}", utils::format_size(self.total_size))); + ScrollArea::vertical().show(ui, |ui| { Grid::new("folders_table").striped(true).show(ui, |ui| { ui.label("文件夹"); @@ -160,6 +178,44 @@ impl eframe::App for AppDataCleaner { ui.label("操作"); ui.end_row(); + // 添加排序按钮 + ui.menu_button("排序", |ui| { + if ui.button("按名称排序").clicked() { + self.sort_criterion = Some("name".to_string()); + self.sort_order = Some("asc".to_string()); + } + if ui.button("按大小排序").clicked() { + self.sort_criterion = Some("size".to_string()); + self.sort_order = Some("asc".to_string()); + } + if ui.button("名称倒序").clicked() { + self.sort_criterion = Some("name".to_string()); + self.sort_order = Some("desc".to_string()); + } + if ui.button("大小倒序").clicked() { + self.sort_criterion = Some("size".to_string()); + self.sort_order = Some("desc".to_string()); + } + }); + + if let Some(criterion) = &self.sort_criterion { + self.folder_data.sort_by(|a, b| { + if *criterion == "name" { + if self.sort_order == Some("asc".to_string()) { + a.0.cmp(&b.0) + } else { + b.0.cmp(&a.0) + } + } else { + if self.sort_order == Some("asc".to_string()) { + a.1.cmp(&b.1) + } else { + b.1.cmp(&a.1) + } + } + }); + } + for (folder, size) in &self.folder_data { if self.ignored_folders.contains(folder) { ui.add_enabled( @@ -229,4 +285,4 @@ impl eframe::App for AppDataCleaner { // 显示移动窗口 self.move_module.show_move_window(ctx); } -} \ No newline at end of file +} From da437463130a795f41d32bc12d3b019ee5d4fd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 3 Feb 2025 22:14:27 +0800 Subject: [PATCH 31/32] =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=A7=BB=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui.rs | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 4c1565d..6a8b663 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -164,6 +164,26 @@ impl eframe::App for AppDataCleaner { ui.label(status); } + // 添加排序按钮 + ui.menu_button("排序", |ui| { + if ui.button("名称正序").clicked() { + self.sort_criterion = Some("name".to_string()); + self.sort_order = Some("asc".to_string()); + } + if ui.button("大小正序").clicked() { + self.sort_criterion = Some("size".to_string()); + self.sort_order = Some("asc".to_string()); + } + if ui.button("名称倒序").clicked() { + self.sort_criterion = Some("name".to_string()); + self.sort_order = Some("desc".to_string()); + } + if ui.button("大小倒序").clicked() { + self.sort_criterion = Some("size".to_string()); + self.sort_order = Some("desc".to_string()); + } + }); + // 计算总大小 self.total_size = self.folder_data.iter().map(|(_, size)| size).sum(); @@ -178,26 +198,6 @@ impl eframe::App for AppDataCleaner { ui.label("操作"); ui.end_row(); - // 添加排序按钮 - ui.menu_button("排序", |ui| { - if ui.button("按名称排序").clicked() { - self.sort_criterion = Some("name".to_string()); - self.sort_order = Some("asc".to_string()); - } - if ui.button("按大小排序").clicked() { - self.sort_criterion = Some("size".to_string()); - self.sort_order = Some("asc".to_string()); - } - if ui.button("名称倒序").clicked() { - self.sort_criterion = Some("name".to_string()); - self.sort_order = Some("desc".to_string()); - } - if ui.button("大小倒序").clicked() { - self.sort_criterion = Some("size".to_string()); - self.sort_order = Some("desc".to_string()); - } - }); - if let Some(criterion) = &self.sort_criterion { self.folder_data.sort_by(|a, b| { if *criterion == "name" { From 69f648b0b493a321b200bd6ab74a89265305ed3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=94=9F=E6=9D=82=E7=89=A9=E6=88=BF?= <88823709+TC999@users.noreply.github.com> Date: Mon, 3 Feb 2025 22:15:13 +0800 Subject: [PATCH 32/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 060c522..50a8b84 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "AppDataCleaner" -version = "1.0.5" +version = "1.0.5-b1" edition = "2021" [dependencies]