#ifndef MASTODONSHARESERVICESTATUS_H #define MASTODONSHARESERVICESTATUS_H #include #include #include #include namespace Accounts { class Account; class Manager; } namespace SignOn { class Error; class SessionData; } class MastodonShareServiceStatus : public QObject { Q_OBJECT public: explicit MastodonShareServiceStatus(QObject *parent = 0); enum QueryStatusMode { PassiveMode = 0, SignInMode = 1 }; void queryStatus(QueryStatusMode mode = SignInMode); struct AccountDetails { int accountId = 0; QString providerName; QString displayName; QString accessToken; QString apiHost; }; AccountDetails details(int index = 0) const; AccountDetails detailsByIdentifier(int accountIdentifier) const; int count() const; bool setCredentialsNeedUpdate(int accountId, const QString &serviceName); Q_SIGNALS: void serviceReady(); void serviceError(const QString &message); private Q_SLOTS: void signOnResponse(const SignOn::SessionData &responseData); void signOnError(const SignOn::Error &error); private: enum AccountDetailsState { Waiting, Populated, Error }; static QString normalizeApiHost(const QString &rawHost); void setAccountDetailsState(int accountId, AccountDetailsState state); void signIn(int accountId); AccountAuthenticator *m_auth; Accounts::Manager *m_accountManager; QString m_serviceName; QVector m_accountDetails; QHash m_accountIdToDetailsIdx; QHash m_accountDetailsState; }; #endif // MASTODONSHARESERVICESTATUS_H