云同步基础设施、Ludusavi 存档识别与 Archive V2
本次更新带来了云同步状态管理、Ludusavi 游戏存档自动识别、Archive V2 格式、Windows 注册表备份等重大功能,同时包含大量安全加固、性能优化和架构升级,因此版本号直接跨越到了V1.8.0。
✨ 核心功能亮点
-
🎮 Ludusavi 存档自动识别:
-
☁️ 云同步基础设施:
-
📦 压缩预设与 Archive V2 格式:
- 可选压缩预设(仅存储 / 快速 / 标准 / 极限),使用 Zstd 替代 BZip2。
- 支持同名文件。
-
🔐 存档完整性校验:
- 新增 XXH3 哈希校验,恢复前自动验证归档完整性,阻止损坏存档被应用。
-
🪟 Windows 注册表备份:
- 支持备份和恢复注册表中的游戏存档数据,附带源指纹。
-
⏪ 撤销上次恢复:
-
💾 额外覆盖备份管理:
-
⚡ 智能跳过未变更备份:
- 定时备份使用 XXH3 指纹,文件未变化时自动跳过。
🖥️ 界面与体验优化
- 🔤 自定义字体与外观设置:支持自定义字体和外观配置。
- 🔧 路径变量编辑器改版:全新设计,状态展示更清晰。
- 📋 批量删除快照:支持多选快照一键批量删除。
- 🔔 统一反馈与通知系统:集中式通知系统,统一 z-index 管理。
🐛 Bug 修复
- 云同步安全增强:修复下载/写入失败时可能丢失已有文件的问题,强化原子回滚。
- 单次写入后端防护:修复对不支持覆盖写入的后端的上传保护。
- 时间戳语义修复:修复 ZIP 时间戳保留的兼容性问题。
- Zip Slip 安全修复:防止 ZIP 路径穿越攻击。
- 备份并发错误处理:修复
backup_all中信号量获取错误传播。 - 云同步禁用报错:修复禁用时触发 unknown-backend 错误。
- 日志修复:修复日志按钮位置并改善日志轮转。
- 同名文件限制移除:移除添加游戏时过时的同名文件限制。
⚡ 性能优化
- 定时与批量备份路径优化,减少不必要的 IO。
- 侧边栏列表渲染开销降低,搜索时自动展开。
- 快照表格排序与选择性能增强。
🛠️ 开发者可能关心的变更
- 生命周期 Hook 管线:typed snapshot hook pipeline,围绕快照创建/删除、恢复前/后等事件的可组合钩子。
- IPC 层重构:game draft input + 后端 ID 分配,暴露 typed hook 和 sync 命令。
- Pre-commit Hooks:Husky + lint-staged + clippy fix + typecheck 预提交检查。
- 依赖升级:rgsm 核心版本更新至 1.8.0。
- JSON 格式变更:
- 同步状态采用多设备位置跟踪结构。
- 归档元数据升级为 V2 格式,含压缩预设和 XXH3 哈希。
- 存档配置新增
save_unit_id字段。
- 新增 Criterion 压缩算法基准测试。
🚀 发布
不知道下载哪个?推荐使用 Portable 版本(便携版),如果无法启动可能是缺少了 Webview2。
- 蓝奏云 密码:g2oy
- 123云盘 (V1.8.0 文件夹)
- Github Release
Features
- ludusavi: ✨ auto-detect save locations via Ludusavi database #264 (Sworld)
- ludusavi: ⚡ compress bundled Ludusavi manifest via rust-embed #264 (Sworld)
- import: enhance game import process with detailed failure reasons and registry path handling #264 (Sworld)
- ui: add custom font settings and appearance configuration #274 (Sworld)
- ui: implement centralized user feedback and notification system with z-index management #276 (Sworld)
- backup: ✨ managing extra overwrite backups #288 (Sworld)
- backup: ✨ skip unchanged timer auto backups with xxh3 fingerprinting and archive module refactor #309 (Sworld)
- path-variable: ✨ revamp path variable editor and status UX #312 (Sworld)
- ui: ✨ add cloud sync status panel and settings #314 (Sworld)
- backup: ✨ add batch_delete_snapshots command #314 (Sworld)
- manage: ✨ add undo last applied snapshot #315 (Sworld)
- backup: ✨ add compression presets and archive V2 format #317 (Sworld)
- backup: ✨ add stable save-unit IDs for archive prefix #320 (Sworld)
- backup: 🛡️ add archive hash (XXH3) for integrity verification #322 (Sworld)
- backup: 🗃️ add WinRegistry backup with source fingerprint #322 (Sworld)
- backup: 🗃️ add sync metadata and config backup foundation #325 (Sworld)
- hooks: ✨ add typed snapshot hook pipeline #325 (Sworld)
- cloud-sync: ✨ add sync state and session orchestration #325 (Sworld)
- frontend: ✨ harden sync settings workflows #325 (Sworld)
- ui: ✨ improve sync UX and player-facing copy #325 (Sworld)
Bug Fixes
- ui: resolve deprecation warnings and improve settings organization #285 (Sworld)
- sync: 🐛 avoid unknown-backend error when disabled #287 (Sworld)
- correct test directory path by adding trailing slash #292 (banzhe)
- disable directory creation and deletion checks for unsupported backends #305 (Sworld)
- cloud-sync: 🚑 preserve existing files on download/write failures #307 (Sworld)
- cloud-sync: 🚑 harden atomic rollback errors and unify local atomic write path #307 (Sworld)
- backup: 🐛 preserve zip timestamp semantics and legacy compatibility #308 (Sworld)
- backup: 🐛 preserve restored mtime and harden archive tests #308 (Sworld)
- add-game: 💄 remove border from launch-path picker button #312 (Sworld)
- path-variable: 🐛 scope suggestion scrolling to current input instance #312 (Sworld)
- manage: 🐛 address undo review feedback #315 (Sworld)
- backup: 🐛 handle semaphore acquire errors in backup_all #316 (Sworld)
- addgame: 🐛 remove outdated same-name file restriction #317 (Sworld)
- backup: 🔒 prevent zip slip and fix archive metadata #317 (Sworld)
- backup: 🔒 validate save-unit IDs and isolate test config paths #320 (Sworld)
- logging: fix log button location and improve log rotation #323 (Claude)
- backup: 🐛 harden registry cross-platform handling and verify UI #322 (Sworld)
- cloud-sync: 🐛 guard single-write backends in transfer uploads #333 (Sworld)
Documentation
- architecture: 📝 document cloud sync layering, IPC facade boundary, and test gates #307 (Sworld)
- agents: 📝 require TDD-first workflow for bug fixes #308 (Sworld)
- 📝 add pre-commit checks and i18n guidelines to AGENTS.md #314 (Sworld)
- 📝 add V2.0 roadmap #317 (Sworld)
Code Refactoring
- composables: extract reusable logic from MainSideBar and Settings #285 (Sworld)
- cloud-sync: 🏗️ add unified streaming transfer layer with hook extension points #307 (Sworld)
- cloud-sync: ⚡ migrate full sync flows to unified streaming transfers #307 (Sworld)
- backup: 🚚 route always-sync snapshot upload through transfer layer #307 (Sworld)
- backup: 🚚 rename backup test support module to utils #309 (Sworld)
- cloud-sync: ♻️ non-blocking cloud sync via background task manager #314 (Sworld)
- ipc: ♻️ use game draft input and backend ID allocation #320 (Sworld)
- backup: ♻️ harden registry checks and stream archive hashing #322 (Sworld)
- ipc: ♻️ expose typed hook and sync commands #325 (Sworld)
- sync: ♻️ separate per-device snapshot positions #325 (Sworld)
- hooks: ♻️ rebuild hook pipeline around explicit contexts #325 (Sworld)
Performance Improvements
- backup: ⚡ optimize timer and batch backup path #316 (Sworld)
- sidebar: ⚡ reduce list overhead and expand on search #316 (Sworld)
- table: ⚡ enhance table performance with optimized sorting and selection features #316 (Sworld)
- benchmarks: ⚡ add compression algorithms benchmark with Criterion #316 (Sworld)
Tests
- cloud-sync: ✅ add streaming regression tests and clean up formatting #307 (Sworld)
- backup: ✅ add end-to-end and legacy timestamp regression tests #308 (Sworld)
- backup: 🧪 move backup tests into dedicated module #309 (Sworld)
Continuous Integration
Chores
- ludusavi: 📦 vendor ludusavi-manifest snapshot #264 (Sworld)
- i18n: add English translation #264 (Sworld)
- update version to 1.7.0 #274 (Sworld)
- deps: bump bytes from 1.9.0 to 1.11.1 in /src-tauri #300 (dependabot[bot])
- path-variable: ♻️ remove debug logs from device fetch flow #312 (Sworld)
- release: bump version to 1.8.0 and update roadmap #332 (Sworld)



