添加wiki

This commit is contained in:
DelLevin-Home
2026-06-03 18:42:32 +08:00
parent f2842afd32
commit ea7381d0bc
19 changed files with 1431 additions and 7 deletions

93
Wiki/Sync-System.md Normal file
View File

@@ -0,0 +1,93 @@
# 同步系统
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)