Paket bauen und veroeffentlichen / paket (push) Failing after 1m21s
- /pult als installierbare Web-App (Manifest, Service Worker, Symbole) - Soundboard: Sounds vom Handy hochladen, bearbeiten, im Stream spielen ueber die neue Browser-Source /sounds - Szenen, Clip und Stummschalter: der Stream-PC waehlt sich mit eigenem Schluessel beim Hub ein (fern:verbinden), Befehle warten auf OBS - Browser-Sources melden, welche Seite sie sind Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
1.9 KiB
JavaScript
48 lines
1.9 KiB
JavaScript
/* Service Worker fuer das Pult.
|
|
*
|
|
* Er macht genau zwei Dinge: er ist da, damit sich das Pult als App
|
|
* installieren laesst, und er haelt die Huelle des Pults vor, damit es ohne
|
|
* Netz wenigstens aufgeht und "keine Verbindung" sagen kann statt einer
|
|
* leeren Fehlerseite des Browsers.
|
|
*
|
|
* Immer zuerst das Netz: nach dem Ausrollen soll sofort die neue Fassung
|
|
* laufen, nicht die aus dem Speicher. Alles, was nicht auf der Liste steht -
|
|
* Ereignisstrom, Knoepfe, Sounds, die Browser-Sources fuer OBS -, fasst er
|
|
* nicht an. Ein Pult, das einen Szenenwechsel aus dem Speicher beantwortet,
|
|
* waere schlimmer als gar keins. */
|
|
|
|
var SPEICHER = 'pult-v1';
|
|
var HUELLE = ['/pult', '/pult.css', '/pult.js', '/manifest.webmanifest',
|
|
'/icons/pult-192.png', '/icons/apple-touch-icon.png'];
|
|
|
|
self.addEventListener('install', function () { self.skipWaiting(); });
|
|
|
|
self.addEventListener('activate', function (e) {
|
|
e.waitUntil(caches.keys().then(function (namen) {
|
|
return Promise.all(namen.filter(function (n) { return n !== SPEICHER; })
|
|
.map(function (n) { return caches.delete(n); }));
|
|
}).then(function () { return self.clients.claim(); }));
|
|
});
|
|
|
|
self.addEventListener('fetch', function (e) {
|
|
var url = new URL(e.request.url);
|
|
if (e.request.method !== 'GET' || url.origin !== self.location.origin) return;
|
|
if (HUELLE.indexOf(url.pathname) === -1) return;
|
|
|
|
e.respondWith(fetch(e.request).then(function (res) {
|
|
// Nur Gelungenes merken. Die Anmeldeseite (401) gehoert nicht in den
|
|
// Speicher, sonst steht sie beim naechsten Funkloch statt des Pults da.
|
|
if (res.ok) {
|
|
var kopie = res.clone();
|
|
caches.open(SPEICHER).then(function (c) { c.put(url.pathname, kopie); });
|
|
}
|
|
return res;
|
|
}, function () {
|
|
return caches.match(url.pathname).then(function (r) {
|
|
return r || new Response('Keine Verbindung zum Hub.', {
|
|
status: 503, headers: { 'content-type': 'text/plain; charset=utf-8' },
|
|
});
|
|
});
|
|
}));
|
|
});
|