From 79918fdf17dec2b6952ea6daa6a96f053fb98242 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 22 Jun 2021 11:34:59 +0200 Subject: [PATCH 1/5] show error dialog if loading or updating of local settings crash --- .../tools/settings/local_settings/window.py | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index 69562d0b1f..f1020a0764 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -203,8 +203,40 @@ class LocalSettingsWindow(QtWidgets.QWidget): def reset(self): if self._reset_on_show: self._reset_on_show = False - value = get_local_settings() - self.settings_widget.update_local_settings(value) + + error_msg = None + try: + value = get_local_settings() + self.settings_widget.update_local_settings(value) + + except Exception as exc: + error_msg = str(exc) + + crashed = error_msg is not None + # Enable/Disable save button if crashed or not + self.save_btn.setEnabled(not crashed) + # Show/Hide settings widget if crashed or not + if self.settings_widget: + self.settings_widget.setVisible(not crashed) + + if not crashed: + return + + # Show message with error + title = "Something went wrong" + msg = ( + "This is probably a bug. Loading of settings failed." + "\n\nError message:\n{}" + ).format(error_msg) + + dialog = QtWidgets.QMessageBox( + QtWidgets.QMessageBox.Warning, + title, + msg, + QtWidgets.QMessageBox.Ok, + self + ) + dialog.exec_() def _on_reset_clicked(self): self.reset() From 4c58e2aadca6a5a29b217a88e2e56d759120964b Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 22 Jun 2021 11:35:28 +0200 Subject: [PATCH 2/5] create LocalSettingsWidget on reset --- openpype/tools/settings/local_settings/window.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index f1020a0764..806b8840bd 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -168,9 +168,6 @@ class LocalSettingsWindow(QtWidgets.QWidget): scroll_widget = QtWidgets.QScrollArea(self) scroll_widget.setObjectName("GroupWidget") - settings_widget = LocalSettingsWidget(scroll_widget) - - scroll_widget.setWidget(settings_widget) scroll_widget.setWidgetResizable(True) footer = QtWidgets.QWidget(self) @@ -191,7 +188,8 @@ class LocalSettingsWindow(QtWidgets.QWidget): save_btn.clicked.connect(self._on_save_clicked) reset_btn.clicked.connect(self._on_reset_clicked) - self.settings_widget = settings_widget + self.settings_widget = None + self.scroll_widget = scroll_widget self.reset_btn = reset_btn self.save_btn = save_btn @@ -206,6 +204,10 @@ class LocalSettingsWindow(QtWidgets.QWidget): error_msg = None try: + if self.settings_widget is None: + self.settings_widget = LocalSettingsWidget(self.scroll_widget) + self.scroll_widget.setWidget(self.settings_widget) + value = get_local_settings() self.settings_widget.update_local_settings(value) From c0663c4e51a6657e69c907a76e549c955b63701d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 22 Jun 2021 11:41:20 +0200 Subject: [PATCH 3/5] modified message and change icon --- openpype/tools/settings/local_settings/window.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index 806b8840bd..e0fe8092f2 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -227,12 +227,13 @@ class LocalSettingsWindow(QtWidgets.QWidget): # Show message with error title = "Something went wrong" msg = ( - "This is probably a bug. Loading of settings failed." + "Bug: Loading of settings failed." + " Please contact your project manager or OpenPype team." "\n\nError message:\n{}" ).format(error_msg) dialog = QtWidgets.QMessageBox( - QtWidgets.QMessageBox.Warning, + QtWidgets.QMessageBox.Critical, title, msg, QtWidgets.QMessageBox.Ok, From d5c94ab20ca8f28d387aa5fefccde2474300dc68 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 22 Jun 2021 11:41:31 +0200 Subject: [PATCH 4/5] changed attribute names --- .../tools/settings/local_settings/window.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/openpype/tools/settings/local_settings/window.py b/openpype/tools/settings/local_settings/window.py index e0fe8092f2..9e8fd89b23 100644 --- a/openpype/tools/settings/local_settings/window.py +++ b/openpype/tools/settings/local_settings/window.py @@ -188,8 +188,12 @@ class LocalSettingsWindow(QtWidgets.QWidget): save_btn.clicked.connect(self._on_save_clicked) reset_btn.clicked.connect(self._on_reset_clicked) - self.settings_widget = None - self.scroll_widget = scroll_widget + # Do not create local settings widget in init phase as it's using + # settings objects that must be OK to be able create this widget + # - we want to show dialog if anything goes wrong + # - without reseting nothing is shown + self._settings_widget = None + self._scroll_widget = scroll_widget self.reset_btn = reset_btn self.save_btn = save_btn @@ -204,12 +208,15 @@ class LocalSettingsWindow(QtWidgets.QWidget): error_msg = None try: - if self.settings_widget is None: - self.settings_widget = LocalSettingsWidget(self.scroll_widget) - self.scroll_widget.setWidget(self.settings_widget) + # Create settings widget if is not created yet + if self._settings_widget is None: + self._settings_widget = LocalSettingsWidget( + self._scroll_widget + ) + self._scroll_widget.setWidget(self._settings_widget) value = get_local_settings() - self.settings_widget.update_local_settings(value) + self._settings_widget.update_local_settings(value) except Exception as exc: error_msg = str(exc) @@ -218,8 +225,8 @@ class LocalSettingsWindow(QtWidgets.QWidget): # Enable/Disable save button if crashed or not self.save_btn.setEnabled(not crashed) # Show/Hide settings widget if crashed or not - if self.settings_widget: - self.settings_widget.setVisible(not crashed) + if self._settings_widget: + self._settings_widget.setVisible(not crashed) if not crashed: return @@ -245,6 +252,6 @@ class LocalSettingsWindow(QtWidgets.QWidget): self.reset() def _on_save_clicked(self): - value = self.settings_widget.settings_value() + value = self._settings_widget.settings_value() save_local_settings(value) self.reset() From ba13064a654c42cf0157ba67a5d31d1312aaa5e3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 22 Jun 2021 11:42:05 +0200 Subject: [PATCH 5/5] local settings action won't trigger reset on first trigger --- openpype/modules/settings_action.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openpype/modules/settings_action.py b/openpype/modules/settings_action.py index 1035dc0dcd..9db4a252bc 100644 --- a/openpype/modules/settings_action.py +++ b/openpype/modules/settings_action.py @@ -114,6 +114,7 @@ class LocalSettingsAction(PypeModule, ITrayAction): # Tray attributes self.settings_window = None + self._first_trigger = True def connect_with_modules(self, *_a, **_kw): return @@ -153,6 +154,9 @@ class LocalSettingsAction(PypeModule, ITrayAction): self.settings_window.raise_() self.settings_window.activateWindow() - # Reset content if was not visible - if not was_visible: + # Do not reset if it's first trigger of action + if self._first_trigger: + self._first_trigger = False + elif not was_visible: + # Reset content if was not visible self.settings_window.reset()