summaryrefslogtreecommitdiff
path: root/player-server/web/sw.js
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-17 15:25:52 +0300
committerPaul Buetow <paul@buetow.org>2026-05-17 15:25:52 +0300
commit914bd7cd6aa14e839332a98d91c30b19865b0cf2 (patch)
tree02b11537237a204048589e14ed24938b805e42f7 /player-server/web/sw.js
parent3b24f0e1be832584d6550e8cc3e5d24329f66f90 (diff)
Restructure repo: move Go server into player-server/
Diffstat (limited to 'player-server/web/sw.js')
-rw-r--r--player-server/web/sw.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/player-server/web/sw.js b/player-server/web/sw.js
new file mode 100644
index 0000000..9707748
--- /dev/null
+++ b/player-server/web/sw.js
@@ -0,0 +1,72 @@
+const CACHE = 'kiss-v19';
+const ASSETS = [
+ '/',
+ '/index.html',
+ '/detach.html',
+ '/login.html',
+ '/bootstrap.html',
+ '/css/theme.css',
+ '/css/layout.css',
+ '/css/components.css',
+ '/css/player.css',
+ '/css/login.css',
+ '/js/app.js',
+ '/js/state.js',
+ '/js/api.js',
+ '/js/keyboard.js',
+ '/js/selection.js',
+ '/js/player.js',
+ '/js/playback.js',
+ '/js/imageViewer.js',
+ '/js/detach.js',
+ '/js/detachPopup.js',
+ '/js/search.js',
+ '/js/shuffle.js',
+ '/js/themes.js',
+ '/js/notes.js',
+ '/js/admin.js',
+ '/js/dom.js',
+ '/js/utils.js',
+ '/js/podcasts.js',
+ '/js/pwa.js',
+ '/js/views/admin-status.js',
+ '/js/views/help.js',
+ '/js/views/media-actions.js',
+ '/js/views/media-grid.js',
+ '/js/views/media-info.js',
+ '/js/views/playback-nav.js',
+ '/js/views/sets.js',
+ '/js/views/shares.js',
+ '/js/views/tags.js',
+ '/js/views/upload.js',
+ '/manifest.json',
+];
+
+self.addEventListener('install', (e) => {
+ e.waitUntil(caches.open(CACHE).then((c) => c.addAll(ASSETS)).then(() => self.skipWaiting()));
+});
+
+self.addEventListener('activate', (e) => {
+ e.waitUntil(
+ caches.keys().then((keys) =>
+ Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k)))
+ ).then(() => self.clients.claim())
+ );
+});
+
+self.addEventListener('fetch', (e) => {
+ if (e.request.method !== 'GET') return;
+ const url = new URL(e.request.url);
+ if (url.origin !== self.location.origin || url.pathname.startsWith('/api/')) return;
+ e.respondWith(
+ fetch(e.request)
+ .then((res) => {
+ const copy = res.clone();
+ if (ASSETS.includes(url.pathname)) {
+ caches.open(CACHE).then((c) => c.put(e.request, copy));
+ }
+ return res;
+ })
+ .catch(() => caches.match(e.request))
+ );
+});