From 37a6d14dc598689af45885b8020c3d0ca38c2ae5 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 18 Feb 2023 18:46:27 +0100 Subject: [PATCH] Handle errors when restoring/saving settings --- CMakeLists.txt | 2 +- application/settings.cpp | 6 +++++- application/settings.h | 1 + gui/initiate.cpp | 22 +++++++++++++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fc56def..d7f000d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,7 +196,7 @@ if (WIDGETS_GUI OR QUICK_GUI) 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() endif () diff --git a/application/settings.cpp b/application/settings.cpp index f286cf0..da463fd 100644 --- a/application/settings.cpp +++ b/application/settings.cpp @@ -50,6 +50,7 @@ void restore() auto s = QtUtilities::getSettings(QStringLiteral(PROJECT_NAME)); auto &settings = *s; auto &v = values(); + v.error = QtUtilities::errorMessageForSettings(settings); settings.beginGroup(QStringLiteral("editor")); switch (settings.value(QStringLiteral("adoptfields"), static_cast(v.editor.adoptFields)).toInt()) { @@ -221,7 +222,7 @@ void save() { auto s = QtUtilities::getSettings(QStringLiteral(PROJECT_NAME)); auto &settings = *s; - const auto &v = values(); + auto &v = values(); settings.beginGroup(QStringLiteral("editor")); settings.setValue(QStringLiteral("adoptfields"), static_cast(v.editor.adoptFields)); @@ -311,6 +312,9 @@ void save() settings.endGroup(); v.qt.save(settings); + + settings.sync(); + v.error = QtUtilities::errorMessageForSettings(settings); } } // namespace Settings diff --git a/application/settings.h b/application/settings.h index ef5fb43..998530c 100644 --- a/application/settings.h +++ b/application/settings.h @@ -109,6 +109,7 @@ struct RenamingUtility { }; struct Settings { + QString error; Editor editor; FileBrowser fileBrowser; TagProcessing tagPocessing; diff --git a/gui/initiate.cpp b/gui/initiate.cpp index 07c499a..ce6d581 100644 --- a/gui/initiate.cpp +++ b/gui/initiate.cpp @@ -13,6 +13,7 @@ #include #include +#include ENABLE_QT_RESOURCES_OF_STATIC_DEPENDENCIES @@ -20,6 +21,19 @@ using namespace CppUtilities; namespace QtGui { +static void showSettingsError(const QString &settingsError) +{ + if (!settingsError.isEmpty()) { + QMessageBox::critical(nullptr, QCoreApplication::applicationName(), settingsError); + } +} + +static void saveSettings() +{ + Settings::save(); + showSettingsError(Settings::values().error); +} + int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, const QString &path, bool launchRenamingUtility) { SET_QT_APPLICATION_INFO; @@ -27,12 +41,14 @@ int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, Settings::restore(); // apply settings specified via command line args after the settings chosen in the GUI to give the CLI options precedence - Settings::values().qt.apply(); - qtConfigArgs.applySettings(Settings::values().qt.hasCustomFont()); + auto &settings = Settings::values(); + settings.qt.apply(); + qtConfigArgs.applySettings(settings.qt.hasCustomFont()); LOAD_QT_TRANSLATIONS; - QObject::connect(&application, &QCoreApplication::aboutToQuit, &Settings::save); + showSettingsError(settings.error); + QObject::connect(&application, &QCoreApplication::aboutToQuit, &saveSettings); if (launchRenamingUtility) { RenameFilesDialog window;