From a829ca0e65781699c741fffa6d2f4e70eec361eb Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 18 Feb 2023 19:00:05 +0100 Subject: [PATCH] Handle errors when restoring/saving settings --- CMakeLists.txt | 2 +- gui/initiategui.cpp | 18 +++++++++++++++++- qml/main.qml | 3 +++ quickgui/controller.cpp | 4 ++++ quickgui/controller.h | 1 + 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b2bd88..39f402b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,7 +123,7 @@ include(BasicConfig) set(CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES "${CONFIGURATION_PACKAGE_SUFFIX}" CACHE STRING "sets the suffix for qtutilities") -find_package(qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.8.0 REQUIRED) +find_package(qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.11.0 REQUIRED) use_qt_utilities() # find passwordfile diff --git a/gui/initiategui.cpp b/gui/initiategui.cpp index 154577e..5a7574f 100644 --- a/gui/initiategui.cpp +++ b/gui/initiategui.cpp @@ -14,6 +14,7 @@ #include #include +#include #include using namespace CppUtilities; @@ -35,6 +36,7 @@ int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, // restore Qt settings auto qtSettings = QtSettings(); auto settings = QtUtilities::getSettings(QStringLiteral(PROJECT_NAME)); + auto settingsError = QtUtilities::errorMessageForSettings(*settings); qtSettings.restore(*settings); qtSettings.apply(); @@ -43,6 +45,9 @@ int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, LOAD_QT_TRANSLATIONS; // init widgets GUI + if (!settingsError.isEmpty()) { + QMessageBox::critical(nullptr, QCoreApplication::applicationName(), settingsError); + } auto w = MainWindow(*settings, &qtSettings); w.show(); if (!file.isEmpty()) { @@ -51,6 +56,17 @@ int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, // start event loop QObject::connect(&application, &QCoreApplication::aboutToQuit, &OpenSsl::clean); - return application.exec(); + auto res = application.exec(); + + // save settings to disk + settings->sync(); + if (settingsError.isEmpty()) { + settingsError = QtUtilities::errorMessageForSettings(*settings); + if (!settingsError.isEmpty()) { + QMessageBox::critical(nullptr, QCoreApplication::applicationName(), settingsError); + } + } + + return res; } } // namespace QtGui diff --git a/qml/main.qml b/qml/main.qml index d4d9481..2c23cc1 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -318,6 +318,9 @@ Kirigami.ApplicationWindow { }) } } + onSettingsError: { + showPassiveNotification(errorMessage) + } onPasswordRequired: { enterPasswordDialog.askForExistingPassword( qsTr("Password required to open %1").arg( diff --git a/quickgui/controller.cpp b/quickgui/controller.cpp index d79b969..0f7e6fa 100644 --- a/quickgui/controller.cpp +++ b/quickgui/controller.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -122,6 +123,9 @@ void Controller::init() if (!m_filePath.isEmpty()) { load(); } + if (const auto error = QtUtilities::errorMessageForSettings(m_settings); !error.isEmpty()) { + emit settingsError(error); + } } void Controller::load() diff --git a/quickgui/controller.h b/quickgui/controller.h index 09f75bc..5120ded 100644 --- a/quickgui/controller.h +++ b/quickgui/controller.h @@ -128,6 +128,7 @@ Q_SIGNALS: void undoStackChanged(QUndoStack *undoStack); void undoTextChanged(const QString &undoText); void redoTextChanged(const QString &redoText); + void settingsError(const QString &errorMessage); private Q_SLOTS: void handleEntriesRemoved(const QModelIndex &parentIndex, int first, int last);