35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
import { STATE_STORE, executeDBStoreRequest } from './db_shared.js';
|
|
import { isStateSaverMessage } from './contracts.js';
|
|
console.log('[StateWorker] Worker script loaded and running.');
|
|
function log(...args) {
|
|
console.log('[StateWorker]', ...args);
|
|
}
|
|
function error(...args) {
|
|
console.error('[StateWorker]', ...args);
|
|
}
|
|
const dbLogger = { info: log, error };
|
|
async function setCanvasState(id, state) {
|
|
await executeDBStoreRequest(dbLogger, [STATE_STORE], STATE_STORE, 'readwrite', 'put', { id, state }, "Error setting canvas state", {
|
|
openingMessage: null,
|
|
upgradingMessage: 'Upgrading IndexedDB in worker...',
|
|
successMessage: 'IndexedDB opened successfully in worker.',
|
|
logStoreCreation: false,
|
|
});
|
|
}
|
|
self.onmessage = async function (e) {
|
|
log('Message received from main thread:', e.data ? 'data received' : 'no data');
|
|
if (!isStateSaverMessage(e.data)) {
|
|
error('Invalid data received from main thread');
|
|
return;
|
|
}
|
|
const { state, stateKey } = e.data;
|
|
try {
|
|
log(`Saving state for key: ${stateKey}`);
|
|
await setCanvasState(stateKey, state);
|
|
log(`State saved successfully for key: ${stateKey}`);
|
|
}
|
|
catch (err) {
|
|
error(`Failed to save state for key: ${stateKey}`, err);
|
|
}
|
|
};
|