From 5862f1552ba15bd31daf492f21811c5a1b1a4cab Mon Sep 17 00:00:00 2001 From: shunf4 Date: Wed, 6 Oct 2021 22:52:20 +0800 Subject: [PATCH] don't save settings on quit, if readSettings() not finished --- core/squawk.cpp | 69 ++++++++++++++++++++++++++----------------------- core/squawk.h | 1 + 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/core/squawk.cpp b/core/squawk.cpp index 6b8af49..d989afc 100644 --- a/core/squawk.cpp +++ b/core/squawk.cpp @@ -27,7 +27,8 @@ Core::Squawk::Squawk(QObject* parent): accounts(), amap(), network(), - waitingForAccounts(0) + waitingForAccounts(0), + isInitialized(false) #ifdef WITH_KWALLET ,kwallet() #endif @@ -66,39 +67,42 @@ void Core::Squawk::stop() { qDebug("Stopping squawk core.."); network.stop(); - QSettings settings; - settings.beginGroup("core"); - settings.beginWriteArray("accounts"); - SimpleCrypt crypto(passwordHash); - for (std::deque::size_type i = 0; i < accounts.size(); ++i) { - settings.setArrayIndex(i); - Account* acc = accounts[i]; - - Shared::AccountPassword ap = acc->getPasswordType(); - QString password; - - switch (ap) { - case Shared::AccountPassword::plain: - password = acc->getPassword(); - break; - case Shared::AccountPassword::jammed: - password = crypto.encryptToString(acc->getPassword()); - break; - default: - break; + + if (isInitialized) { + QSettings settings; + settings.beginGroup("core"); + settings.beginWriteArray("accounts"); + SimpleCrypt crypto(passwordHash); + for (std::deque::size_type i = 0; i < accounts.size(); ++i) { + settings.setArrayIndex(i); + Account* acc = accounts[i]; + + Shared::AccountPassword ap = acc->getPasswordType(); + QString password; + + switch (ap) { + case Shared::AccountPassword::plain: + password = acc->getPassword(); + break; + case Shared::AccountPassword::jammed: + password = crypto.encryptToString(acc->getPassword()); + break; + default: + break; + } + + settings.setValue("name", acc->getName()); + settings.setValue("server", acc->getServer()); + settings.setValue("login", acc->getLogin()); + settings.setValue("password", password); + settings.setValue("resource", acc->getResource()); + settings.setValue("passwordType", static_cast(ap)); } - - settings.setValue("name", acc->getName()); - settings.setValue("server", acc->getServer()); - settings.setValue("login", acc->getLogin()); - settings.setValue("password", password); - settings.setValue("resource", acc->getResource()); - settings.setValue("passwordType", static_cast(ap)); + settings.endArray(); + settings.endGroup(); + + settings.sync(); } - settings.endArray(); - settings.endGroup(); - - settings.sync(); emit quit(); } @@ -108,6 +112,7 @@ void Core::Squawk::start() qDebug("Starting squawk core.."); readSettings(); + isInitialized = true; network.start(); } diff --git a/core/squawk.h b/core/squawk.h index 338eb40..74b1e1a 100644 --- a/core/squawk.h +++ b/core/squawk.h @@ -133,6 +133,7 @@ private: Shared::Availability state; NetworkAccess network; uint8_t waitingForAccounts; + bool isInitialized; #ifdef WITH_KWALLET PSE::KWallet kwallet; -- 2.44.0