From f4836a6fa2e44240cf2e0191baf93049d82cb5ce Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 1 May 2026 15:26:54 +0200 Subject: [PATCH] feat: be more lenient on sync --- web/src/lib/stores/sync.ts | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/web/src/lib/stores/sync.ts b/web/src/lib/stores/sync.ts index f2fd99e..505b1d8 100644 --- a/web/src/lib/stores/sync.ts +++ b/web/src/lib/stores/sync.ts @@ -81,13 +81,17 @@ export async function pullChanges(): Promise { }; for (const change of changes) { - const data = typeof change.payload === 'string' - ? JSON.parse(change.payload) - : change.payload; - if (change.op === 'delete') { - await applyDelete(change.entity, change.entity_id); - } else { - await applyUpsert(change.entity, data); + try { + const data = typeof change.payload === 'string' + ? JSON.parse(change.payload) + : change.payload; + if (change.op === 'delete') { + await applyDelete(change.entity, change.entity_id); + } else { + await applyUpsert(change.entity, data); + } + } catch { + // Skip malformed change; will not block remaining changes. } } await setLastVersion(server_version); @@ -111,20 +115,20 @@ export async function coldStart(): Promise { async function applyUpsert(entity: string, data: unknown) { switch (entity) { - case 'entries': await db.entries.put(data as any); break; - case 'closed_days': await db.closed_days.put(data as any); break; - case 'closed_weeks': await db.closed_weeks.put(data as any); break; - case 'settings_history': await db.settings_history.put(data as any); break; + case 'entries': await db.entries.put(data as any); break; + case 'closed_days': await db.closed_days.put(data as any); break; + case 'closed_weeks': await db.closed_weeks.put(data as any); break; + case 'settings_history': await db.settings_history.put(data as any); break; case 'balance_adjustments': await db.balance_adjustments.put(data as any); break; } } async function applyDelete(entity: string, id: string) { switch (entity) { - case 'entries': await db.entries.delete(id); break; - case 'closed_days': await db.closed_days.delete(id); break; - case 'closed_weeks': await db.closed_weeks.delete(id); break; - case 'settings_history': await db.settings_history.delete(id); break; + case 'entries': await db.entries.delete(id); break; + case 'closed_days': await db.closed_days.delete(id); break; + case 'closed_weeks': await db.closed_weeks.delete(id); break; + case 'settings_history': await db.settings_history.delete(id); break; case 'balance_adjustments': await db.balance_adjustments.delete(id); break; } }