diff --git a/public/database.worker.js b/public/database.worker.js index 3feb189..a24731d 100755 --- a/public/database.worker.js +++ b/public/database.worker.js @@ -28,41 +28,48 @@ self.addEventListener('message', async (event) => { } catch (error) { event.source.postMessage({ status: 'error', message: error.message }); } - } else if (data.type === 'ADD_OBJECT') { - try { - const { storeName, object, key } = data.payload; - const db = await openDatabase(); - const tx = db.transaction(storeName, 'readwrite'); - const store = tx.objectStore(storeName); - - if (key) { - await store.put(object, key); - } else { - await store.put(object); - } - - event.ports[0].postMessage({ status: 'success', message: '' }); - } catch (error) { - event.ports[0].postMessage({ status: 'error', message: error.message }); - } - } else if (data.type === 'BATCH_WRITING') { - const { storeName, objects } = data.payload; - const db = await openDatabase(); - const tx = db.transaction(storeName, 'readwrite'); - const store = tx.objectStore(storeName); - - for (const { key, object } of objects) { - if (key) { - await store.put(object, key); - } else { - await store.put(object); - } - } - - await tx.done; } }); +// ============================================ +// DATABASE COMMUNICATION +// ============================================ + +async function requestFromMainThread(client, action, payload) { + return new Promise((resolve, reject) => { + const messageId = `sw_${Date.now()}_${Math.random()}`; + + const messageHandler = (event) => { + if (event.data.id === messageId) { + self.removeEventListener('message', messageHandler); + if (event.data.type === 'DB_RESPONSE') { + resolve(event.data.result); + } else if (event.data.type === 'DB_ERROR') { + reject(new Error(event.data.error)); + } + } + }; + + self.addEventListener('message', messageHandler); + + client.postMessage({ + type: 'DB_REQUEST', + id: messageId, + action, + payload + }); + + setTimeout(() => { + self.removeEventListener('message', messageHandler); + reject(new Error('Database request timeout')); + }, 10000); + }); +} + +// ============================================ +// SCAN LOGIC +// ============================================ + async function scanMissingData(processesToScan) { console.log('Scanning for missing data...'); const myProcesses = await getProcesses(processesToScan);