MCPcopy Create free account
hub / github.com/ZToolsCenter/ZTools / updateDocSyncStatus

Method updateDocSyncStatus

src/main/core/sync/syncEngine.ts:719–776  ·  view source on GitHub ↗

* 直接更新文档的同步状态(使用 metaDb) * 注意:不修改文档内容,只更新元数据 * @param docId 文档 ID * @param doc 文档对象(如果需要创建文档) * @param createIfNotExists 如果文档不存在,是否创建

(
    docId: string,
    doc: any,
    createIfNotExists = false
  )

Source from the content-addressed store, hash-verified

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 }

Callers 3

uploadLocalChangesMethod · 0.95
downloadRemoteChangesMethod · 0.95

Calls 4

transactionSyncMethod · 0.80
putSyncMethod · 0.80
stringifyMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected