fix: seed existing local data to cloud on first launch

Previously cloud sync only triggered on writes. If the user already
had training records before cloud was enabled, they'd never be pushed
— leaving the database empty until the next training session.

Now onLaunch handles both cases:
  - Local empty → restore from cloud (recovery after deletion)
  - Local has data → check cloud; if cloud empty, push existing data up

Also extract _restoreFromCloud to reduce nesting.
This commit is contained in:
2026-06-04 17:29:13 +08:00
parent ec52eb7b0d
commit fa8d8e7b4b
+18 -4
View File
@@ -24,10 +24,26 @@ App({
this.globalData.theme = themeMod.getCurrentTheme()
// If local records are empty, try pulling from cloud
// Sync with cloud: pull on empty local, push on empty cloud
const records = wx.getStorageSync('training_records')
if (!records || Object.keys(records).length === 0) {
cloud.pullAll().then((cloudData) => {
// Case 1: Fresh install — restore from cloud
cloud.pullAll().then(cloudData => this._restoreFromCloud(cloudData))
} else {
// Case 2: Has local data — check if cloud needs seeding
cloud.pullAll().then(cloudData => {
if (!cloudData) {
// Cloud empty: push existing local data up
cloud.pushAll()
} else {
// Both have data — trust local (latest) and re-push
cloud.pushAll()
}
})
}
},
_restoreFromCloud(cloudData) {
if (!cloudData) return
try {
if (cloudData.records && Object.keys(cloudData.records).length > 0) {
@@ -45,8 +61,6 @@ App({
} catch (e) {
console.error('Cloud restore failed:', e)
}
})
}
},
globalData: {