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>
43 lines
1.5 KiB
JavaScript
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',
|
|
},
|
|
});
|