From 8dbc657d7db5c99548770098aa591f48247b9db1 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Fri, 12 Jun 2026 16:21:13 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20correction=20de=20la=20d=C3=A9tection=20?= =?UTF-8?q?et=20du=20listing=20des=20micros=20au=20chargement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/app.js | 24 ++++++++++++++++++++++-- task.md | 1 + 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/static/app.js b/app/static/app.js index b227230..3aef600 100644 --- a/app/static/app.js +++ b/app/static/app.js @@ -32,6 +32,9 @@ function getSpeakerColorIndex(speaker) { async function populateMicList() { const sel = $('mic-select'); + if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) { + return; + } try { const devices = await navigator.mediaDevices.enumerateDevices(); const mics = devices.filter((d) => d.kind === 'audioinput'); @@ -39,6 +42,7 @@ async function populateMicList() { const current = sel.value; sel.innerHTML = ''; for (const mic of mics) { + if (!mic.deviceId) continue; // Ignorer les périphériques sans ID (permission non accordée) const opt = document.createElement('option'); opt.value = mic.deviceId; opt.textContent = mic.label || `Micro ${sel.options.length}`; @@ -267,6 +271,22 @@ $('copy-btn').onclick = copyTranscript; $('delete-btn').onclick = deleteCurrentMeeting; loadMeetings(); -// Peupler la liste des micros au chargement (et quand un périphérique change) -populateMicList(); +// Peupler la liste des micros au chargement et demander la permission si nécessaire +async function initMics() { + await populateMicList(); + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + try { + // Demander l'accès au micro temporairement pour obtenir les autorisations et les noms réels + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + // Relâcher immédiatement le micro pour éteindre le témoin d'enregistrement + stream.getTracks().forEach((t) => t.stop()); + // Re-peupler la liste maintenant que la permission est acquise + await populateMicList(); + } catch (err) { + console.log('Permission initiale micro refusée ou non disponible :', err); + } + } +} + +initMics(); navigator.mediaDevices?.addEventListener('devicechange', populateMicList); diff --git a/task.md b/task.md index add9d74..0bc1fd7 100644 --- a/task.md +++ b/task.md @@ -27,3 +27,4 @@ Vérification de la cohérence de tous les fichiers (backend et frontend) et tes - Développement du frontend (styles, boutons, sélecteur de micro, badges). - Validation et commit des modifications pour le sélecteur de micro et la diarisation. - Amélioration du frontend pour rafraîchir les noms des micros après autorisation d'accès, commit et push sur main. +- Correction de l'affichage de la liste des micros : demande initiale d'autorisation au chargement de la page et filtrage des périphériques sans identifiant.