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) { function restorePlaybackPosition(audio) {
const key = playbackKey(audio); const key = playbackKey(audio);
if (!key) return; if (!key) return false;
try { try {
const saved = JSON.parse(localStorage.getItem(key) || 'null'); const saved = JSON.parse(localStorage.getItem(key) || 'null');
if (!saved || !Number.isFinite(saved.position) || saved.position <= 0) { 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) { if (Number.isFinite(audio.duration) && audio.duration > 0) {
const position = Math.min(saved.position, Math.max(0, audio.duration - 0.5)); const position = Math.min(saved.position, Math.max(0, audio.duration - 0.5));
if (position > 0) { if (position > 0) {
audio.currentTime = position; audio.currentTime = position;
return true;
} }
} }
} catch (error) { } catch (error) {
console.warn('Wiedergabeposition konnte nicht wiederhergestellt werden:', error); console.warn('Wiedergabeposition konnte nicht wiederhergestellt werden:', error);
} }
return false;
} }
document.querySelectorAll('.finished-row audio').forEach(audio => { document.querySelectorAll('.finished-row audio').forEach(audio => {
let lastSaved = 0; let lastSaved = 0;
let positionRestored = false;
audio.addEventListener('loadedmetadata', () => { const tryRestorePlaybackPosition = () => {
restorePlaybackPosition(audio); if (!positionRestored) {
}); positionRestored = restorePlaybackPosition(audio);
}
};
audio.addEventListener('loadedmetadata', tryRestorePlaybackPosition);
audio.addEventListener('loadeddata', tryRestorePlaybackPosition);
audio.addEventListener('canplay', tryRestorePlaybackPosition);
audio.addEventListener('play', tryRestorePlaybackPosition);
audio.addEventListener('timeupdate', () => { audio.addEventListener('timeupdate', () => {
const now = Date.now(); const now = Date.now();