This commit is contained in:
gpatruno
2025-09-06 17:26:38 +02:00
parent baefddd6b3
commit 68cf59ae75
29 changed files with 1387 additions and 1476 deletions
+2 -1
View File
@@ -608,7 +608,8 @@ textarea, input,
}
.chat-messages {
height: 400px;
min-height: 400px;
max-height: 800px;
overflow-y: auto;
padding: 1rem;
background-color: var(--primary-bg);
+251 -10
View File
@@ -38,6 +38,29 @@ function initializeSocketIO() {
socket.on('new_generation', function(data) {
updateNextMessage(data);
});
socket.on('ia_generator_status_changed', function(data) {
// Synchroniser l'état de l'interface web
const iaGeneratorToggle = document.getElementById('iaGeneratorToggle');
const iaGeneratorStatus = document.getElementById('iaGeneratorStatus');
const chatMessageToggle = document.getElementById('chatMessageToggle');
const chatMessageStatus = document.getElementById('chatMessageStatus');
if (iaGeneratorToggle && iaGeneratorStatus) {
iaGeneratorToggle.checked = data.running;
iaGeneratorStatus.textContent = data.running ? 'En cours...' : 'Arrêté';
iaGeneratorStatus.className = data.running ? 'text-success' : 'text-muted';
}
// Synchroniser aussi l'état de l'envoi de messages
if (chatMessageToggle && chatMessageStatus) {
chatMessageToggle.checked = data.running;
chatMessageStatus.textContent = data.running ? 'Activé' : 'Désactivé';
chatMessageStatus.className = data.running ? 'text-success' : 'text-muted';
}
console.log('IA Generator status changed:', data);
});
}
// Mise à jour du statut de connexion
@@ -66,7 +89,8 @@ async function loadInitialData() {
loadGenerations(),
checkAutoSubtitleStatus(), // Ajouter la vérification du statut auto
checkAutoMessageStatus(), // Ajouter la vérification du statut auto messages
checkChatMessageStatus() // Ajouter la vérification du statut chat messages
checkChatMessageStatus(), // Ajouter la vérification du statut chat messages
checkSystemStatus() // Ajouter la vérification du statut système
]);
} catch (error) {
console.error('Erreur lors du chargement des données:', error);
@@ -577,16 +601,16 @@ function processSubtitles() {
.then(response => response.json())
.then(data => {
if (data.success) {
showAlert(data.message, 'success');
showToast(data.message, 'success');
// Actualiser les sous-titres
loadSubtitles();
} else {
showAlert('Erreur: ' + data.error, 'danger');
showToast('Erreur: ' + data.error, 'danger');
}
})
.catch(error => {
console.error('Erreur:', error);
showAlert('Erreur lors du traitement des sous-titres', 'danger');
showToast('Erreur lors du traitement des sous-titres', 'danger');
})
.finally(() => {
// Restaurer le bouton
@@ -595,6 +619,38 @@ function processSubtitles() {
});
}
async function clearSubtitlesHistory() {
// Demander confirmation avant de nettoyer
if (!confirm('Êtes-vous sûr de vouloir nettoyer l\'historique des sous-titres ? Cette action est irréversible.')) {
return;
}
try {
const response = await fetch('/api/subtitles/clear', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
if (data.success) {
showToast(data.message, 'success');
// Vider l'affichage de l'historique
document.getElementById('subtitles-history').innerHTML = '<div class="text-muted text-center">Aucun sous-titre dans l\'historique</div>';
// Mettre à jour le dernier sous-titre
document.getElementById('last-subtitle').innerHTML = 'Aucun texte détecté pour le moment';
document.getElementById('last-subtitle').className = 'alert alert-warning';
} else {
showToast(data.error || 'Erreur lors du nettoyage', 'error');
}
} catch (error) {
console.error('Erreur:', error);
showToast('Erreur lors du nettoyage de l\'historique', 'error');
}
}
// === GESTION DES GÉNÉRATIONS ===
// Chargement des générations
@@ -1532,10 +1588,10 @@ async function forceStopAutoMessage() {
const statusElement = document.getElementById('autoMessageStatus');
if (toggle && statusElement) {
autoMessageRunning = false;
toggle.checked = false;
statusElement.textContent = 'Arrêté';
statusElement.className = 'text-muted';
autoMessageRunning = false;
}
showAlert('Arrêt forcé de l\'envoi automatique de messages', 'warning');
@@ -1546,7 +1602,42 @@ async function forceStopAutoMessage() {
console.error('Erreur lors de l\'arrêt forcé:', error);
showAlert('Erreur lors de l\'arrêt forcé', 'danger');
}
}
}
// Fonction pour forcer l'arrêt de la génération automatique de sous-titres
async function forceStopAutoSubtitle() {
try {
const response = await fetch('/api/subtitles/auto/force-stop', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.success) {
// Mettre à jour l'interface
const toggle = document.getElementById('autoSubtitleToggle');
const statusElement = document.getElementById('autoSubtitleStatus');
if (toggle && statusElement) {
autoSubtitleRunning = false;
toggle.checked = false;
statusElement.textContent = 'Arrêté';
statusElement.className = 'text-muted';
hideProcessingFile();
}
showAlert('Arrêt forcé de la génération automatique de sous-titres', 'warning');
} else {
showAlert('Erreur: ' + result.error, 'danger');
}
} catch (error) {
console.error('Erreur lors de l\'arrêt forcé:', error);
showAlert('Erreur lors de l\'arrêt forcé', 'danger');
}
}
// Fonction pour activer/désactiver l'envoi de messages dans le chat
async function toggleChatMessage() {
@@ -1628,13 +1719,163 @@ async function checkChatMessageStatus() {
}
} catch (error) {
console.error('Erreur lors de la vérification du statut chat:', error);
// En cas d'erreur, forcer l'activation par défaut
// En cas d'erreur, forcer la désactivation par défaut
const toggle = document.getElementById('chatMessageToggle');
const statusElement = document.getElementById('chatMessageStatus');
if (toggle && statusElement) {
toggle.checked = true;
statusElement.textContent = 'Activé';
statusElement.className = 'text-success';
toggle.checked = false;
statusElement.textContent = 'Désactivé';
statusElement.className = 'text-muted';
}
}
}
// === GESTION DES COMPOSANTS SYSTÈME ===
// Fonction pour activer/désactiver le générateur IA
async function toggleIAGenerator() {
const toggle = document.getElementById('iaGeneratorToggle');
const statusElement = document.getElementById('iaGeneratorStatus');
if (toggle.checked) {
// Démarrer le générateur IA
try {
const response = await fetch('/api/ia-generator/start', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.success) {
statusElement.textContent = 'En cours...';
statusElement.className = 'text-success';
showToast('Générateur IA démarré', 'success');
} else {
toggle.checked = false;
showToast('Erreur: ' + result.message, 'error');
}
} catch (error) {
console.error('Erreur:', error);
toggle.checked = false;
showToast('Erreur lors du démarrage du générateur IA', 'error');
}
} else {
// Arrêter le générateur IA
try {
const response = await fetch('/api/ia-generator/stop', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.success) {
statusElement.textContent = 'Arrêté';
statusElement.className = 'text-muted';
showToast('Générateur IA arrêté', 'info');
} else {
toggle.checked = true;
showToast('Erreur: ' + result.message, 'error');
}
} catch (error) {
console.error('Erreur:', error);
toggle.checked = true;
showToast('Erreur lors de l\'arrêt du générateur IA', 'error');
}
}
}
// Fonction pour activer/désactiver le contrôleur Twitch
async function toggleControlTwitch() {
const toggle = document.getElementById('controlTwitchToggle');
const statusElement = document.getElementById('controlTwitchStatus');
if (toggle.checked) {
// Démarrer le contrôleur Twitch
try {
const response = await fetch('/api/control-twitch/start', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.success) {
statusElement.textContent = 'En cours...';
statusElement.className = 'text-success';
showToast('Contrôleur Twitch démarré', 'success');
} else {
toggle.checked = false;
showToast('Erreur: ' + result.message, 'error');
}
} catch (error) {
console.error('Erreur:', error);
toggle.checked = false;
showToast('Erreur lors du démarrage du contrôleur Twitch', 'error');
}
} else {
// Arrêter le contrôleur Twitch
try {
const response = await fetch('/api/control-twitch/stop', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json();
if (result.success) {
statusElement.textContent = 'Arrêté';
statusElement.className = 'text-muted';
showToast('Contrôleur Twitch arrêté', 'info');
} else {
toggle.checked = true;
showToast('Erreur: ' + result.message, 'error');
}
} catch (error) {
console.error('Erreur:', error);
toggle.checked = true;
showToast('Erreur lors de l\'arrêt du contrôleur Twitch', 'error');
}
}
}
// Fonction pour vérifier le statut système au chargement
async function checkSystemStatus() {
try {
const response = await fetch('/api/system-status');
const status = await response.json();
// Mettre à jour le statut du générateur IA
const iaGeneratorToggle = document.getElementById('iaGeneratorToggle');
const iaGeneratorStatus = document.getElementById('iaGeneratorStatus');
if (iaGeneratorToggle && iaGeneratorStatus) {
iaGeneratorToggle.checked = status.ia_generator.running;
iaGeneratorStatus.textContent = status.ia_generator.status;
iaGeneratorStatus.className = status.ia_generator.running ? 'text-success' : 'text-muted';
}
// Mettre à jour le statut du contrôleur Twitch
const controlTwitchToggle = document.getElementById('controlTwitchToggle');
const controlTwitchStatus = document.getElementById('controlTwitchStatus');
if (controlTwitchToggle && controlTwitchStatus) {
controlTwitchToggle.checked = status.control_twitch.running;
controlTwitchStatus.textContent = status.control_twitch.status;
controlTwitchStatus.className = status.control_twitch.running ? 'text-success' : 'text-muted';
}
console.log('Statut système chargé:', status);
} catch (error) {
console.error('Erreur lors de la vérification du statut système:', error);
}
}