fix: validate recording length using audio duration
All checks were successful
Build & Deploy to K3s / build-and-deploy (push) Successful in 35s
All checks were successful
Build & Deploy to K3s / build-and-deploy (push) Successful in 35s
This commit is contained in:
parent
dfde1c4995
commit
6dd7d2c4e5
@ -45,6 +45,31 @@ const tips = [
|
||||
"Tu peux ajouter une envie : \"quelque chose de rapide\" ou \"plutôt épicé\".",
|
||||
]
|
||||
|
||||
const MIN_RECORDING_SECONDS = 2
|
||||
|
||||
const getAudioDuration = (file: File): Promise<number | null> =>
|
||||
new Promise((resolve) => {
|
||||
const url = URL.createObjectURL(file)
|
||||
const audio = document.createElement("audio")
|
||||
|
||||
const cleanup = () => {
|
||||
URL.revokeObjectURL(url)
|
||||
audio.src = ""
|
||||
}
|
||||
|
||||
audio.preload = "metadata"
|
||||
audio.onloadedmetadata = () => {
|
||||
const duration = Number.isFinite(audio.duration) ? audio.duration : null
|
||||
cleanup()
|
||||
resolve(duration)
|
||||
}
|
||||
audio.onerror = () => {
|
||||
cleanup()
|
||||
resolve(null)
|
||||
}
|
||||
audio.src = url
|
||||
})
|
||||
|
||||
export default function RecipeForm() {
|
||||
const navigate = useNavigate()
|
||||
|
||||
@ -143,8 +168,8 @@ export default function RecipeForm() {
|
||||
|
||||
const handleStopRecording = async () => {
|
||||
if (!isRecording) return
|
||||
if (recordingTime < 2) {
|
||||
setError("Enregistre au moins 2 secondes pour que le chef puisse t'écouter.")
|
||||
if (recordingTime < MIN_RECORDING_SECONDS) {
|
||||
setError(`Enregistre au moins ${MIN_RECORDING_SECONDS} secondes pour que le chef puisse t'écouter.`)
|
||||
return
|
||||
}
|
||||
await stopRecording()
|
||||
@ -160,7 +185,9 @@ export default function RecipeForm() {
|
||||
|
||||
const handleSubmit = async () => {
|
||||
if (!audioFile) return
|
||||
if (audioFile.size < 5000) {
|
||||
|
||||
const audioDuration = await getAudioDuration(audioFile)
|
||||
if (audioDuration !== null && audioDuration < MIN_RECORDING_SECONDS) {
|
||||
setError("L'enregistrement est trop court. Réessaie en parlant un peu plus longtemps.")
|
||||
return
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user