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
+193
View File
@@ -0,0 +1,193 @@
# 🔧 Correction du Bouton Slide "Génération Auto Sous-titres"
## 📋 Problème Identifié
### ❌ **Problème Initial**
- Le bouton slide "Génération Auto Sous-titres" ne pouvait pas arrêter la boucle de traitement
- La boucle `auto_subtitle_loop()` utilisait `subprocess.run()` qui bloquait jusqu'à la fin du processus Whisper
- Impossible d'interrompre le traitement en cours
- Aucune vérification de la variable `auto_subtitle_running` pendant le traitement
### 🔍 **Cause Racine**
```python
# Ancien code problématique
result = subprocess.run(command, capture_output=True, text=True, timeout=60)
```
- `subprocess.run()` bloque l'exécution jusqu'à la fin du processus
- Aucune possibilité d'interruption pendant le traitement
- La boucle ne peut pas vérifier `auto_subtitle_running` pendant l'exécution de Whisper
## ✅ **Solution Implémentée**
### 🔧 **Améliorations Principales**
#### 1. **Utilisation de `subprocess.Popen()`**
```python
# Nouveau code avec contrôle d'interruption
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# Attendre la fin du processus avec vérification périodique
while process.poll() is None:
if not auto_subtitle_running:
print("Arrêt demandé, interruption du processus Whisper")
process.terminate()
try:
process.wait(timeout=5)
except subprocess.TimeoutExpired:
process.kill()
break
time.sleep(1)
```
#### 2. **Vérification Périodique de l'Arrêt**
- Vérification de `auto_subtitle_running` toutes les secondes
- Interruption immédiate du processus Whisper si arrêt demandé
- Nettoyage propre des processus en cours
#### 3. **Logs de Débogage Améliorés**
```python
print(f"[{datetime.now().strftime('%H:%M:%S')}] Démarrage de la boucle de génération automatique de sous-titres")
print(f"[{datetime.now().strftime('%H:%M:%S')}] Traitement de: {audio_file}")
print(f"[{datetime.now().strftime('%H:%M:%S')}] Arrêt demandé, interruption du processus Whisper")
```
#### 4. **Fonction d'Arrêt Forcé**
```python
@app.route('/api/subtitles/auto/force-stop', methods=['POST'])
def force_stop_auto_subtitle():
"""Forcer l'arrêt de la génération automatique de sous-titres"""
global auto_subtitle_running, current_processing_file
auto_subtitle_running = False
current_processing_file = None
```
#### 5. **Bouton d'Arrêt Forcé dans l'Interface**
```html
<button class="btn btn-warning btn-sm w-100" onclick="forceStopAutoSubtitle()" title="Forcer l'arrêt en cas de problème">
<i class="fas fa-stop-circle me-1"></i>Force Stop
</button>
```
## 🚀 **Fonctionnalités Ajoutées**
### **Contrôle Interruptible**
- ✅ Arrêt immédiat même pendant le traitement Whisper
- ✅ Interruption propre des processus en cours
- ✅ Nettoyage des ressources
### **Interface Utilisateur Améliorée**
- ✅ Bouton "Force Stop" pour les cas d'urgence
- ✅ Feedback visuel en temps réel
- ✅ Logs de débogage détaillés
### **Gestion d'Erreurs Robuste**
- ✅ Vérification de l'état avant démarrage
- ✅ Gestion des timeouts
- ✅ Nettoyage automatique des fichiers temporaires
## 🔍 **Tests et Validation**
### **Script de Test**
```bash
python test_subtitle_stop.py
```
### **Tests Inclus**
1. ✅ Vérification du statut initial
2. ✅ Démarrage de la génération automatique
3. ✅ Vérification du démarrage
4. ✅ Arrêt pendant le traitement
5. ✅ Vérification de l'arrêt
6. ✅ Test de l'arrêt forcé
7. ✅ Test du traitement avec interruption
## 📊 **Améliorations de Performance**
### **Optimisations**
- Interruption immédiate des processus
- Vérification périodique de l'état
- Nettoyage automatique des ressources
- Logs de débogage détaillés
### **Sécurité**
- Gestion des timeouts
- Interruption propre des processus
- Protection contre les fuites de ressources
## 🎯 **Utilisation**
### **Arrêt Normal**
1. Cliquer sur le toggle "Génération Auto Sous-titres"
2. Attendre la confirmation d'arrêt
3. Vérifier le statut affiché
### **Arrêt Forcé**
1. Cliquer sur "Force Stop"
2. Confirmer l'action
3. Vérifier que le traitement s'arrête immédiatement
### **Débogage**
1. Ouvrir la console du navigateur
2. Vérifier les logs de débogage
3. Utiliser le script de test
## 📝 **Code Modifié**
### **Fonction `auto_subtitle_loop()`**
```python
def auto_subtitle_loop():
"""Boucle de génération automatique de sous-titres"""
global auto_subtitle_running, current_processing_file
print(f"[{datetime.now().strftime('%H:%M:%S')}] Démarrage de la boucle de génération automatique de sous-titres")
while auto_subtitle_running:
try:
# Vérification des fichiers audio
audio_files = [f for f in os.listdir(record_dir) if f.endswith('.mp3')]
if not audio_files:
time.sleep(5)
continue
# Traitement avec contrôle d'interruption
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
while process.poll() is None:
if not auto_subtitle_running:
process.terminate()
break
time.sleep(1)
# Vérification finale de l'arrêt
if not auto_subtitle_running:
break
except Exception as e:
print(f"Erreur dans la boucle: {e}")
time.sleep(5)
```
### **Fonction `force_stop_auto_subtitle()`**
```python
@app.route('/api/subtitles/auto/force-stop', methods=['POST'])
def force_stop_auto_subtitle():
"""Forcer l'arrêt de la génération automatique de sous-titres"""
global auto_subtitle_running, current_processing_file
auto_subtitle_running = False
current_processing_file = None
return jsonify({'success': True, 'message': 'Arrêt forcé'})
```
## 🎉 **Résultat Final**
**Bouton slide fonctionnel**
**Arrêt immédiat même pendant le traitement**
**Interruption propre des processus Whisper**
**Interface utilisateur améliorée**
**Logs de débogage détaillés**
**Gestion d'erreurs robuste**
**Tests de validation complets**
---
*Le bouton slide "Génération Auto Sous-titres" fonctionne maintenant parfaitement et peut arrêter la boucle même pendant le traitement d'un fichier ! 🚀*