diff options
author | Christian Kamm <kamm@incasoftware.de> | 2014-12-17 16:09:57 +0300 |
---|---|---|
committer | Christian Kamm <kamm@incasoftware.de> | 2014-12-18 17:39:51 +0300 |
commit | 6c7acd585e1a5758180d71de39119db5d890093d (patch) | |
tree | c0be1cef8c44737b5976752586e0c2da2cff2d91 /src/gui/accountstate.h | |
parent | a006c6962caa403ef9f07907856cd178b50f77f2 (diff) |
Account: Split into libsync/Account and gui/AccountState.
This allows all the account state information to live in gui
while the sync-relevant data stays in libsync.
I also moved quotainfo to gui since it depends on the account state.
Diffstat (limited to 'src/gui/accountstate.h')
-rw-r--r-- | src/gui/accountstate.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h new file mode 100644 index 000000000..22c2cd4da --- /dev/null +++ b/src/gui/accountstate.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) by Daniel Molkentin <danimo@owncloud.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + + +#ifndef ACCOUNTINFO_H +#define ACCOUNTINFO_H + +#include <QByteArray> +#include "utility.h" +#include "connectionvalidator.h" + + +namespace OCC { + +class QuotaInfo; +class AccountState; +class Account; +class AbstractCredentials; + +class OWNCLOUDSYNC_EXPORT AccountStateManager : public QObject { + Q_OBJECT +public: + static AccountStateManager *instance(); + + AccountStateManager(); + ~AccountStateManager(); + + AccountState *accountState() { return _accountState; } + +signals: + void accountStateAdded(AccountState *accountState); + void accountStateRemoved(AccountState *accountState); + +private slots: + void slotAccountAdded(Account *account); + +private: + void setAccountState(AccountState *account); + + AccountState *_accountState; +}; + +/** + * @brief Extra info about an ownCloud server account. + */ +class OWNCLOUDSYNC_EXPORT AccountState : public QObject { + Q_OBJECT +public: + enum State { + /// Not even attempting to connect, most likely because the + /// user explicitly signed out or cancelled a credential dialog. + SignedOut, + + /// Account would like to be connected but hasn't heard back yet. + Disconnected, + + /// The account is successfully talking to the server. + Connected, + + /// Could not communicate with the server for some reason. + /// We assume this may resolve itself over time and will try + /// again automatically. + NetworkError, + + /// An error like invalid credentials where retrying won't help. + ConfigurationError + }; + + /// The actual current connectivity status. + typedef ConnectionValidator::Status ConnectionStatus; + + AccountState(Account* account); + ~AccountState(); + + Account* account() const; + + ConnectionStatus connectionStatus() const; + QStringList connectionErrors() const; + static QString connectionStatusString(ConnectionStatus status); + + State state() const; + static QString stateString(State status); + + bool isSignedOut() const; + void setSignedOut(bool signedOut); + + bool isConnected() const; + + QuotaInfo *quotaInfo(); + + /// Triggers a ping to the server to update state and + /// connection status and errors. + void checkConnectivity(); + +private: + void setState(State state); + +signals: + void stateChanged(int state); + +protected Q_SLOTS: + void slotConnectionValidatorResult(ConnectionValidator::Status status, const QStringList& errors); + void slotInvalidCredentials(); + void slotCredentialsFetched(AbstractCredentials* creds); + +private: + Account * _account; + QuotaInfo *_quotaInfo; + State _state; + ConnectionStatus _connectionStatus; + QStringList _connectionErrors; + bool _waitingForNewCredentials; +}; + +} + +Q_DECLARE_METATYPE(OCC::AccountState*) + +#endif //ACCOUNTINFO_H |