From 681ca8267102f404d03bf1b4dbf16a3fd6fba12f Mon Sep 17 00:00:00 2001 From: zumbiepig <121742281+zumbiepig@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:02:59 -0700 Subject: [PATCH] . --- public/service-worker.js | 48 +++++++++++++++++++++++++++++++--------- public/sw-register.js | 21 +++++++++++++++--- 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/public/service-worker.js b/public/service-worker.js index 9c53c8d..84209bb 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -6,22 +6,50 @@ self.addEventListener('install', (event) => { caches.open(cacheName).then(async (cache) => { const response = await fetch('/cacheAssets.json'); const cacheAssets = await response.json(); - return await cache.addAll(cacheAssets); + const totalAssets = cacheAssets.length; + let cachedAssets = 0; + + for (const asset of cacheAssets) { + await cache.add(asset); + const progress = `${++cachedAssets}/${totalAssets}`; + + const clients = await self.clients.matchAll(); + clients.forEach((client) => { + client.postMessage({ + type: 'sw-install-progress', + msg: progress, + }); + }); + } }) ); }); self.addEventListener('activate', (event) => { event.waitUntil( - caches.keys().then((keyList) => { - return Promise.all( - keyList.map((key) => { - if (key !== cacheName) { - return caches.delete(key); - } - }) - ); - }) + caches + .keys() + .then((keyList) => { + return Promise.all( + keyList.map((key) => { + if (key !== cacheName) { + return caches.delete(key); + } + }) + ); + }) + .then(() => { + return self.clients.claim(); + }) + .then(() => { + return self.clients.matchAll().then((clients) => { + clients.forEach((client) => { + client.postMessage({ + type: 'sw-activation-complete', + }); + }); + }); + }) ); }); diff --git a/public/sw-register.js b/public/sw-register.js index f42eeea..18cae20 100644 --- a/public/sw-register.js +++ b/public/sw-register.js @@ -1,7 +1,22 @@ if ('serviceWorker' in navigator) { window.addEventListener('load', () => { - navigator.serviceWorker.register('/service-worker.js').catch((error) => { - console.error('Service worker registration failed:', error); - }); + navigator.serviceWorker + .register('/service-worker.js') + .then((registration) => { + console.log('Service worker registered with scope:', registration.scope); + + navigator.serviceWorker.addEventListener('message', (event) => { + if (event.data && event.data.type === 'install-progress') { + console.log(`Service worker installation progress: ${event.data.msg} assets`); + // Update your UI with the progress + } else if (event.data && event.data.type === 'activation-complete') { + console.log('Service worker installation is complete!'); + alert('Service worker installation is complete!'); + } + }); + }) + .catch((error) => { + console.error('Service worker registration failed:', error); + }); }); }