diff options
author | Christian Kamm <kamm@incasoftware.de> | 2015-04-23 16:42:18 +0300 |
---|---|---|
committer | Christian Kamm <kamm@incasoftware.de> | 2015-04-23 17:08:20 +0300 |
commit | f184d66ea23e5177c75c58d199893dce32c1c6a9 (patch) | |
tree | fdb7ea39af0c0480987f8e0f904d15edb863d5cb | |
parent | 11927d625d154aec9f7f2228f61f16053631ade9 (diff) |
Save and restore multiple accounts.
-rw-r--r-- | src/gui/accountmanager.cpp | 90 | ||||
-rw-r--r-- | src/gui/accountmanager.h | 10 |
2 files changed, 68 insertions, 32 deletions
diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 518154dd3..b72af542a 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -40,13 +40,34 @@ AccountManager *AccountManager::instance() bool AccountManager::restore() { + QScopedPointer<QSettings> settings(Account::settingsWithGroup("Accounts")); + + // If there are no accounts, check the old format. + if (settings->childGroups().isEmpty()) { + return restoreFromLegacySettings(); + } + + foreach (const auto& accountId, settings->childGroups()) { + settings->beginGroup(accountId); + if (auto acc = load(settings)) { + acc->_id = accountId; + addAccount(acc); + } + settings->endGroup(); + } + + return true; +} + +bool AccountManager::restoreFromLegacySettings() +{ // try to open the correctly themed settings QScopedPointer<QSettings> settings(Account::settingsWithGroup(Theme::instance()->appName())); - AccountPtr acc; bool migratedCreds = false; // if the settings file could not be opened, the childKeys list is empty + // then try to load settings from a very old place if( settings->childKeys().isEmpty() ) { // Now try to open the original ownCloud settings to see if they exist. QString oCCfgFile = QDir::fromNativeSeparators( settings->fileName() ); @@ -72,7 +93,7 @@ bool AccountManager::restore() // in case the urls are equal reset the settings object to read from // the ownCloud settings object qDebug() << "Migrate oC config if " << oCUrl << " == " << overrideUrl << ":" - << (oCUrl == overrideUrl ? "Yes" : "No"); + << (oCUrl == overrideUrl ? "Yes" : "No"); if( oCUrl == overrideUrl ) { migratedCreds = true; settings.reset( oCSettings ); @@ -83,44 +104,31 @@ bool AccountManager::restore() } } + // Try to load the single account. if (!settings->childKeys().isEmpty()) { - acc = Account::create(); - - acc->setUrl(settings->value(QLatin1String(urlC)).toUrl()); - - // We want to only restore settings for that auth type and the user value - acc->_settingsMap.insert(QLatin1String(userC), settings->value(userC)); - QString authTypePrefix = settings->value(authTypeC).toString() + "_"; - Q_FOREACH(QString key, settings->childKeys()) { - if (!key.startsWith(authTypePrefix)) - continue; - acc->_settingsMap.insert(key, settings->value(key)); + if (auto acc = load(settings)) { + if (migratedCreds) { + acc->setMigrated(true); + } + addAccount(acc); + return true; } - - acc->setCredentials(CredentialsFactory::create(settings->value(QLatin1String(authTypeC)).toString())); - - // now the cert, it is in the general group - settings->beginGroup(QLatin1String("General")); - acc->setApprovedCerts(QSslCertificate::fromData(settings->value(caCertsKeyC).toByteArray())); - acc->setMigrated(migratedCreds); - acc->setSslErrorHandler(new SslDialogErrorHandler); - addAccount(acc); - return true; } return false; } - void AccountManager::save() { - foreach (const auto &acc , _accounts) { - save(acc->account()); + QScopedPointer<QSettings> settings(Account::settingsWithGroup("Accounts")); + foreach (const auto &acc, _accounts) { + settings->beginGroup(acc->account()->id()); + save(acc->account(), settings); + settings->endGroup(); } } -void AccountManager::save(const AccountPtr& acc) +void AccountManager::save(const AccountPtr& acc, QScopedPointer<QSettings>& settings) { - QScopedPointer<QSettings> settings(Account::settingsWithGroup(Theme::instance()->appName())); settings->setValue(QLatin1String(urlC), acc->_url.toString()); if (acc->_credentials) { acc->_credentials->persist(); @@ -145,6 +153,7 @@ void AccountManager::save(const AccountPtr& acc) if (!certs.isEmpty()) { settings->setValue( QLatin1String(caCertsKeyC), certs ); } + settings->endGroup(); // Save cookies. if (acc->_am) { @@ -156,6 +165,31 @@ void AccountManager::save(const AccountPtr& acc) } } +AccountPtr AccountManager::load(const QScopedPointer<QSettings>& settings) +{ + auto acc = Account::create(); + + acc->setUrl(settings->value(QLatin1String(urlC)).toUrl()); + + // We want to only restore settings for that auth type and the user value + acc->_settingsMap.insert(QLatin1String(userC), settings->value(userC)); + QString authTypePrefix = settings->value(authTypeC).toString() + "_"; + Q_FOREACH(QString key, settings->childKeys()) { + if (!key.startsWith(authTypePrefix)) + continue; + acc->_settingsMap.insert(key, settings->value(key)); + } + + acc->setCredentials(CredentialsFactory::create(settings->value(QLatin1String(authTypeC)).toString())); + + // now the cert, it is in the general group + settings->beginGroup(QLatin1String("General")); + acc->setApprovedCerts(QSslCertificate::fromData(settings->value(caCertsKeyC).toByteArray())); + acc->setSslErrorHandler(new SslDialogErrorHandler); + settings->endGroup(); + return acc; +} + void AccountManager::addAccount(const AccountPtr& newAccount) { AccountStatePtr newAccountState(new AccountState(newAccount)); diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index 0ea336184..65a9ccc3f 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -27,12 +27,12 @@ public: ~AccountManager() {} /** - * Saves the account to a given settings file + * Saves the accounts to a given settings file */ void save(); /** - * Creates an account object from from a given settings file. + * Creates account objects from from a given settings file. * return true if the account was restored */ bool restore(); @@ -51,7 +51,9 @@ public: QList<AccountStatePtr> accounts() { return _accounts; } private: - void save(const AccountPtr &account); + void save(const AccountPtr& account, QScopedPointer<QSettings>& settings); + AccountPtr load(const QScopedPointer<QSettings>& settings); + bool restoreFromLegacySettings(); Q_SIGNALS: @@ -63,4 +65,4 @@ private: QList<AccountStatePtr> _accounts; }; -}
\ No newline at end of file +} |