Skip to content

Commit 08b6558

Browse files
committed
fix a few menu related bugs
1 parent c4b0637 commit 08b6558

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

src/jabs/ui/main_window/main_window.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

src/jabs/ui/main_window/menu_handlers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ def archive_behavior_callback(self, behavior: str) -> None:
109109

110110
def show_project_pruning_dialog(self) -> None:
111111
"""Open dialog to prune videos without labels from the project."""
112+
if self.window._project is None:
113+
QtWidgets.QMessageBox.warning(
114+
self.window,
115+
"No Project Loaded",
116+
"Please load a project before attempting to prune videos.",
117+
)
118+
return
119+
112120
prune_dialog = ProjectPruningDialog(self.window._project, parent=self.window)
113121
if prune_dialog.exec() == QtWidgets.QDialog.DialogCode.Accepted:
114122
# Get the videos to delete from the dialog

0 commit comments

Comments
 (0)