* 直接更新文档的同步状态(使用 metaDb) * 注意:不修改文档内容,只更新元数据 * @param docId 文档 ID * @param doc 文档对象(如果需要创建文档) * @param createIfNotExists 如果文档不存在,是否创建
(
docId: string,
doc: any,
createIfNotExists = false
)
| 717 | * @param createIfNotExists 如果文档不存在,是否创建 |
| 718 | */ |
| 719 | private async updateDocSyncStatus( |
| 720 | docId: string, |
| 721 | doc: any, |
| 722 | createIfNotExists = false |
| 723 | ): Promise<void> { |
| 724 | const mainDb = (this.db as any).mainDb |
| 725 | const metaDb = (this.db as any).metaDb |
| 726 | const env = (this.db as any).env |
| 727 | |
| 728 | env.transactionSync(() => { |
| 729 | // 检查文档是否存在 |
| 730 | const existingDoc = mainDb.get(docId) |
| 731 | |
| 732 | if (!existingDoc && !createIfNotExists) { |
| 733 | console.warn(`[Sync] updateDocSyncStatus: 文档不存在 ${docId}`) |
| 734 | return |
| 735 | } |
| 736 | |
| 737 | // 如果文档不存在且需要创建,或者文档内容有变化 |
| 738 | if (doc) { |
| 739 | // 移除同步字段,这些字段存储在 metaDb 中 |
| 740 | const { _cloudSynced, _lastModified, ...docWithoutSyncFields } = doc |
| 741 | mainDb.putSync(docId, JSON.stringify(docWithoutSyncFields)) |
| 742 | } |
| 743 | |
| 744 | // 获取或创建元数据 |
| 745 | const existingMetaStr = metaDb.get(docId) |
| 746 | let meta: any |
| 747 | |
| 748 | if (existingMetaStr) { |
| 749 | // 解析现有元数据 |
| 750 | if (existingMetaStr.startsWith('{')) { |
| 751 | meta = JSON.parse(existingMetaStr) |
| 752 | } else { |
| 753 | meta = { _rev: existingMetaStr } |
| 754 | } |
| 755 | // 更新版本号和修改时间(使用云端文档的值) |
| 756 | if (doc._rev) { |
| 757 | meta._rev = doc._rev |
| 758 | } |
| 759 | if (doc._lastModified) { |
| 760 | meta._lastModified = doc._lastModified |
| 761 | } |
| 762 | } else { |
| 763 | // 创建新元数据 |
| 764 | meta = { |
| 765 | _rev: doc._rev || '1-' + Math.random().toString(36).substring(2, 15), |
| 766 | _lastModified: doc._lastModified || Date.now() |
| 767 | } |
| 768 | } |
| 769 | |
| 770 | // 更新同步状态 |
| 771 | meta._cloudSynced = true |
| 772 | |
| 773 | // 保存元数据 |
| 774 | metaDb.putSync(docId, JSON.stringify(meta)) |
| 775 | }) |
| 776 | } |
no test coverage detected