fix firefox worker problem

This commit is contained in:
AnisHADJARAB 2024-11-15 12:34:11 +00:00
parent 6f21551956
commit 70b363caa8
4 changed files with 46 additions and 7 deletions

View File

@ -0,0 +1,20 @@
const addResourcesToCache = async (resources) => {
const cache = await caches.open("v1");
await cache.addAll(resources);
};
self.addEventListener("install", (event) => {
event.waitUntil(
addResourcesToCache([
"/",
"/index.html",
"/style.css",
"/app.js",
"/image-list.js",
"/star-wars-logo.jpg",
"/gallery/bountyHunters.jpg",
"/gallery/myLittleVader.jpg",
"/gallery/snowTroopers.jpg",
]),
);
});

View File

@ -1,5 +1,3 @@
import Database from '../services/database.service';
self.addEventListener('install', (event) => {
event.waitUntil(self.skipWaiting()); // Activate worker immediately
});
@ -11,7 +9,6 @@ self.addEventListener('activate', (event) => {
// Event listener for messages from clients
self.addEventListener('message', async (event) => {
const data = event.data;
const db = await Database.getInstance();
if (data.type === 'ADD_OBJECT') {
try {
@ -19,7 +16,10 @@ self.addEventListener('message', async (event) => {
const db = await openDatabase();
const tx = db.transaction(storeName, 'readwrite');
const store = tx.objectStore(storeName);
await store.put(object);
await store.put({
...object,
modified: Date.now()
});
event.ports[0].postMessage({ status: 'success', message: 'Object added or replaced successfully' });
} catch (error) {
event.ports[0].postMessage({ status: 'error', message: error.message });

View File

@ -139,7 +139,7 @@ class Database {
console.log('Received response from service worker (GET_OBJECT):', event.data);
};
public addObject(payload: { storeName: string; object: any; key: any }) {
public async addObject(payload: { storeName: string; object: any; key: any }) {
if (this.serviceWorkerRegistration?.active) {
const messageChannel = this.createMessageChannel(this.handleAddObjectResponse);
this.serviceWorkerRegistration.active.postMessage(
@ -149,10 +149,19 @@ class Database {
},
[messageChannel.port2],
);
} else {
const { storeName, object } = payload;
const db = await openDatabase();
const tx = db.transaction(storeName, 'readwrite');
const store = tx.objectStore(storeName);
await store.put({
...object,
modified: Date.now()
});
}
}
public getObject(storeName: string, key: string) {
public async getObject(storeName: string, key: string) {
if (this.serviceWorkerRegistration?.active) {
const messageChannel = this.createMessageChannel(this.handleGetObjectResponse);
@ -163,6 +172,16 @@ class Database {
},
[messageChannel.port2],
);
} else {
const db = await openDatabase();
const tx = db.transaction(storeName, 'readonly');
const store = tx.objectStore(storeName);
const result = await new Promise((resolve, reject) => {
const getRequest = store.get(key);
getRequest.onsuccess = () => resolve(getRequest.result);
getRequest.onerror = () => reject(getRequest.error);
});
console.log("🚀 ~ Database ~ result ~ result:", result)
}
}
}