Skip to content

Feat: 支持颗粒化备份恢复 (设置/供应商/聊天/文件)#240

Draft
luosc wants to merge 2 commits intoChevey339:masterfrom
luosc:feat/granular-restore
Draft

Feat: 支持颗粒化备份恢复 (设置/供应商/聊天/文件)#240
luosc wants to merge 2 commits intoChevey339:masterfrom
luosc:feat/granular-restore

Conversation

@luosc
Copy link
Copy Markdown
Contributor

@luosc luosc commented Jan 8, 2026

Feat: 支持颗粒化备份恢复 (设置/供应商/聊天/文件)

描述

此 PR 引入了颗粒化备份恢复功能,允许用户针对不同类别的数据(设置、供应商、聊天记录、文件)单独选择恢复策略。解决了不同设备间(如手机与电脑)同步数据时,因屏幕缩放等设备特有设置被覆盖而导致体验不一致的问题。

主要变更

1. 数据模型与逻辑

  • RestoreOptions: 在 lib/core/models/backup.dart 中新增恢复选项模型,支持三种操作:
    • Merge (智能合并):保留本地现有配置,仅添加缺失项(推荐)。
    • Overwrite (覆盖):完全使用备份数据覆盖本地数据。
    • Ignore (忽略):跳过该类别的恢复。
  • DataSync 服务更新: 重构 lib/core/services/backup/data_sync.dart,实现了基于上述选项的颗粒化恢复逻辑。
    • 设置与供应商:支持按 Key 区分处理,确保如 Zoom 等设备设置可被保留。
    • 安全性:保留了原有的全量覆盖逻辑作为 fallback,当用户选择全部覆盖时,执行原有的鲁棒流程,确保数据一致性。

2. 用户界面

  • 恢复选项对话框: 在移动端 (BackupPage) 和桌面端 (DesktopBackupPane) 实现了新的内联恢复选项弹窗。
  • 用户现在可以在恢复前,清晰地看到并勾选需要恢复的内容,并为每一项指定“合并”或“覆盖”模式。
image image

测试与验证

  • 在 Android 设备上进行了测试,验证了“合并”模式下 Zoom 设置未被重置,同时新添加的供应商和聊天记录被成功恢复。
  • 验证了“完全覆盖”模式下,行为与之前版本保持一致。

luosc added 2 commits January 28, 2026 11:18
…ts/files)

This commit introduces a new feature allowing users to selectively restore data from backups.

- Added `RestoreOptions` and `RestoreAction` (Merge, Overwrite, Ignore) to `lib/core/models/backup.dart`.
- Updated `DataSync` service to handle granular restoration for Settings, Providers, Chats, and Files.
- Preserved legacy "Full Overwrite" logic for robust compatibility.
- Implemented `RestoreOptionsDialog` (inline) in both Mobile and Desktop backup pages for fine-grained control.
- Updated English/Chinese localizations for restore actions.
@luosc luosc force-pushed the feat/granular-restore branch from b439cd4 to ace8797 Compare January 28, 2026 17:07
@luosc
Copy link
Copy Markdown
Contributor Author

luosc commented Feb 6, 2026

TODO:审计所有备份项的表现。比如快捷键设置应该是系统特异的。#312

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant