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

Method uploadLocalChanges

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

* 上传本地变更到云端

()

Source from the content-addressed store, hash-verified

276 * 上传本地变更到云端
277 */
278 private async uploadLocalChanges(): Promise<{
279 count: number
280 errors: number
281 processedDocIds: Set<string>
282 }> {
283 // 获取所有需要同步的文档(_cloudSynced === false)
284 const pendingDocs = await this.getUnsyncedDocs()
285
286 if (pendingDocs.length === 0) {
287 console.log('[Sync] 没有待上传的文档')
288 return { count: 0, errors: 0, processedDocIds: new Set() }
289 }
290
291 console.log(`[Sync] 待上传文档数量: ${pendingDocs.length}`)
292
293 let uploaded = 0
294 let errors = 0
295 const processedDocIds = new Set<string>()
296
297 for (const doc of pendingDocs) {
298 try {
299 // 跳过已处理的文档
300 if (processedDocIds.has(doc._id)) {
301 continue
302 }
303
304 // 检查云端是否有更新版本
305 const remoteDoc = await this.webdavClient.downloadDoc(doc._id)
306
307 if (remoteDoc && this.hasConflict(doc, remoteDoc)) {
308 // 冲突:使用 Last Write Wins 策略
309 const winner = doc._lastModified! > remoteDoc._lastModified! ? doc : remoteDoc
310
311 if (winner === doc) {
312 // 本地版本胜出,上传到云端
313 await this.webdavClient.uploadDoc({
314 ...doc,
315 _lastModified: Date.now()
316 })
317
318 // 更新本地同步状态
319 const updatedDoc = await this.db.promises.get(doc._id)
320 if (updatedDoc) {
321 updatedDoc._cloudSynced = true
322 await this.updateDocSyncStatus(doc._id, updatedDoc)
323 }
324
325 uploaded++
326 console.log(`[Sync] 冲突已解决: ${doc._id}, 胜出: 本地,已上传`)
327 } else {
328 // 云端版本胜出,更新本地
329 remoteDoc._cloudSynced = true
330 await this.updateDocSyncStatus(doc._id, remoteDoc)
331
332 console.log(`[Sync] 冲突已解决: ${doc._id}, 胜出: 云端,已下载`)
333 }
334
335 // 标记为已处理,避免下载阶段重复处理

Callers 1

performSyncMethod · 0.95

Calls 6

getUnsyncedDocsMethod · 0.95
hasConflictMethod · 0.95
updateDocSyncStatusMethod · 0.95
downloadDocMethod · 0.80
uploadDocMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected