Files
NovaSonic/vite.config.js
marcandClaude Opus 5 651f979401 perf(android): Warteschlange sofort wiederherstellen, SW-Cache automatisch versionieren
Android speicherte nur die Song-Ids und lud beim Start jeden Titel EINZELN und
nacheinander ueber das Netz nach. Das dauerte Sekunden, war unzuverlaessig und
ohne Verbindung unmoeglich. Gespeichert werden jetzt die vollstaendigen Songs als
JSON — Wiederherstellen ist ein lokaler Lesevorgang, wie im Web. Der Preis ist
ein veralteter Titel oder Cover bis zum naechsten Abspielen, was die deutlich
kleinere Unschoenheit ist.

Dazu sichert MusicService.onTaskRemoved die Warteschlange beim Wegwischen der
App: dort feuert onIsPlayingChanged nicht zuverlaessig, genau dieser Fall ging
vorher verloren.

Service Worker: die Cache-Version stand handgepflegt als ns-v78 in sw.js und
wurde beim Ausliefern vergessen — die Aktivierung loescht nur Caches mit
abweichendem Namen, also blieb der alte bestehen und Nutzer mussten den
Browsercache von Hand leeren. Ein Vite-Plugin setzt sie jetzt aus der Bauzeit,
die Quelldatei bleibt unveraendert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 00:01:30 +02:00

43 lines
1.5 KiB
JavaScript

import { defineConfig } from 'vite';
import { readFileSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
/**
* Setzt die Cache-Version des Service Workers beim Bauen.
*
* Vorher stand in sw.js ein handgepflegtes `ns-v78`. Wurde es beim Ausliefern vergessen — und das
* passiert zuverlaessig —, blieb der alte Cache bestehen: die Aktivierung loescht nur Caches, deren
* Name vom aktuellen abweicht. Nutzer sahen dann alte Staende und mussten den Browsercache von Hand
* leeren, was man niemandem erklaeren moechte. Die Version kommt jetzt aus der Bauzeit, ist also bei
* jedem Ausliefern neu, und der alte Cache raeumt sich beim ersten Start selbst ab.
*/
function serviceWorkerVersion() {
return {
name: 'sw-cache-version',
closeBundle() {
const pfad = join('dist', 'sw.js');
try {
const inhalt = readFileSync(pfad, 'utf8');
const version = `ns-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}`;
const neu = inhalt.replace(/^const CACHE = '[^']*';/m, `const CACHE = '${version}';`);
if (neu === inhalt) {
this.warn('sw.js: CACHE-Konstante nicht gefunden — Version nicht gesetzt');
return;
}
writeFileSync(pfad, neu);
console.log(` Service-Worker-Cache: ${version}`);
} catch (e) {
this.warn(`sw.js konnte nicht versioniert werden: ${e.message}`);
}
},
};
}
export default defineConfig({
plugins: [serviceWorkerVersion()],
build: {
outDir: 'dist',
assetsDir: 'assets',
},
});