Skip to content

Commit

Permalink
Merge pull request #43 from TC999/mul
Browse files Browse the repository at this point in the history
实现 #40
  • Loading branch information
TC999 authored Feb 3, 2025
2 parents e480553 + 69f648b commit f5cc278
Show file tree
Hide file tree
Showing 10 changed files with 189 additions and 57 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +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 }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,6 @@ Cargo.lock
*.log
adcignore.txt
/rules

# yaml 规则文件
*.yaml
9 changes: 7 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
请确保每个新功能都在单独的代码文件中实现,并作为模块导入到主项目中。

- 示例:关于软件窗口,所有代码全部放于`about.rs`中,在`ui.rs`中留相关入口,在`main.rs`中作为模块导入

### 项目网站贡献

代码在`pages`分支中

## 4. 提交您的修改

Expand All @@ -45,21 +49,22 @@

- 推送您的更改到 GitHub 上的分支。
- 点击拉取“拉取请求(Pull Request)”按钮,选择您的分支,并开始新的拉取请求。
- 填写拉取请求模板,详细说明您所做的更改以及它们为什么有用。
<!-- 填写拉取请求模板,详细说明您所做的更改以及它们为什么有用。-->
- 提交拉取请求。

### 关于分支

#### 常驻分支

- **main**: 此分支用于存放稳定的主代码,所有新功能或修复的 bug 都应**先提交到 dev 分支**,然后合并到 main 分支。
- **main**: 此分支用于存放稳定的主代码,所有新功能或修复的 bug 都应**先提交到 beta 分支**,然后合并到 main 分支。

#### 其他临时分支

- **beta**: 测试版分支,默认提交将代码合并到此,测试无误后再合并到 main 分支
- **feat**: 此分支用于提交新的功能
- **doc**: 此分支专门用于修复文档, 不涉及功能改动。
- **fix**: 此分支专门用于修复 dev 分支中出现的错误。
- **pages**:项目网站源代码托管
- **crash**: 废稿

我们的维护团队将审查您的更改,并可能提出修改建议或批准合并。感谢您的贡献,让我们一起使这个项目变得更好!
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
[package]
name = "AppDataCleaner"
version = "1.0.3-b3"
version = "1.0.5-b1"
edition = "2021"

[dependencies]
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"
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
- 双击运行
- 点击“立即扫描”,软件会自动扫描 Appdata 文件夹,并显示扫描结果。
- 自行选择“删除”或“移动”(暂未实现)
#### 关于文件夹描述
程序默认不带任何规则,请自行下载规则并放到软件根目录,后续出模板

这是[作者本人维护的描述规则](https://github.com/TC999/TC999-subscription)

### 从源码编译
#### 本地编译
Expand All @@ -70,14 +74,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] 打开文件夹(已成功
- [ ] 多国语言支持(暂时不考虑,反正鬼佬也不用(不是
- [ ] 优化界面
- [ ] 优化代码
Expand Down Expand Up @@ -109,7 +114,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=星标
Expand Down
2 changes: 2 additions & 0 deletions src/about.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
});
}
75 changes: 68 additions & 7 deletions src/confirmation.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use eframe::egui;
use crate::logger;
use crate::delete;
use crate::utils;

pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option<bool> {
pub fn show_confirmation(ctx: &egui::Context, message: &str, status: &Option<String>) -> Option<bool> {
let mut result = None;

egui::Window::new("确认操作")
Expand All @@ -9,16 +12,74 @@ pub fn show_confirmation(ctx: &egui::Context, message: &str) -> Option<bool> {
.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);
}
if ui.button("取消").clicked() {
result = Some(false);
println!("用户取消操作");
if status.is_some() {
if ui.button("关闭").clicked() {
result = Some(false);
}
} else {
if ui.button("确认").clicked() {
result = Some(true);
}
if ui.button("取消").clicked() {
result = Some(false);
println!("用户取消操作");
}
}
});
});

result
}

pub fn handle_delete_confirmation(
ctx: &egui::Context,
confirm_delete: &mut Option<(String, bool)>,
selected_appdata_folder: &str,
status: &mut Option<String>,
folder_data: &mut Vec<(String, u64)>, // 新增参数
) {
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) {
if confirm {
if let Some(base_path) = utils::get_appdata_dir(selected_appdata_folder) {
let full_path = base_path.join(&folder_name);
match delete::delete_folder(&full_path) {
Ok(_) => {
// 检查文件夹是否已成功删除
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));
}
}
Err(err) => {
eprintln!("Error: {}", err);
logger::log_error(&format!("Error: {}", err));
*status = Some(format!("删除文件夹 {} 时发生错误: {}", folder_name, err));
}
}
} else {
eprintln!("无法获取 {} 文件夹路径", selected_appdata_folder);
logger::log_error(&format!(
"无法获取 {} 文件夹路径",
selected_appdata_folder
));
*status = Some(format!("无法获取 {} 文件夹路径", selected_appdata_folder));
}
} else {
*confirm_delete = None; // 用户选择关闭或取消
}
}
}
}
2 changes: 2 additions & 0 deletions src/scanner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ pub fn scan_appdata(tx: Sender<(String, u64)>, folder_type: &str) {
}
}
}
// 发送一个特殊标志,表示扫描完成
tx.send(("__SCAN_COMPLETE__".to_string(), 0)).unwrap();
});
}
}
Expand Down
Loading

0 comments on commit f5cc278

Please sign in to comment.