recorder.py aktualisiert
This commit is contained in:
+19
-6
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user