recorder.py aktualisiert

This commit is contained in:
2026-09-29 17:38:29 +02:00
parent 63c2198ccb
commit ac8ab17782
+19 -6
View File
@@ -1057,32 +1057,45 @@ function savePlaybackPosition(audio) {
function restorePlaybackPosition(audio) {
const key = playbackKey(audio);
if (!key) return;
if (!key) return false;
try {
const saved = JSON.parse(localStorage.getItem(key) || 'null');
if (!saved || !Number.isFinite(saved.position) || saved.position <= 0) {
return;
return false;
}
// Erst setzen, wenn die Metadaten/Dauer bekannt sind.
// Bei preload=none kann loadedmetadata erst beim ersten Abspielen
// eintreten. Deshalb wird diese Funktion auch von play/canplay
// aufgerufen.
if (Number.isFinite(audio.duration) && audio.duration > 0) {
const position = Math.min(saved.position, Math.max(0, audio.duration - 0.5));
if (position > 0) {
audio.currentTime = position;
return true;
}
}
} catch (error) {
console.warn('Wiedergabeposition konnte nicht wiederhergestellt werden:', error);
}
return false;
}
document.querySelectorAll('.finished-row audio').forEach(audio => {
let lastSaved = 0;
let positionRestored = false;
audio.addEventListener('loadedmetadata', () => {
restorePlaybackPosition(audio);
});
const tryRestorePlaybackPosition = () => {
if (!positionRestored) {
positionRestored = restorePlaybackPosition(audio);
}
};
audio.addEventListener('loadedmetadata', tryRestorePlaybackPosition);
audio.addEventListener('loadeddata', tryRestorePlaybackPosition);
audio.addEventListener('canplay', tryRestorePlaybackPosition);
audio.addEventListener('play', tryRestorePlaybackPosition);
audio.addEventListener('timeupdate', () => {
const now = Date.now();