Files
MookNote/Wiki/Sync-System.md
DelLevin-Home ea7381d0bc 添加wiki
2026-06-03 18:42:32 +08:00

94 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 同步系统
MookNote 支持三种数据同步方式。
## 1. 服务端实时同步
通过激活码连接远程服务器,数据实时双向同步。
### 核心服务
#### ServerDataService (`lib/utils/sync/server_data_service.dart`)
远程 API 数据操作层,所有方法通过 HTTP POST 调用服务端接口:
```dart
// 影视
getMovies({status, limit, offset}) POST /api/data/movies
saveMovie(movie) POST /api/data/movie/save
deleteMovie(id) POST /api/data/movie/delete
// 书籍、笔记、影评、海报、书评、摘抄、标签同理
```
每个请求都附带 `code`(激活码)进行身份验证。
#### ServerSyncService (`lib/utils/sync/server_sync_service.dart`)
同步协调服务:
- `checkActivation()` — 校验激活码有效性
- `syncWithServer()` — 智能合并本地与服务端数据
- `downloadToLocal()` — 从服务端下载数据到本地(关闭同步时调用)
### 启动时校验流程
```
1. 检查 syncEnabled、syncServerUrl、syncActivationCode 是否已配置
2. 调用 /api/activate 校验激活码
3. 有效 → 更新有效期信息,继续同步模式
4. 无效/过期 → 调用 downloadToLocal() 下载数据 → 关闭同步开关
```
### 双模式切换
`AppProvider._useRemote` 控制:
```dart
bool get _useRemote {
return prefs.syncEnabled &&
prefs.syncServerUrl.isNotEmpty &&
prefs.syncActivationCode.isNotEmpty &&
ServerDataService.instance.isAvailable;
}
```
## 2. WebDAV 同步
通过 WebDAV 协议同步数据库文件和图片。
相关页面:`lib/pages/sync/webdav_sync_page.dart`
服务类:`lib/utils/sync/webdav_service.dart`
## 3. 自动本地备份
### AutoBackupService (`lib/utils/sync/auto_backup_service.dart`)
定时自动备份到设备下载目录:
- **间隔**5 分钟
- **保留数量**:最近 5 个备份文件
- **备份目录**`Download/mooknote/`Android`Documents/mooknote/`iOS
- **文件格式**`auto_backup_{yyyyMMdd_HHmmss}.zip`
### BackupService (`lib/utils/sync/backup_service.dart`)
手动备份与恢复服务,导出数据为 ZIP 文件(包含数据库和图片)。
相关页面:`lib/pages/sync/backup_page.dart`
## 同步相关配置
`UserPrefs` 中:
| 键 | 说明 |
|----|------|
| `syncServerUrl` | 服务器地址 |
| `syncActivationCode` | 激活码 |
| `syncExpiresAt` | 激活码有效期 |
| `syncIsPermanent` | 是否永久有效 |
| `syncEnabled` | 同步开关 |
| `syncLastEntryId` | 上次同步的 entry ID |
[返回首页](Home.md)