mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-01-10 18:21:15 +00:00
Service worker fixes
This commit is contained in:
parent
a9f3940e22
commit
05b6e93d13
20
app.js
20
app.js
@ -362,8 +362,10 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
progressCircular.className = 'progress-circular';
|
||||
controlsContainer.appendChild(progressCircular);
|
||||
|
||||
installBtn.addEventListener('click', () => {
|
||||
if (navigator.serviceWorker.controller) {
|
||||
installBtn.addEventListener('click', async () => {
|
||||
if (navigator.serviceWorker && navigator.serviceWorker.controller) {
|
||||
await requestPersistentStorage();
|
||||
|
||||
const selectedLanguage = languageSelect.value;
|
||||
installBtn.style.display = 'none';
|
||||
uninstallBtn.style.display = 'none';
|
||||
@ -390,6 +392,20 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
checkInitialCacheStatus();
|
||||
});
|
||||
|
||||
async function requestPersistentStorage() {
|
||||
if (navigator.storage && navigator.storage.persist) {
|
||||
const isPersisted = await navigator.storage.persisted();
|
||||
if (!isPersisted) {
|
||||
const wasGranted = await navigator.storage.persist();
|
||||
if (wasGranted) {
|
||||
console.log('Persistent storage was granted.');
|
||||
} else {
|
||||
console.log('Persistent storage request was denied.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkInitialCacheStatus() {
|
||||
if (navigator.serviceWorker.controller) {
|
||||
const selectedLanguage = languageSelect.value;
|
||||
|
||||
75
sw.js
75
sw.js
@ -13,9 +13,9 @@ const coreAppFiles = [
|
||||
'/', '/index.html', '/cancel_off.webp', '/cancel_on.webp', '/cdspin.gif',
|
||||
'/configure_off.webp', '/configure_on.webp', '/favicon.png', '/favicon.svg',
|
||||
'/free_stuff_off.webp', '/free_stuff_on.webp', '/install_off.webp', '/install_on.webp',
|
||||
'/island.webp', '/isle.js', '/isle.wasm', '/poster.pdf', '/read_me_off.webp',
|
||||
'/island.webp', '/isle.js', '/isle.wasm', '/poster.pdf', '/read_me_off.webp',
|
||||
'/read_me_on.webp', '/run_game_off.webp', '/run_game_on.webp', '/shark.webp',
|
||||
'/uninstall_off.webp', '/uninstall_on.webp', 'app.js', 'style.css', 'manifest.json'
|
||||
'/uninstall_off.webp', '/uninstall_on.webp', '/app.js', '/style.css', '/manifest.json'
|
||||
];
|
||||
|
||||
const gameFiles = [
|
||||
@ -45,6 +45,7 @@ self.addEventListener('install', (event) => {
|
||||
});
|
||||
})
|
||||
);
|
||||
self.skipWaiting();
|
||||
});
|
||||
|
||||
registerRoute(
|
||||
@ -131,43 +132,36 @@ async function installLanguagePack(language, client) {
|
||||
|
||||
for (const file of fileMetadata) {
|
||||
const request = new Request(file.url, { headers: { 'Accept-Language': language } });
|
||||
const response = await fetch(request);
|
||||
|
||||
try {
|
||||
const response = await fetch(request);
|
||||
|
||||
if (!response.ok || !response.body) {
|
||||
throw new Error(`Failed to fetch ${file.url}`);
|
||||
}
|
||||
|
||||
const [streamForCaching, streamForProgress] = response.body.tee();
|
||||
|
||||
const responseToCache = new Response(streamForCaching, response);
|
||||
const cachePromise = cache.put(request, responseToCache);
|
||||
|
||||
const reader = streamForProgress.getReader();
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
|
||||
bytesDownloaded += value.length;
|
||||
const now = Date.now();
|
||||
|
||||
if (now - lastProgressUpdate > THROTTLE_MS) {
|
||||
lastProgressUpdate = now;
|
||||
client.postMessage({
|
||||
action: 'install_progress',
|
||||
progress: (bytesDownloaded / totalBytesToDownload) * 100,
|
||||
language: language
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
await cachePromise;
|
||||
} catch (error) {
|
||||
console.error("Aborting installation due to a persistent error:", error);
|
||||
await caches.delete(cacheName);
|
||||
client.postMessage({ action: 'install_failed', language: language });
|
||||
if (!response.ok || !response.body) {
|
||||
throw new Error(`Failed to fetch ${file.url}`);
|
||||
}
|
||||
|
||||
const [streamForCaching, streamForProgress] = response.body.tee();
|
||||
|
||||
const responseToCache = new Response(streamForCaching, response);
|
||||
const cachePromise = cache.put(request, responseToCache);
|
||||
|
||||
const reader = streamForProgress.getReader();
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
|
||||
bytesDownloaded += value.length;
|
||||
const now = Date.now();
|
||||
|
||||
if (now - lastProgressUpdate > THROTTLE_MS) {
|
||||
lastProgressUpdate = now;
|
||||
client.postMessage({
|
||||
action: 'install_progress',
|
||||
progress: (bytesDownloaded / totalBytesToDownload) * 100,
|
||||
language: language
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
await cachePromise;
|
||||
}
|
||||
|
||||
client.postMessage({
|
||||
@ -177,8 +171,9 @@ async function installLanguagePack(language, client) {
|
||||
});
|
||||
client.postMessage({ action: 'install_complete', success: true, language: language });
|
||||
} catch (error) {
|
||||
console.error('Error during language pack installation:', error);
|
||||
client.postMessage({ action: 'install_failed', success: false, language: language, error: error.message });
|
||||
console.error("Aborting installation due to an error:", error);
|
||||
await caches.delete(cacheName);
|
||||
client.postMessage({ action: 'install_failed', language: language });
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,5 +209,5 @@ self.addEventListener('activate', (event) => {
|
||||
);
|
||||
})
|
||||
);
|
||||
self.clients.claim();
|
||||
event.waitUntil(self.clients.claim());
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user