1 #include "providers/twitch/api/Kraken.hpp"
2 
3 #include "common/Outcome.hpp"
4 #include "common/QLogging.hpp"
5 #include "providers/twitch/TwitchCommon.hpp"
6 
7 namespace chatterino {
8 
9 static Kraken *instance = nullptr;
10 
getUserEmotes(TwitchAccount * account,ResultCallback<KrakenEmoteSets> successCallback,KrakenFailureCallback failureCallback)11 void Kraken::getUserEmotes(TwitchAccount *account,
12                            ResultCallback<KrakenEmoteSets> successCallback,
13                            KrakenFailureCallback failureCallback)
14 {
15     this->makeRequest(QString("users/%1/emotes").arg(account->getUserId()), {})
16         .authorizeTwitchV5(account->getOAuthClient(), account->getOAuthToken())
17         .onSuccess([successCallback](auto result) -> Outcome {
18             auto data = result.parseJson();
19 
20             KrakenEmoteSets emoteSets(data);
21 
22             successCallback(emoteSets);
23 
24             return Success;
25         })
26         .onError([failureCallback](NetworkResult /*result*/) {
27             // TODO: make better xd
28             failureCallback();
29         })
30         .execute();
31 }
32 
makeRequest(QString url,QUrlQuery urlQuery)33 NetworkRequest Kraken::makeRequest(QString url, QUrlQuery urlQuery)
34 {
35     assert(!url.startsWith("/"));
36 
37     if (this->clientId.isEmpty())
38     {
39         qCDebug(chatterinoTwitch)
40             << "Kraken::makeRequest called without a client ID set BabyRage";
41     }
42 
43     const QString baseUrl("https://api.twitch.tv/kraken/");
44 
45     QUrl fullUrl(baseUrl + url);
46 
47     fullUrl.setQuery(urlQuery);
48 
49     if (!this->oauthToken.isEmpty())
50     {
51         return NetworkRequest(fullUrl)
52             .timeout(5 * 1000)
53             .header("Accept", "application/vnd.twitchtv.v5+json")
54             .header("Client-ID", this->clientId)
55             .header("Authorization", "OAuth " + this->oauthToken);
56     }
57 
58     return NetworkRequest(fullUrl)
59         .timeout(5 * 1000)
60         .header("Accept", "application/vnd.twitchtv.v5+json")
61         .header("Client-ID", this->clientId);
62 }
63 
update(QString clientId,QString oauthToken)64 void Kraken::update(QString clientId, QString oauthToken)
65 {
66     this->clientId = std::move(clientId);
67     this->oauthToken = std::move(oauthToken);
68 }
69 
initialize()70 void Kraken::initialize()
71 {
72     assert(instance == nullptr);
73 
74     instance = new Kraken();
75 
76     getKraken()->update(getDefaultClientID(), "");
77 }
78 
getKraken()79 Kraken *getKraken()
80 {
81     assert(instance != nullptr);
82 
83     return instance;
84 }
85 
86 }  // namespace chatterino
87