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