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:
1 parent
65fa950043
commit
a2211a62d2
6 files changed
+25
-67
No files matched your search
+1
-34
@@ -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 {}
|
||||
}
|
||||
Reference in new issue
Block a user