// Configuration et variables globales const API_BASE = ''; let socket; let currentPrompts = []; let currentStatus = {}; // Initialisation de l'application document.addEventListener('DOMContentLoaded', function() { initializeSocketIO(); loadInitialData(); setupEventListeners(); startPeriodicUpdates(); }); // Initialisation de Socket.IO pour les mises à jour en temps réel function initializeSocketIO() { socket = io(); socket.on('connect', function() { console.log('Connecté au serveur'); updateConnectionStatus(true); }); socket.on('disconnect', function() { console.log('Déconnecté du serveur'); updateConnectionStatus(false); }); socket.on('status_update', function(data) { updateDashboard(data); }); socket.on('new_subtitle', function(data) { addNewSubtitle(data); }); socket.on('new_generation', function(data) { updateNextMessage(data); }); } // Mise à jour du statut de connexion function updateConnectionStatus(connected) { const statusElement = document.getElementById('connection-status'); const iconElement = statusElement.previousElementSibling; if (connected) { statusElement.textContent = 'Connecté'; iconElement.className = 'fas fa-circle text-success pulse'; } else { statusElement.textContent = 'Déconnecté'; iconElement.className = 'fas fa-circle text-danger'; } } // Chargement des données initiales async function loadInitialData() { try { await Promise.all([ loadFluxList(), loadPrompts(), loadStatus(), loadSubtitles(), loadGenerations() ]); } catch (error) { console.error('Erreur lors du chargement des données:', error); showToast('Erreur lors du chargement des données', 'error'); } } // Configuration des écouteurs d'événements function setupEventListeners() { // Modal d'ajout de flux const addFluxModal = document.getElementById('addFluxModal'); addFluxModal.addEventListener('hidden.bs.modal', function() { document.getElementById('channel-name').value = ''; document.getElementById('record-audio').checked = true; }); } // Mises à jour périodiques function startPeriodicUpdates() { // Mise à jour des données toutes les 10 secondes setInterval(async () => { await loadStatus(); await loadSubtitles(); await loadGenerations(); }, 10000); } // === GESTION DES FLUX === // Chargement de la liste des flux async function loadFluxList() { try { const response = await fetch(`${API_BASE}/api/flux`); const flux = await response.json(); renderFluxList(flux); } catch (error) { console.error('Erreur lors du chargement des flux:', error); } } // Rendu de la liste des flux function renderFluxList(fluxList) { const container = document.getElementById('flux-list'); if (fluxList.length === 0) { container.innerHTML = `
Aucun flux configuré
Cliquez sur "Ajouter Flux" pour commencer
Aucun sous-titre disponible
'; return; } const sortedKeys = Object.keys(subtitles).sort(); const lastKey = sortedKeys[sortedKeys.length - 1]; // Mettre à jour le dernier sous-titre lastSubtitleElement.textContent = subtitles[lastKey]; // Mettre à jour l'historique historyContainer.innerHTML = sortedKeys.reverse().slice(0, 10).map(key => `