From 14fa2e6c787a4c0d484f8f69af139ff4473bdbfc Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Sun, 1 Oct 2023 18:42:10 -0700 Subject: [PATCH] sync refactor Signed-off-by: Varun Patil --- src/native/index.ts | 7 +++---- src/native/sync.ts | 43 ++++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/native/index.ts b/src/native/index.ts index 73053d7e..ea9fc204 100644 --- a/src/native/index.ts +++ b/src/native/index.ts @@ -146,9 +146,8 @@ export type NativeX = { /** * Initialize local sync. - * @param startTime Start time of the sync */ - localSyncInit: (startTime: number) => void; + localSyncInit: () => void; /** * Get the next batch of local sync. @@ -324,11 +323,11 @@ export async function logout() { /** * Iterate the local files on the device. */ -export async function* localSyncIter(startTime: number) { +export async function* localSyncIter() { if (!has()) return; // Initialize and iterate - nativex.localSyncInit(startTime); + nativex.localSyncInit(); while (true) { const next = nativex.localSyncNext(); diff --git a/src/native/sync.ts b/src/native/sync.ts index cce38308..b1bd446b 100644 --- a/src/native/sync.ts +++ b/src/native/sync.ts @@ -38,22 +38,39 @@ let _enabledBucketIds: number[] | null = null; */ export async function go() { // Clear local database - // await db.local.clear(); + await db.local.clear(); - for await (const sysImg of localSyncIter(0)) { - // Check if file already exists with same mtime - if (await db.local.where({ fileid: sysImg.fileid, mtime: sysImg.mtime }).first()) continue; + // Mark all entries + await db.local.where({ flag: 0 }).modify({ flag: 1 }); - // Insert new file - await db.transaction('rw', db.local, async () => { - await db.local.where({ fileid: sysImg.fileid }).delete(); - await db.local.add({ - ...sysImg, - dayid: Math.floor(sysImg.datetaken / 86400), - flag: 0, - }); - }); + for await (const sysImg of localSyncIter()) { + await syncImage(sysImg); } + + // Delete all entries with flag=1 + await db.local.where({ flag: 1 }).delete(); +} + +async function syncImage(sysImg: ISystemImage) { + // Check if file already exists with same mtime + const entry = await db.local.where({ fileid: sysImg.fileid, mtime: sysImg.mtime }).first(); + if (entry) { + // Unmark this entry + await db.local.where({ id: entry.id }).modify({ flag: 0 }); + return; + } + + // Insert new file + await db.transaction('rw', db.local, async () => { + await db.local.where({ fileid: sysImg.fileid }).delete(); + await db.local.add({ + ...sysImg, + dayid: Math.floor(sysImg.datetaken / 86400), + flag: 0, + }); + }); + + console.log('nativex, synced file', sysImg.basename); } /**