foreach (const auto& accountId, settings->childGroups()) {
settings->beginGroup(accountId);
- if (auto acc = load(*settings)) {
+ if (auto acc = loadAccountHelper(*settings)) {
acc->_id = accountId;
- addAccount(acc);
+ if (auto accState = AccountState::loadFromSettings(acc, *settings)) {
+ addAccountState(accState);
+ }
}
settings->endGroup();
}
// Try to load the single account.
if (!settings->childKeys().isEmpty()) {
- if (auto acc = load(*settings)) {
+ if (auto acc = loadAccountHelper(*settings)) {
if (migratedCreds) {
acc->setMigrated(true);
}
settings->setValue(QLatin1String(versionC), 2);
foreach (const auto &acc, _accounts) {
settings->beginGroup(acc->account()->id());
- save(acc->account(), *settings, saveCredentials);
+ saveAccountHelper(acc->account().data(), *settings, saveCredentials);
+ acc->writeToSettings(*settings);
settings->endGroup();
}
qDebug() << "Saved all account settings, status:" << settings->status();
}
-void AccountManager::wantsAccountSavedSlot(AccountPtr a)
+void AccountManager::saveAccount(Account* a)
{
qDebug() << "Saving account" << a->url().toString();
auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
settings->beginGroup(a->id());
- save(a, *settings, false); // don't save credentials they might not have been loaded yet
+ saveAccountHelper(a, *settings, false); // don't save credentials they might not have been loaded yet
settings->endGroup();
settings->sync();
qDebug() << "Saved account settings, status:" << settings->status();
}
-void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveCredentials)
+void AccountManager::saveAccountState(AccountState* a)
+{
+ qDebug() << "Saving account state" << a->account()->url().toString();
+ auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
+ settings->beginGroup(a->account()->id());
+ a->writeToSettings(*settings);
+ settings->endGroup();
+
+ settings->sync();
+ qDebug() << "Saved account state settings, status:" << settings->status();
+}
+
+void AccountManager::saveAccountHelper(Account* acc, QSettings& settings, bool saveCredentials)
{
settings.setValue(QLatin1String(urlC), acc->_url.toString());
if (acc->_credentials) {
}
}
-AccountPtr AccountManager::load(QSettings& settings)
+AccountPtr AccountManager::loadAccountHelper(QSettings& settings)
{
auto acc = createAccount();
}
newAccount->_id = id;
- QObject::connect(newAccount.data(), SIGNAL(wantsAccountSaved(AccountPtr)),
- this, SLOT(wantsAccountSavedSlot(AccountPtr)));
-
- AccountStatePtr newAccountState(new AccountState(newAccount));
- _accounts << newAccountState;
- emit accountAdded(newAccountState.data());
- return newAccountState.data();
+ auto newAccountState = new AccountState(newAccount);
+ addAccountState(newAccountState);
+ return newAccountState;
}
void AccountManager::deleteAccount(AccountState* account)
}
}
+void AccountManager::addAccountState(AccountState* accountState)
+{
+ QObject::connect(accountState->account().data(),
+ SIGNAL(wantsAccountSaved(Account*)),
+ SLOT(saveAccount(Account*)));
+
+ AccountStatePtr ptr(accountState);
+ _accounts << ptr;
+ emit accountAdded(accountState);
+}
+
}
static AccountPtr createAccount();
private:
- void save(const AccountPtr& account, QSettings& settings, bool saveCredentials = true);
- AccountPtr load(QSettings& settings);
+ // saving and loading Account to settings
+ void saveAccountHelper(Account* account, QSettings& settings, bool saveCredentials = true);
+ AccountPtr loadAccountHelper(QSettings& settings);
+
bool restoreFromLegacySettings();
bool isAccountIdAvailable(const QString& id) const;
QString generateFreeAccountId() const;
+ // Adds an account to the tracked list, emitting accountAdded()
+ void addAccountState(AccountState* accountState);
+
public slots:
- void wantsAccountSavedSlot(AccountPtr a);
+ /// Saves account data, not including the credentials
+ void saveAccount(Account* a);
+
+ /// Saves account state data, not including the account
+ void saveAccountState(AccountState* a);
Q_SIGNALS:
typedef ConnectionValidator::Status ConnectionStatus;
/// Use the account as parent
- AccountState(AccountPtr account);
+ explicit AccountState(AccountPtr account);
~AccountState();
+ /** Creates an account state from settings and an Account object.
+ *
+ * Use from AccountManager with a prepared QSettings object only.
+ */
+ static AccountState* loadFromSettings(AccountPtr account, QSettings& settings);
+
+ /** Writes account state information to settings.
+ *
+ * It does not write the Account data.
+ */
+ void writeToSettings(QSettings& settings);
+
AccountPtr account() const;
ConnectionStatus connectionStatus() const;