下载/主界面优化

This commit is contained in:
2026-07-22 22:26:40 +08:00
parent f7d3c13f35
commit 95a69b0017
16 changed files with 295 additions and 106 deletions
+11 -12
View File
@@ -142,7 +142,7 @@ export const moduleIconMap: Record<string, Component> = {
## 进程管理
需要管理外部子进程的模块(如 mihomo、aria2)通过 `ModuleProcessConfig` 声明进程配置。
需要管理外部子进程的模块(如 mihomo)通过 `ModuleProcessConfig` 声明进程配置。下载器模块使用进程内自建下载引擎,不涉及外部子进程管理。
### 配置示例
@@ -370,8 +370,7 @@ appStore.toggleModule(moduleId, enabled)
- `ProcessManager::start()` 启动 mihomo 等内核
- `ProcessManager::check_and_cleanup()` 崩溃重启
- 任何调用 `mihomo.exe -v``aria2c --version` 等查询版本的场景
- 未来下载器模块启动 aria2 时同样适用
- 任何调用 `mihomo.exe -v` 等查询版本的场景
跨平台:非 Windows 平台该函数为空实现,无需条件编译。
@@ -398,7 +397,7 @@ thread::spawn(move || {
### 后端:内核/二进制下载用流式 + 事件推送
`mihomo_manager.rs``install_kernel` 确立了"下载二进制资源"的标准模式,未来下载器模块下载 aria2 内核时应复用:
`mihomo_manager.rs``install_kernel` 确立了"下载二进制资源"的标准模式,未来若有其他模块需要下载外部内核时应复用:
- **流式下载**`reqwest::Response::bytes_stream()` + `futures_util::StreamExt`,避免大文件一次性读入内存
- **进度事件**:通过 `app.emit("xxx-install-progress", progress)` 推送,事件载荷结构参考 `InstallProgress`
@@ -550,21 +549,21 @@ const pathDisplay = computed(() => {
`<title>` 放完整路径,显示文本用 `pathDisplay`,复制时复制完整路径。
### 前端:任务历史 localStorage 持久化(下载器模块模式)
### 前端:任务历史持久化(下载器模块模式)
子进程未启动时仍想展示历史数据(如下载任务列表),可在 store 中用 localStorage 保存最近一次的任务快照
下载引擎在进程内运行,状态通过 `engine_state.json` 持久化到磁盘。前端 store 的做法
- 每次全量刷新后调用 `persistHistory()` 保存(合并去重,按状态优先级排序,限制条数如 200)
- `onMounted` 时无论子进程是否运行都先调用 `loadHistory()` 填充到 `stoppedTasks`
- 子进程启动后实时数据会覆盖历史快照
- `onMounted` 时调用 `store.init()`,一次性加载 status/settings/extensionInfo/tasks
- 通过 Tauri 事件 `download-progress``download-complete``download-added` 实时更新任务状态
- 引擎在 `Storage::new` 时自动创建数据目录,`save` 时兜底重建父目录,避免路径不存在错误
此模式适用于任何"进程运行时也要展示历史"的场景。
此模式适用于任何"引擎在进程运行、状态需持久化"的场景。
### 前端:轻量设置 Dialog(替代独立 Tab)
模块设置项较多时,传统做法是单独开一个"设置"Tab。但任务页工具栏需要快速调整少量核心设置(如下载目录、并发数),切到设置 Tab 再切回来体验割裂。
**模式**:在任务工具栏放一个"下载设置"按钮,点击弹出 Dialog,包含核心设置项(与设置页共用 `store.settings`),保存时调用 `handleSaveSettings`重启子进程应用配置)并自动关闭弹窗。完整设置仍保留在"设置"Tab。
**模式**:在任务工具栏放一个"下载设置"按钮,点击弹出 Dialog,包含核心设置项(与设置页共用 `store.settings`),保存时调用 `handleSaveSettings`引擎立即应用配置,无需重启)并自动关闭弹窗。完整设置仍保留在"设置"Tab。
适用场景:需要在任务页快速调整的少量高频设置;若设置项不多,可完全用 Dialog 替代设置 Tab。
@@ -621,4 +620,4 @@ const formatEta = (seconds: number): string => {
1. `quit_app` Tauri 命令(前端 `appWindow.destroy()` 触发)
2. 系统托盘的退出菜单项
漏掉任何一个都会导致子进程残留(如 aria2 继续占用端口、mihomo 系统代理未清除)。新增管理子进程的模块时,检查这两处是否都调用了清理逻辑。
漏掉任何一个都会导致子进程残留(如 mihomo 继续占用端口、系统代理未清除)。新增管理子进程的模块时,检查这两处是否都调用了清理逻辑。