diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-17 15:25:52 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-17 15:25:52 +0300 |
| commit | 914bd7cd6aa14e839332a98d91c30b19865b0cf2 (patch) | |
| tree | 02b11537237a204048589e14ed24938b805e42f7 /player-server/web/sw.js | |
| parent | 3b24f0e1be832584d6550e8cc3e5d24329f66f90 (diff) | |
Restructure repo: move Go server into player-server/
Diffstat (limited to 'player-server/web/sw.js')
| -rw-r--r-- | player-server/web/sw.js | 72 |
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)) + ); +}); |
