@@ -84,6 +84,7 @@ def __init__(self, app_name: str, app_name_long: str, *args, **kwargs) -> None:
8484 self ._app_name = app_name
8585 self ._app_name_long = app_name_long
8686 self ._project = None
87+ self ._previous_project = None
8788 self ._project_loader_thread = None
8889 self ._progress_dialog = None
8990 self ._pool_warm_thread = None
@@ -255,15 +256,13 @@ def open_project(self, project_path: str) -> None:
255256 self ._progress_dialog = create_progress_dialog (self , "Loading Project..." , 0 )
256257 self ._progress_dialog .show ()
257258
258- # Shut down old project executor if needed
259- if self ._project is not None :
260- try :
261- self ._project .shutdown_executor ()
262- except Exception as e :
263- print (
264- f"Warning: failed to shut down executor for old project: { e } " , file = sys .stderr
265- )
266- self ._project = None
259+ # Save reference to current project in case the new project load fails
260+ # We'll restore it so the user can continue working
261+ # Don't shut down its executor yet - only do that if the new project loads successfully
262+ self ._previous_project = self ._project
263+
264+ # Clear the current project reference while loading
265+ self ._project = None
267266
268267 session_tracking_enabled = bool (
269268 self ._settings .value (SESSION_TRACKING_ENABLED_KEY , False , type = bool )
@@ -356,6 +355,19 @@ def _project_loaded_callback(self) -> None:
356355 self ._project = self ._project_loader_thread .project
357356 self ._project_loader_thread = None
358357
358+ # Shut down the previous project's executor now that the new project loaded successfully
359+ if self ._previous_project is not None :
360+ try :
361+ self ._previous_project .shutdown_executor ()
362+ except Exception as e :
363+ print (
364+ f"Warning: failed to shut down executor for previous project: { e } " ,
365+ file = sys .stderr ,
366+ )
367+
368+ # Clear the previous project reference since new project loaded successfully
369+ self ._previous_project = None
370+
359371 # The central_widget updates main_control_widget
360372 self ._central_widget .set_project (self ._project )
361373 self .video_list .set_project (self ._project )
@@ -431,6 +443,13 @@ def _project_load_error_callback(self, error: Exception) -> None:
431443 self ._progress_dialog .close ()
432444 self ._progress_dialog .deleteLater ()
433445 self ._progress_dialog = None
446+
447+ # Restore the previous project so the user can continue working
448+ # (If there was no previous project, self._project will remain None)
449+ if self ._previous_project :
450+ self ._project = self ._previous_project
451+ self ._previous_project = None
452+
434453 QtWidgets .QMessageBox .critical (self , "Error loading project" , str (error ))
435454
436455 def show_license_dialog (self ) -> QtWidgets .QDialog .DialogCode :
0 commit comments