Fix: AudioPlayer startet jetzt korrekt bei startTime + Deployment-Version

- deploy.sh übergibt jetzt explizit APP_VERSION als Build-Argument
- AudioPlayer setzt startTime korrekt beim ersten manuellen Play
- Verbesserte Position-Logik in togglePlay() mit Timeout-Bestätigung
- Behebt Problem, dass Specials beim ersten Segment statt bei startTime starteten
This commit is contained in:
Hördle Bot
2026-01-24 12:51:50 +01:00
parent 71c7f2aab5
commit 6be813fb00
2 changed files with 60 additions and 10 deletions

View File

@@ -96,10 +96,13 @@ const AudioPlayer = forwardRef<AudioPlayerRef, AudioPlayerProps>(({ src, unlocke
}
}, 150);
}
} else if (startTime !== undefined && audioRef.current.currentTime < startTime) {
// If startTime is set and currentTime is before it, reset to startTime
// This handles the case where the audio element was reset or reloaded
audioRef.current.currentTime = startTime;
} else if (startTime !== undefined && startTime > 0) {
// If startTime is set and we haven't processed changes, ensure currentTime is at least at startTime
// This handles the case where the audio element was reset or reloaded, or when manually playing for the first time
const current = audioRef.current.currentTime;
if (current < startTime) {
audioRef.current.currentTime = startTime;
}
}
}
}, [src, unlockedSeconds, startTime, autoPlay, processedSrc, processedUnlockedSeconds]);
@@ -145,16 +148,31 @@ const AudioPlayer = forwardRef<AudioPlayerRef, AudioPlayerProps>(({ src, unlocke
audioRef.current.pause();
setIsPlaying(false);
} else {
// Check if we need to reset to startTime
// Ensure we're at the correct position before playing
const current = audioRef.current.currentTime;
const elapsed = current - startTime;
// Reset if: never played before, current position is before startTime, or we've exceeded the unlocked segment
if (!hasPlayedOnce || current < startTime || elapsed >= unlockedSeconds) {
// Reset to start of segment
audioRef.current.currentTime = startTime;
// Determine target position
let targetPos = startTime;
// If we've played before and we're within the unlocked segment, continue from current position
if (hasPlayedOnce && current >= startTime && elapsed < unlockedSeconds) {
targetPos = current; // Continue from current position
} else {
// Reset to start of segment if: never played, before startTime, or exceeded unlocked segment
targetPos = startTime;
}
// Set position before playing
audioRef.current.currentTime = targetPos;
// Ensure position sticks (browser might reset it)
setTimeout(() => {
if (audioRef.current && Math.abs(audioRef.current.currentTime - targetPos) > 0.5) {
audioRef.current.currentTime = targetPos;
}
}, 50);
audioRef.current.play();
setIsPlaying(true);
onPlay?.();