From ad214f644b823d4699013e4d13659e5385ce9e88 Mon Sep 17 00:00:00 2001 From: Benoit Date: Fri, 19 Jun 2026 13:29:11 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20d=C3=A9marrage=20manuel=20et=20gestion?= =?UTF-8?q?=20=C3=A9tat=20serveur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrections : - Serveur NE démarre PLUS automatiquement au lancement - Utilisateur doit cliquer "Démarrer" (contrôle explicite) - Logs stderr LiveKit traités comme INFO (pas ERROR) - Détection démarrage dans stderr aussi ("starting LiveKit server") - Frontend : charge données seulement si serveur actif - Polling démarre/arrête selon état serveur - État initial : bouton Démarrer enabled, Arrêter disabled Expérience : 1. Lancer app → Interface visible, serveur arrêté 2. Cliquer "Démarrer" → Serveur démarre 3. Dashboard se met à jour automatiquement 4. Cliquer "Arrêter" → Serveur s'arrête, polling stop Plus de démarrage automatique surprise ! --- electron/main.js | 31 ++++++++++++++++++++++++++----- electron/ui/app.js | 17 +++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/electron/main.js b/electron/main.js index daf9f44..74e4d68 100644 --- a/electron/main.js +++ b/electron/main.js @@ -152,14 +152,34 @@ async function startServer() { serverProcess.stderr.on('data', (data) => { const output = data.toString(); - console.error('[Serveur Error]', output); + + // LiveKit envoie INFO/WARN dans stderr (comportement normal Go) + // Ne les traiter comme erreurs que s'ils contiennent vraiment "ERROR" + const isError = output.includes('ERROR') || output.includes('Error:'); + + console.log(isError ? '[Serveur Error]' : '[Serveur]', output); if (mainWindow) { mainWindow.webContents.send('server:log', { - level: 'error', + level: isError ? 'error' : 'info', message: output.trim() }); } + + // Détecter démarrage LiveKit dans stderr + if (output.includes('starting LiveKit server') || output.includes('Serveur prêt')) { + if (!serverStarted) { + serverStarted = true; + console.log('✅ Serveur démarré (détecté via stderr)'); + + if (mainWindow) { + mainWindow.webContents.send('server:status', { running: true }); + } + + createTray(); + resolve({ success: true, url: SERVER_URL }); + } + } }); serverProcess.on('error', (error) => { @@ -361,9 +381,10 @@ app.whenReady().then(async () => { console.log('✅ Certificats présents\n'); } - // Démarrer le serveur automatiquement - console.log('🔄 Démarrage automatique du serveur...'); - await startServer(); + // NE PAS démarrer automatiquement + // L'utilisateur cliquera sur "Démarrer" dans l'interface + console.log('✅ Application prête'); + console.log('💡 Cliquez sur "Démarrer" pour lancer le serveur\n'); }); app.on('window-all-closed', () => { diff --git a/electron/ui/app.js b/electron/ui/app.js index ee92927..4c39e3d 100644 --- a/electron/ui/app.js +++ b/electron/ui/app.js @@ -26,8 +26,12 @@ document.addEventListener('DOMContentLoaded', async () => { // Vérifier le statut initial du serveur await checkServerStatus(); - // Charger les données initiales - loadInitialData(); + // Charger les données initiales SEULEMENT si serveur actif + if (serverRunning) { + loadInitialData(); + } else { + console.log('⏸️ Serveur arrêté, en attente de démarrage...'); + } }); // ========== Navigation ========== @@ -159,11 +163,20 @@ function updateServerStatus(running) { statusText.textContent = 'Actif'; btnStart.disabled = true; btnStop.disabled = false; + + // Démarrer le polling + startStatsPolling(); + + // Charger les données initiales + loadInitialData(); } else { indicator.textContent = '⚪'; statusText.textContent = 'Arrêté'; btnStart.disabled = false; btnStop.disabled = true; + + // Arrêter le polling + stopStatsPolling(); } }