1515
1616from PySide6 .QtWidgets import QMessageBox
1717import os
18+ import traceback
1819from Core .ark_config_loader import (
1920 load_ark_config ,
2021 should_exclude_file ,
2425)
2526
2627
28+ def _kill_all_processes (self ) -> None :
29+ """Tue tous les processus de compilation en cours et réinitialise l'état.
30+
31+ Cette fonction doit être appelée en cas d'erreur pour nettoyer proprement
32+ tous les processus lancés et réinitialiser l'interface utilisateur.
33+ """
34+ try :
35+ # Arrêter tous les processus en cours
36+ if hasattr (self , 'processes' ) and self .processes :
37+ for pid , proc in list (self .processes .items ()):
38+ try :
39+ if proc is not None and proc .state () == proc .Running :
40+ proc .terminate ()
41+ proc .waitForFinished (2000 ) # Attendre max 2s
42+ if proc .state () == proc .Running :
43+ proc .kill ()
44+ proc .waitForFinished (1000 )
45+ except Exception :
46+ pass
47+ # Vider le dictionnaire des processus
48+ self .processes .clear ()
49+ except Exception :
50+ pass
51+
52+ try :
53+ # Vider la file d'attente
54+ if hasattr (self , 'queue' ):
55+ self .queue .clear ()
56+ except Exception :
57+ pass
58+
59+ try :
60+ # Réinitialiser les compteurs
61+ if hasattr (self , 'current_compiling' ):
62+ self .current_compiling .clear ()
63+ except Exception :
64+ pass
65+
66+ # Réactiver les contrôles UI
67+ try :
68+ self .set_controls_enabled (True )
69+ except Exception :
70+ pass
71+
72+ try :
73+ if hasattr (self , "compiler_tabs" ) and self .compiler_tabs :
74+ self .compiler_tabs .setEnabled (True )
75+ except Exception :
76+ pass
77+
78+ try :
79+ if hasattr (self , 'progress' ):
80+ self .progress .setRange (0 , 1 )
81+ self .progress .setValue (0 )
82+ except Exception :
83+ pass
84+
85+ try :
86+ if hasattr (self , '_compile_continued' ):
87+ self ._compile_continued = False
88+ except Exception :
89+ pass
90+
91+
2792# Nouvelle version de try_start_processes pour gérer les fichiers ignorés dynamiquement
2893def _continue_compile_all (self ):
2994 # Charger la configuration ARK complète
@@ -277,6 +342,19 @@ def _after_bcasl(_report):
277342 tmr2 .stop ()
278343 except Exception :
279344 pass
345+
346+ # Vérifier si BCASL a eu des erreurs
347+ if _report is not None and not _report .ok :
348+ error_items = [item for item in _report .items if not item .success ]
349+ error_msg = ", " .join ([f"{ item .plugin_id } : { item .error } " for item in error_items ])
350+ try :
351+ self .log .append (f"❌ Erreur BCASL: { error_msg } \n " )
352+ except Exception :
353+ pass
354+ # Nettoyer tout et réactiver l'UI
355+ _kill_all_processes (self )
356+ return
357+
280358 if not getattr (self , "_compile_continued" , False ):
281359 self ._compile_continued = True
282360 try :
@@ -287,41 +365,22 @@ def _after_bcasl(_report):
287365 _continue_compile_all (self )
288366 except Exception as _e :
289367 try :
290- import traceback as _tb
291368 self .log .append (
292- f"⚠️ Exception dans _continue_compile_all: { _e } \n { _tb .format_exc ()} \n "
369+ f"❌ Erreur fatale dans _continue_compile_all: { _e } \n { traceback .format_exc ()} \n "
293370 )
294371 except Exception :
295372 pass
296- # Réactiver l'UI en cas d'erreur
297- try :
298- self .set_controls_enabled (True )
299- except Exception :
300- pass
301- try :
302- if hasattr (self , "compiler_tabs" ) and self .compiler_tabs :
303- self .compiler_tabs .setEnabled (True )
304- except Exception :
305- pass
373+ # En cas d'erreur: tout tuer et réinitialiser
374+ _kill_all_processes (self )
306375 except Exception as _e :
307376 try :
308- import traceback as _tb
309-
310377 self .log .append (
311- f"⚠️ Exception _after_bcasl: { _e } \n { _tb .format_exc ()} \n "
378+ f"❌ Erreur critique dans _after_bcasl: { _e } \n { traceback .format_exc ()} \n "
312379 )
313380 except Exception :
314381 pass
315- # Réactiver l'UI en cas d'erreur
316- try :
317- self .set_controls_enabled (True )
318- except Exception :
319- pass
320- try :
321- if hasattr (self , "compiler_tabs" ) and self .compiler_tabs :
322- self .compiler_tabs .setEnabled (True )
323- except Exception :
324- pass
382+ # En cas d'erreur: tout tuer et réinitialiser
383+ _kill_all_processes (self )
325384
326385 _run_bcasl_async (self , _after_bcasl )
327386 return # différer la suite dans le callback pour ne pas bloquer
0 commit comments