Use New 7TV Cosmetics System (#4512)
* feat(seventv): use new cosmetics system * chore: add changelog entry * fix: old `clang-format` * fix: small suggestions pt1 * refactor: add 7tv api wrapper * fix: small clang-tidy things * fix: remove unused constants * fix: old clangtidy * refactor: rename * fix: increase interval to 60s * fix: newline * fix: Twitch * docs: add comment * fix: remove v2 badges endpoint * fix: deadlock This is actually really sad. * fix: remove api entry * fix: old clang-format * Sort functions in SeventvBadges.hpp/cpp * Remove unused vector include * Add comments to SeventvBadges.hpp functions * Rename `addBadge` to `registerBadge` * fix: cleanup eventloop * ci(test): add timeout --------- Co-authored-by: Felanbird <41973452+Felanbird@users.noreply.github.com> Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
#include "providers/seventv/SeventvAPI.hpp"
|
||||
|
||||
#include "common/Literals.hpp"
|
||||
#include "common/NetworkRequest.hpp"
|
||||
#include "common/NetworkResult.hpp"
|
||||
#include "common/Outcome.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace chatterino::literals;
|
||||
|
||||
const QString API_URL_USER = u"https://7tv.io/v3/users/twitch/%1"_s;
|
||||
const QString API_URL_EMOTE_SET = u"https://7tv.io/v3/emote-sets/%1"_s;
|
||||
const QString API_URL_PRESENCES = u"https://7tv.io/v3/users/%1/presences"_s;
|
||||
|
||||
} // namespace
|
||||
|
||||
// NOLINTBEGIN(readability-convert-member-functions-to-static)
|
||||
namespace chatterino {
|
||||
|
||||
void SeventvAPI::getUserByTwitchID(
|
||||
const QString &twitchID, SuccessCallback<const QJsonObject &> &&onSuccess,
|
||||
ErrorCallback &&onError)
|
||||
{
|
||||
NetworkRequest(API_URL_USER.arg(twitchID), NetworkRequestType::Get)
|
||||
.timeout(20000)
|
||||
.onSuccess([callback = std::move(onSuccess)](
|
||||
const NetworkResult &result) -> Outcome {
|
||||
auto json = result.parseJson();
|
||||
callback(json);
|
||||
return Success;
|
||||
})
|
||||
.onError([callback = std::move(onError)](const NetworkResult &result) {
|
||||
callback(result);
|
||||
})
|
||||
.execute();
|
||||
}
|
||||
|
||||
void SeventvAPI::getEmoteSet(const QString &emoteSet,
|
||||
SuccessCallback<const QJsonObject &> &&onSuccess,
|
||||
ErrorCallback &&onError)
|
||||
{
|
||||
NetworkRequest(API_URL_EMOTE_SET.arg(emoteSet), NetworkRequestType::Get)
|
||||
.timeout(25000)
|
||||
.onSuccess([callback = std::move(onSuccess)](
|
||||
const NetworkResult &result) -> Outcome {
|
||||
auto json = result.parseJson();
|
||||
callback(json);
|
||||
return Success;
|
||||
})
|
||||
.onError([callback = std::move(onError)](const NetworkResult &result) {
|
||||
callback(result);
|
||||
})
|
||||
.execute();
|
||||
}
|
||||
|
||||
void SeventvAPI::updatePresence(const QString &twitchChannelID,
|
||||
const QString &seventvUserID,
|
||||
SuccessCallback<> &&onSuccess,
|
||||
ErrorCallback &&onError)
|
||||
{
|
||||
QJsonObject payload{
|
||||
{u"kind"_s, 1}, // UserPresenceKindChannel
|
||||
{u"data"_s,
|
||||
QJsonObject{
|
||||
{u"id"_s, twitchChannelID},
|
||||
{u"platform"_s, u"TWITCH"_s},
|
||||
}},
|
||||
};
|
||||
|
||||
NetworkRequest(API_URL_PRESENCES.arg(seventvUserID),
|
||||
NetworkRequestType::Post)
|
||||
.json(payload)
|
||||
.timeout(10000)
|
||||
.onSuccess([callback = std::move(onSuccess)](const auto &) -> Outcome {
|
||||
callback();
|
||||
return Success;
|
||||
})
|
||||
.onError([callback = std::move(onError)](const NetworkResult &result) {
|
||||
callback(result);
|
||||
})
|
||||
.execute();
|
||||
}
|
||||
|
||||
SeventvAPI &getSeventvAPI()
|
||||
{
|
||||
static SeventvAPI instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
// NOLINTEND(readability-convert-member-functions-to-static)
|
||||
Reference in New Issue
Block a user