From: Christian Schwarz Date: Sat, 18 Mar 2017 19:05:43 +0000 (+0100) Subject: Save Core settings synchronously and report errors. X-Git-Tag: travis-deploy-test~302 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=10e6f4629e39c66cfb8db6ab2806bf8f13ec700b Save Core settings synchronously and report errors. Resolves GH-281. --- diff --git a/src/common/settings.cpp b/src/common/settings.cpp index c3713d9c..cdb152cd 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -120,6 +120,17 @@ void Settings::setVersionMinor(const uint versionMinor) s.setValue("Config/VersionMinor", versionMinor); } +bool Settings::sync() { + create_qsettings; + s.sync(); + switch (s.status()) { + case QSettings::NoError: + return true; + default: + return false; + } +} + bool Settings::isWritable() { create_qsettings; return s.isWritable(); diff --git a/src/common/settings.h b/src/common/settings.h index 21938643..72dec758 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -83,6 +83,13 @@ public: */ virtual void setVersionMinor(const uint versionMinor); + /** + * Persist unsaved changes to permanent storage + * + * @return true if succeeded, false otherwise + */ + bool sync(); + /** * Check if the configuration storage is writable. * diff --git a/src/core/core.cpp b/src/core/core.cpp index dadd70a4..ad9eab85 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -299,7 +299,9 @@ QString Core::setupCore(const QString &adminUser, const QString &adminPassword, return tr("Could not setup storage!"); } - saveBackendSettings(backend, setupData); + if (!saveBackendSettings(backend, setupData)) { + return tr("Could not save backend settings, probably a permission problem."); + } quInfo() << qPrintable(tr("Creating admin user...")); _storage->addUser(adminUser, adminPassword); @@ -705,7 +707,9 @@ bool Core::selectBackend(const QString &backend) Storage::State storageState = storage->init(settings); switch (storageState) { case Storage::IsReady: - saveBackendSettings(backend, settings); + if (!saveBackendSettings(backend, settings)) { + qCritical() << qPrintable(QString("Could not save backend settings, probably a permission problem.")); + } qWarning() << "Switched backend to:" << qPrintable(backend); qWarning() << "Backend already initialized. Skipping Migration"; return true; @@ -723,7 +727,9 @@ bool Core::selectBackend(const QString &backend) return false; } - saveBackendSettings(backend, settings); + if (!saveBackendSettings(backend, settings)) { + qCritical() << qPrintable(QString("Could not save backend settings, probably a permission problem.")); + } qWarning() << "Switched backend to:" << qPrintable(backend); break; } @@ -739,7 +745,10 @@ bool Core::selectBackend(const QString &backend) storage = 0; if (reader->migrateTo(writer)) { qDebug() << "Migration finished!"; - saveBackendSettings(backend, settings); + if (!saveBackendSettings(backend, settings)) { + qCritical() << qPrintable(QString("Could not save backend settings, probably a permission problem.")); + return false; + } return true; } return false; @@ -886,12 +895,14 @@ AbstractSqlMigrationWriter *Core::getMigrationWriter(Storage *storage) } -void Core::saveBackendSettings(const QString &backend, const QVariantMap &settings) +bool Core::saveBackendSettings(const QString &backend, const QVariantMap &settings) { QVariantMap dbsettings; dbsettings["Backend"] = backend; dbsettings["ConnectionProperties"] = settings; - CoreSettings().setStorageSettings(dbsettings); + CoreSettings s = CoreSettings(); + s.setStorageSettings(dbsettings); + return s.sync(); } diff --git a/src/core/core.h b/src/core/core.h index 88b398a2..f9746451 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -573,7 +573,7 @@ private: void unregisterStorageBackend(Storage *); bool selectBackend(const QString &backend); bool createUser(); - void saveBackendSettings(const QString &backend, const QVariantMap &settings); + bool saveBackendSettings(const QString &backend, const QVariantMap &settings); QVariantMap promptForSettings(const Storage *storage); private: