fix: process sync items after fetch completes

This commit is contained in:
thecodrr
2022-03-30 23:16:38 +05:00
parent 2cbe8dffd8
commit 32a2d79409

View File

@@ -151,30 +151,33 @@ class Sync {
const serverResponse = await new Promise((resolve, reject) => {
let serverLastSynced = 0;
let _synced = false;
let items = [];
this.connection.stream("FetchItems", lastSynced).subscribe({
next: async (/** @type {SyncTransferItem} */ syncStatus) => {
next: (/** @type {SyncTransferItem} */ syncStatus) => {
const { item, synced, lastSynced } = syncStatus;
serverLastSynced = lastSynced;
_synced = synced;
if (synced || !item) return;
await this.onSyncItem(syncStatus);
items.push(syncStatus);
},
complete: () => {
resolve({ synced: _synced, lastSynced: serverLastSynced });
resolve({ synced: _synced, lastSynced: serverLastSynced, items });
},
error: reject,
});
});
for (let item of serverResponse.items) {
await this.onSyncItem(item);
}
if (await this.conflicts.check()) {
throw new Error(
"Merge conflicts detected. Please resolve all conflicts to continue syncing."
);
}
return serverResponse;
return { lastSynced: serverResponse.lastSynced };
}
async collect(lastSynced) {
@@ -316,10 +319,12 @@ class Sync {
*/
async onSyncItem(syncStatus) {
const { current, item: itemJSON, itemType, total } = syncStatus;
sendSyncProgressEvent(this.db.eventManager, "download", total, current);
const item = JSON.parse(itemJSON);
await this.merger.mergeItem(itemType, item);
sendSyncProgressEvent(this.db.eventManager, "download", total, current);
await this.merger.mergeItem(itemType, item).then(() => {
console.log("Merge complete", item.id);
});
}
/**