[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