fix: solve audio recording on iOS/Safari and fix Dockerfile health check

This commit is contained in:
2026-06-03 18:44:51 +02:00
parent 79ce42bec6
commit 4c04086d63
3 changed files with 26 additions and 14 deletions
+1 -1
View File
@@ -29,4 +29,4 @@ EXPOSE 80
# Health check to verify Nginx is actively running
HEALTHCHECK --interval=30s --timeout=5s --start-period=3s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:80/ || exit 1
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:80/ || exit 1
+19 -12
View File
@@ -61,7 +61,12 @@ export default function LiveVoiceCapture({
}
}
el.addEventListener('loadedmetadata', handleLoadedMetadata)
if (el.readyState >= 1) {
handleLoadedMetadata()
} else {
el.addEventListener('loadedmetadata', handleLoadedMetadata)
}
return () => {
el.removeEventListener('loadedmetadata', handleLoadedMetadata)
}
@@ -161,16 +166,18 @@ export default function LiveVoiceCapture({
VOICE_MEMO_MAX_DURATION_SEC,
Math.max(1, Math.round((Date.now() - startedAtRef.current) / 1000))
)
const blob = new Blob(chunksRef.current, { type: resolvedMime })
chunksRef.current = []
stopStream()
try {
assertVoiceMemoBlobSize(blob)
finishRecording(blob, resolvedMime, durationSec)
} catch {
setMicError(t('logs.live_voice_too_large'))
setPhase('idle')
}
setTimeout(() => {
const blob = new Blob(chunksRef.current, { type: resolvedMime })
chunksRef.current = []
stopStream()
try {
assertVoiceMemoBlobSize(blob)
finishRecording(blob, resolvedMime, durationSec)
} catch {
setMicError(t('logs.live_voice_too_large'))
setPhase('idle')
}
}, 50)
}
recorder.onerror = () => {
@@ -179,7 +186,7 @@ export default function LiveVoiceCapture({
}
startedAtRef.current = Date.now()
recorder.start(200)
recorder.start()
setPhase('recording')
setElapsedSec(0)
timerRef.current = window.setInterval(() => {
+6 -1
View File
@@ -47,7 +47,12 @@ export default function VoiceMemoPlayer({
}
}
el.addEventListener('loadedmetadata', handleLoadedMetadata)
if (el.readyState >= 1) {
handleLoadedMetadata()
} else {
el.addEventListener('loadedmetadata', handleLoadedMetadata)
}
return () => {
el.removeEventListener('loadedmetadata', handleLoadedMetadata)
}