From 7cf42ea1d49b8c5b568bc2d35549bfd51589aa8f Mon Sep 17 00:00:00 2001 From: scayac Date: Mon, 6 Oct 2025 14:06:48 +0200 Subject: [PATCH] Gestion beep mp3 ok et error --- main/templates/scan.html | 42 +++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/main/templates/scan.html b/main/templates/scan.html index dfe3134..94ac612 100644 --- a/main/templates/scan.html +++ b/main/templates/scan.html @@ -105,16 +105,18 @@ document.addEventListener('DOMContentLoaded', function() { // plus de bouton OK, plus de gestion de clic }); -function beep() { - const ctx = new(window.AudioContext || window.webkitAudioContext)(); - const oscillator = ctx.createOscillator(); - oscillator.type = 'sine'; - oscillator.frequency.setValueAtTime(1000, ctx.currentTime); - oscillator.connect(ctx.destination); - oscillator.start(); - setTimeout(() => { oscillator.stop(); ctx.close(); }, 150); +function playSound(type) { + if (typeof window.beepEnabled !== 'undefined' && !window.beepEnabled) return; + let audio; + if (type === 'ok') { + audio = new Audio("{% static 'mp3/ok.mp3' %}"); + } else { + audio = new Audio("{% static 'mp3/error.mp3' %}"); + } + audio.play(); } + let lastScanned = ''; let html5Qrcode; @@ -187,7 +189,6 @@ function onScanSuccess(decodedText, decodedResult) { if (decodedText === lastScanned || window.scanDebounce) return; window.scanDebounce = true; lastScanned = decodedText; - beep(); const courseId = getCourseIdFromUrl(); if (!courseId) { window.scanDebounce = false; @@ -205,21 +206,28 @@ function onScanSuccess(decodedText, decodedResult) { .then(response => response.text()) .then(html => { document.getElementById('scanResult').innerHTML = html; + // Détecte succès ou erreur selon la présence d'une classe d'erreur dans la réponse + if (html.includes('alert-danger')) { + playSound('error'); + } else { + playSound('ok'); + } setTimeout(function() { window.scanDebounce = false; }, 100); // 100ms de délai avant d'autoriser un nouveau scan }) .catch(() => { + playSound('error'); window.scanDebounce = false; }); } document.addEventListener('DOMContentLoaded', function() { const beepBtn = document.getElementById('toggleBeep'); const beepIcon = document.getElementById('beepIcon'); - let beepEnabled = true; + window.beepEnabled = true; beepBtn.onclick = function() { - beepEnabled = !beepEnabled; - if (beepEnabled) { + window.beepEnabled = !window.beepEnabled; + if (window.beepEnabled) { beepIcon.classList.remove('fa-volume-mute'); beepIcon.classList.add('fa-volume-up'); beepBtn.title = 'Désactiver bip scan'; @@ -229,16 +237,6 @@ document.addEventListener('DOMContentLoaded', function() { beepBtn.title = 'Activer bip scan'; } }; - window.beep = function() { - if (!beepEnabled) return; - const ctx = new(window.AudioContext || window.webkitAudioContext)(); - const oscillator = ctx.createOscillator(); - oscillator.type = 'sine'; - oscillator.frequency.setValueAtTime(1000, ctx.currentTime); - oscillator.connect(ctx.destination); - oscillator.start(); - setTimeout(() => { oscillator.stop(); ctx.close(); }, 150); - }; }); Html5Qrcode.getCameras().then(cameras => {