[Pkg-owncloud-commits] [owncloud-client] 87/470: AccountState: Allow storing state in settings
Sandro Knauß
hefee-guest at moszumanska.debian.org
Thu May 12 16:24:48 UTC 2016
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit d521232587bca2b01afb1b2174b26788d10408dc
Author: Christian Kamm <mail at ckamm.de>
Date: Tue Mar 1 16:08:23 2016 +0100
AccountState: Allow storing state in settings
This will be useful if we ever want to store account-level gui state.
I built this originally because I thought a paused account would be
this kind of state.
---
src/gui/accountmanager.cpp | 52 +++++++++++++++++++++++++++++++++-------------
src/gui/accountmanager.h | 15 ++++++++++---
src/gui/accountstate.cpp | 10 +++++++++
src/gui/accountstate.h | 14 ++++++++++++-
src/gui/folderman.cpp | 2 +-
src/libsync/account.cpp | 2 +-
src/libsync/account.h | 2 +-
test/stub.cpp | 2 +-
8 files changed, 76 insertions(+), 23 deletions(-)
diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp
index 0b5eed4..b755a37 100644
--- a/src/gui/accountmanager.cpp
+++ b/src/gui/accountmanager.cpp
@@ -53,9 +53,11 @@ bool AccountManager::restore()
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();
}
@@ -110,7 +112,7 @@ bool AccountManager::restoreFromLegacySettings()
// 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);
}
@@ -127,7 +129,8 @@ void AccountManager::save(bool saveCredentials)
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();
}
@@ -135,19 +138,31 @@ void AccountManager::save(bool saveCredentials)
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) {
@@ -190,7 +205,7 @@ void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveC
}
}
-AccountPtr AccountManager::load(QSettings& settings)
+AccountPtr AccountManager::loadAccountHelper(QSettings& settings)
{
auto acc = createAccount();
@@ -233,13 +248,9 @@ AccountState *AccountManager::addAccount(const AccountPtr& newAccount)
}
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)
@@ -296,4 +307,15 @@ QString AccountManager::generateFreeAccountId() const
}
}
+void AccountManager::addAccountState(AccountState* accountState)
+{
+ QObject::connect(accountState->account().data(),
+ SIGNAL(wantsAccountSaved(Account*)),
+ SLOT(saveAccount(Account*)));
+
+ AccountStatePtr ptr(accountState);
+ _accounts << ptr;
+ emit accountAdded(accountState);
+}
+
}
diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h
index 0aea939..321a6ec 100644
--- a/src/gui/accountmanager.h
+++ b/src/gui/accountmanager.h
@@ -76,15 +76,24 @@ public:
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:
diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp
index 0d562db..36da88e 100644
--- a/src/gui/accountstate.cpp
+++ b/src/gui/accountstate.cpp
@@ -46,6 +46,16 @@ AccountState::~AccountState()
{
}
+AccountState *AccountState::loadFromSettings(AccountPtr account, QSettings& /*settings*/)
+{
+ auto accountState = new AccountState(account);
+ return accountState;
+}
+
+void AccountState::writeToSettings(QSettings& /*settings*/)
+{
+}
+
AccountPtr AccountState::account() const
{
return _account;
diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h
index 61a8dc1..d06262a 100644
--- a/src/gui/accountstate.h
+++ b/src/gui/accountstate.h
@@ -64,9 +64,21 @@ public:
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;
diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp
index 37e0b1b..a0ea57f 100644
--- a/src/gui/folderman.cpp
+++ b/src/gui/folderman.cpp
@@ -565,7 +565,7 @@ void FolderMan::slotAccountStateChanged()
}
}
} else {
- qDebug() << "Account" << accountName << "disconnected, "
+ qDebug() << "Account" << accountName << "disconnected or paused, "
"terminating or descheduling sync folders";
if (_currentSyncFolder
diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp
index 57084dd..f0d9474 100644
--- a/src/libsync/account.cpp
+++ b/src/libsync/account.cpp
@@ -418,7 +418,7 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
if (_sslErrorHandler->handleErrors(errors, reply->sslConfiguration(), &approvedCerts, sharedFromThis())) {
QSslSocket::addDefaultCaCertificates(approvedCerts);
addApprovedCerts(approvedCerts);
- emit wantsAccountSaved(sharedFromThis());
+ emit wantsAccountSaved(this);
// all ssl certs are known and accepted. We can ignore the problems right away.
// qDebug() << out << "Certs are known and trusted! This is not an actual error.";
diff --git a/src/libsync/account.h b/src/libsync/account.h
index 4a4014d..d87988c 100644
--- a/src/libsync/account.h
+++ b/src/libsync/account.h
@@ -179,7 +179,7 @@ signals:
void proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
// e.g. when the approved SSL certificates changed
- void wantsAccountSaved(AccountPtr acc);
+ void wantsAccountSaved(Account* acc);
protected Q_SLOTS:
void slotHandleSslErrors(QNetworkReply*,QList<QSslError>);
diff --git a/test/stub.cpp b/test/stub.cpp
index bc9d62a..eb244c1 100644
--- a/test/stub.cpp
+++ b/test/stub.cpp
@@ -1,5 +1,5 @@
// stub to prevent linker error
#include "accountmanager.h"
OCC::AccountManager *OCC::AccountManager::instance() { return 0; }
-
+void OCC::AccountManager::saveAccountState(AccountState *) { }
void OCC::AccountManager::save(bool saveCredentials) { Q_UNUSED(saveCredentials); }
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list