From a40416a248161dd965ae42c84662df4c4a1e0c40 Mon Sep 17 00:00:00 2001 From: 4NK CI Bot Date: Thu, 18 Sep 2025 16:16:48 +0000 Subject: [PATCH] =?UTF-8?q?fix(ihm=5Fclient):=20double=20fallback=20Indexe?= =?UTF-8?q?dDB=20si=20service=20worker.ready=20=C3=A9choue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/database.service.ts | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/services/database.service.ts b/src/services/database.service.ts index a0e9034..85591c0 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -150,7 +150,7 @@ export class Database { if (payload && payload.length != 0) { activeWorker?.postMessage({ type: 'SCAN', payload }); } - }, 5000); + }, 5000); } catch (error) { console.error('Service Worker registration failed:', error); } @@ -219,8 +219,8 @@ export class Database { // Save data to db const blob = new Blob([valueBytes], {type: "application/octet-stream"}); await service.saveBlobToDb(hash, blob); - document.dispatchEvent(new CustomEvent('newDataReceived', { - detail: { + document.dispatchEvent(new CustomEvent('newDataReceived', { + detail: { processId, stateId, hash, @@ -308,8 +308,28 @@ export class Database { // Check if the service worker is active if (!this.serviceWorkerRegistration) { - // console.warn('Service worker registration is not ready. Waiting...'); - this.serviceWorkerRegistration = await navigator.serviceWorker.ready; + try { + // console.warn('Service worker registration is not ready. Waiting...'); + this.serviceWorkerRegistration = await navigator.serviceWorker.ready; + } catch (error) { + // Si le service worker n'est pas disponible, fallback vers IndexedDB direct + console.warn('Service worker not available, falling back to direct IndexedDB'); + try { + const db = await this.getDb(); + const tx = (db as any).transaction(payload.storeName, 'readwrite'); + const store = tx.objectStore(payload.storeName); + if (payload.key) { + await store.put(payload.object, payload.key); + } else { + await store.put(payload.object); + } + resolve(); + return; + } catch (dbError: any) { + reject(new Error(dbError?.message || 'IndexedDB write failed')); + return; + } + } } const activeWorker = await this.waitForServiceWorkerActivation(this.serviceWorkerRegistration); @@ -340,7 +360,7 @@ export class Database { reject(new Error(`Failed to send message to service worker: ${error}`)); } }); - } + } public batchWriting(payload: { storeName: string; objects: { key: any; object: any }[] }): Promise { return new Promise(async (resolve, reject) => {