Releases: fb0sh/ProxyDownloadManager
Release list
v0.10.0
Added
- 下载详情窗 进度地图(Progress Map):一格一个固定分片,每行 8 列,绿色自下而上填充并显示百分比
- 详情窗标题区:总进度条 + 速度 + 暂停/继续;进度地图置于第二卡片
- 引擎按写入 offset 归入固定
DownloadPart,进度事件携带 per-part 字节
Fixed
- 暂停/恢复后分片进度不再卡住;resume 使用 gob/DB 剩余任务,禁止把
downloaded清零 - 崩溃/强退后:约 1s 刷盘
downloaded+parts;启动恢复用 DB 重建 resume - 详情速度显示(修正采样门槛与重渲染干扰);操作按钮点击后立即禁用直至完成
- 多选操作后保持勾选状态
v0.9.7 — Architecture Refactoring
Added
PdmError实现serde::Serialize,Tauri 命令返回结构化错误(tagged union),前端可匹配error.kind- 前端新增
PdmError类型(src/types.ts) DownloadStateFacade新增生命周期方法on_paused(id)/on_deleted(id),封装 gob 持久化决策- 引擎集成测试:mock HTTP server + 4 个端到端测试(单引擎/并发引擎/进度事件/取消)
EventTransformer纯函数:引擎事件 → 结构化EventAction,6 个单元测试tauriClient.ts完整化:8 个新命令(exitApp, openFile, readLogs, getExtensionsDir, openExtensionsFolder, getFileIcon, checkUpdate, testProxy)DialogRenderer共享组件:消除 App.tsx 与 src-present/App.tsx 的对话框渲染重复useDialog()/useSelection()自定义 hooks,AppContext 深化- 浏览器扩展
shared/共享源码 +build.sh构建脚本 patchDownloadProgress纯函数及 5 个 vitest 测试
Changed
DownloadManager移除network依赖,test_proxy/check_update直接通过AppState调用- 所有 Tauri 命令返回
Result<T, PdmError>(不再.map_err(|e| e.to_string())) save_gob→save_resume_state,load_gob→load_resume_state(语义更清晰)- 前端
invoke()调用全部经tauriClient,零裸 invoke parse_message()从 WebSocket handle_connection 提取为纯函数 + 5 个测试sendReliable()签名简化(移除未使用的 referrer/tabTitle 参数)
Fixed
- 19 个空
catch {}块全部添加注释(预期失败 vs 需追踪的异常) - 浏览器扩展删除死代码
send()和looksLikeDownload() - 移除 content.js +
host_permissions: ["<all_urls>"](无需权限的空脚本) - 移除未使用的 zustand 依赖
v0.9.6
v0.9.5
v0.9.4
v0.9.3
fix: sync tauri.conf.json version to 0.9.3
v0.9.2
v0.9.1: Post-Review Architecture Fixes
What's Changed
5 Architecture Fixes from Post-v0.9.0 Review
1. Fix silent progress loss in flush_to_db
runtime.rs: Track per-entry flush success; failed entries stay dirty and retry on next cycle- Previously:
let _ =silently discarded DB write errors, then unconditionally marked all entries as flushed - Added integration test with real DB writes
2. Fix rate limiter blocking tokio executor
limiter.rs: Changedwait_nto async usingtokio::time::sleep- Previously:
std::thread::sleepblocked OS threads, starving the tokio executor - Locks are dropped before sleeping to avoid blocking other workers
3. Unify start/redownload download pipeline
download_manager.rs: Extracted sharedexecute_download(DownloadSpec)method- Both
start_downloadandredownload_downloadnow delegate to it - Bug fix:
redownloadnow usesprobe_service::probe_with_fallback(was bypassing it)
4. Unify DownloadStatus serialization tests
types.rs: Added JSON roundtrip test for allDownloadStatusvariantsdb.rs: Added DB roundtrip test for all variants +parse_statusedge case tests
5. Verify error event logging
- Errors already flow through
handle_event→ Logger → Log Dialog - Confirmed the logging architecture is sound
Full Changelog: v0.9.0...v0.9.1
v0.9.0: Architecture Deepening (6 Candidates)
What's Changed
Architecture Deepening — 6 Candidates Implemented
Candidate 2 — Collapse Download Type Trinity
- Replace
DownloadConfigwithEngineConfigintypes/engine_config.rs - Add
DownloadItem::to_engine_config()andDownloadState::to_engine_config() - Rename
proxy_name→proxy_urlinEngineConfig(fixes semantic inconsistency) - Remove duplicate
output_pathfield (was always identical tosave_path)
Candidate 3 — Seal Engine Resume-State Seam
- Rename
OnCancelled→OnResumeState(reflects actual purpose) WorkerPool::add_with_idacceptson_resumecallback parameterDownloadManagercreates facade-based callback viamake_resume_callback()- Engine no longer directly calls
gob::save_state(seam is sealed)
Candidate 5 — Extract Platform Utilities from cmd.rs
update.rs:AssetInfo,UpdateInfo,GithubRelease,GithubAsset,compare_versions,current_platform_suffix,check_updatecommandplatform.rs:sync_autostart,deploy_extensions,copy_dir_recursive,resolve_extensions_dircmd.rsshrinks from 434 to ~180 lines (pure Tauri command routing)
Candidate 4 — Unify Event Vocabulary
event_bus.rs:FrontendEventenum (single source of truth for event names)EventBusstruct wrapsAppHandle::emit- Remove
EmittedEventstruct and directapp_handle.emitcalls fromcmd.rs constants/events.ts:EVENTSobject mirrorsFrontendEventvariants
Candidate 6 — Frontend Context Provider
contexts/AppContext.tsx:AppProviderownsdialog,selectedIds,filtertauriClient.ts: plain object export replacingtauriCommands()functionApp.tsx: usesuseAppContext()instead ofuseStatefor stateLayout.tsx: reads from context, 19→11 props (state props removed)
Candidate 1 — Deepen DownloadManager Orchestrator
services/chunk_planner.rs:compute_connection_count,plan_chunks,check_disk_spaceservices/probe_service.rs:probe_with_fallback,build_user_agentsdownload_manager.rs: inline logic replaced with service calls
Files Changed
- Created:
types/engine_config.rs,event_bus.rs,update.rs,platform.rs,services/mod.rs,services/chunk_planner.rs,services/probe_service.rs,contexts/AppContext.tsx,tauriClient.ts,constants/events.ts - Deleted:
hooks/useTauriCommands.ts - Modified: 16 existing files across backend and frontend
Full Changelog: v0.8.1...v0.9.0
v0.8.1: PdmError Structured Error Enum
What's Changed
PdmError Structured Error Enum
Replaced Result<T, String> with PdmResult<T> across the entire Rust backend, introducing a typed PdmError enum with 10 variants:
Cancelled— download cancelled by userHttp(u16)— HTTP status code errorClientBuild(String)— HTTP client construction failureProbe(String)— URL probe failedNotFound(u64)— download not foundDb(String)— database errorConfig(String)— configuration errorIo(String)— I/O errorNetwork(String)— network errorOther(String)— generic fallback
Automatic conversion via From impls for reqwest::Error, rusqlite::Error, io::Error, String, &str, PoisonError, and serde_json::Error. The Tauri command layer (cmd.rs) retains String for IPC compatibility.
Files Changed
types.rs— PdmError enum, Display, Error trait, From impls, PdmResult aliasdb.rs— all methods return PdmResultdownload_manager.rs— all methods return PdmResultengine/mod.rs— DownloadEngine trait returns PdmResultengine/concurrent.rs— download() returns PdmResult, typed errorsengine/single.rs— uses PdmError::Cancelled/Http/Io/Networkworker.rs— add_with_id returns PdmResultprobe.rs— returns PdmResultconfig.rs— save() returns PdmResultcmd.rs— DM calls use .map_err for Tauri IPC boundary
Full Changelog: v0.8.0...v0.8.1