refactor(web+android): nur Warteschlange und Titel sichern, keine Sekunden

Das Mitschreiben der Abspielposition war zu viel des Guten: es bedeutete
staendiges Schreiben waehrend der Wiedergabe fuer einen Gewinn, den man kaum
bemerkt. Gesichert werden jetzt nur Warteschlange und aktueller Titel, der dann
von vorn beginnt.

Der eigentliche Gewinn bleibt und war der Ausloeser: unter Android war die
Now-Playing-Leiste nach dem Oeffnen leer, bis man einmal auf Play drueckte —
gesichert war nur der letzte Song, nicht die Warteschlange. Das Wiederherstellen
fuellt den Zustand jetzt ueber syncState(), also ohne Abspielen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-06 23:25:06 +02:00
1 parent 65fa950043
commit a2211a62d2
6 files changed
+25 -67

No files matched your search

+1 -34
View File
@@ -1364,25 +1364,6 @@ export function reconcileNativeState() {
} catch {}
}
// Abspielposition mitschreiben. Der Eintrag entsteht beim Titelwechsel; hier wird nur die Position
// nachgetragen, damit ein Neuladen dort weitermacht, wo du warst — nicht am Anfang des Titels.
// Gedrosselt, weil timeupdate mehrmals pro Sekunde feuert und localStorage synchron schreibt.
let _posLastWrite = 0;
export function persistPosition(force = false) {
if (HAS_BRIDGE) return; // nativ verwaltet Media3 den Zustand
const jetzt = Date.now();
if (!force && jetzt - _posLastWrite < 5000) return;
_posLastWrite = jetzt;
try {
const roh = localStorage.getItem('ns_last_played');
if (!roh) return;
const daten = JSON.parse(roh);
daten.position = S.audio?.currentTime || 0;
daten.savedAt = Math.floor(jetzt / 1000);
localStorage.setItem('ns_last_played', JSON.stringify(daten));
} catch {}
}
export function _restoreLastPlayed() {
try {
const saved = JSON.parse(localStorage.getItem('ns_last_played') || 'null');
@@ -1407,20 +1388,6 @@ export function _restoreLastPlayed() {
// Web path: prime the audio element so play button works immediately.
S.audio.src = streamUrl(s.id);
S.audio.load();
// Gespeicherte Position wiederherstellen, sobald die Dauer bekannt ist. Lag sie im letzten
// Rest des Titels, faengt der Titel lieber von vorn an — sonst spielt man beim Fortsetzen
// zwei Sekunden Abspann und springt weiter.
const pos = Number(saved.position) || 0;
if (pos > 1) {
const setzen = () => {
const rest = (S.audio.duration || 0) - pos;
if (S.audio.duration && rest > 5) {
try { S.audio.currentTime = pos; } catch {}
updateProgress();
}
S.audio.removeEventListener('loadedmetadata', setzen);
};
S.audio.addEventListener('loadedmetadata', setzen);
}
} catch {}
}