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é\".",
|
"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() {
|
export default function RecipeForm() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|
||||||
@ -143,8 +168,8 @@ export default function RecipeForm() {
|
|||||||
|
|
||||||
const handleStopRecording = async () => {
|
const handleStopRecording = async () => {
|
||||||
if (!isRecording) return
|
if (!isRecording) return
|
||||||
if (recordingTime < 2) {
|
if (recordingTime < MIN_RECORDING_SECONDS) {
|
||||||
setError("Enregistre au moins 2 secondes pour que le chef puisse t'écouter.")
|
setError(`Enregistre au moins ${MIN_RECORDING_SECONDS} secondes pour que le chef puisse t'écouter.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
await stopRecording()
|
await stopRecording()
|
||||||
@ -160,7 +185,9 @@ export default function RecipeForm() {
|
|||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (!audioFile) return
|
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.")
|
setError("L'enregistrement est trop court. Réessaie en parlant un peu plus longtemps.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user