summaryrefslogtreecommitdiff
path: root/transferengine-plugins/mastodonshareservicestatus.h
blob: cf2e1f879d8a264bd63b66807268ecea55dc2c6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * Copyright (C) 2013-2026 Jolla Ltd.
 */

#ifndef MASTODONSHARESERVICESTATUS_H
#define MASTODONSHARESERVICESTATUS_H

#include <QtCore/QHash>
#include <QtCore/QObject>
#include <QtCore/QVector>

#include <accountauthenticator.h>

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
    };

    void setAccountDetailsState(int accountId, AccountDetailsState state);
    void signIn(int accountId);

    AccountAuthenticator *m_auth;
    Accounts::Manager *m_accountManager;
    QString m_serviceName;
    QVector<AccountDetails> m_accountDetails;
    QHash<int, int> m_accountIdToDetailsIdx;
    QHash<int, AccountDetailsState> m_accountDetailsState;
};

#endif // MASTODONSHARESERVICESTATUS_H