diff --git a/Dockerfile b/Dockerfile index c3f5a32..41c113c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,7 @@ RUN mkdir -p /mnt/Musique # Installer uniquement les dépendances nécessaires à l'exécution RUN apt-get update && apt-get install -y \ openssh-client ffmpeg mpd mpc \ - libavutil-dev libavformat-dev \ + libavutil-dev libavformat-dev expect\ libavfilter-dev libavdevice-dev libclang-dev libsqlite3-dev # Copier l'exécutable compilé depuis l'étape de build COPY --from=build /app/target/release/blissify /usr/local/bin/blissify diff --git a/webapp/app.js b/webapp/app.js index f763470..943e1d1 100644 --- a/webapp/app.js +++ b/webapp/app.js @@ -82,34 +82,36 @@ app.get('/mpc-update', async (req, res) => { // Route SSE pour lancer "blissify init" app.get('/start-analysis', (req, res) => { - const command = 'blissify init /mnt/Musique'; + const command = 'unbuffer blissify init /mnt/Musique'; // Utilisez unbuffer pour forcer la sortie immédiate const analysisProcess = spawn('sh', ['-c', command]); - // SSE headers + // Headers pour SSE res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); - res.flushHeaders(); // Forcer l'envoi des headers + res.flushHeaders(); // Forcer l'envoi immédiat des headers - // Diffuser la sortie en temps réel via SSE + // Capturer les données de sortie analysisProcess.stdout.on('data', (data) => { - res.write(`data: ${data.toString()}\n\n`); - res.flush(); // Vidage immédiat après chaque ligne envoyée + const output = data.toString().split('\n'); + output.forEach(line => { + if (line.trim()) { + res.write(`data: ${line.trim()}\n\n`); + res.flush(); // Assurer l'envoi immédiat + } + }); }); + // Capturer les erreurs analysisProcess.stderr.on('data', (data) => { - res.write(`data: ${data.toString()}\n\n`); - res.flush(); // Vidage immédiat après chaque ligne d'erreur + res.write(`data: Erreur: ${data.toString()}\n\n`); + res.flush(); // Forcer l'envoi immédiat des erreurs }); + // Quand le processus est terminé analysisProcess.on('close', (code) => { - if (code !== 0) { - res.write(`data: Erreur lors de l'exécution de blissify init (code ${code})\n\n`); - } else { - res.write(`data: Blissify init exécuté avec succès\n\n`); - } - res.flush(); // Forcer l'envoi final - res.end(); // Terminer la connexion après l'exécution + res.write(`data: Blissify terminé avec le code ${code}\n\n`); + res.end(); // Fin du flux }); });