Files
chatterino2/src/providers/chatterino/ChatterinoBadges.cpp
nerix 1043f9f803 Remove Unnecessary Includes in Headers (#4275)
* refactor: remove unnecessary includes in headers

* fix: formatting

* chore: changelog

* fix: scrollbar

* fix: suggestions and old appbase remains

* fix: suggestion

* fix: missing Qt forward declarations

* fix: another qt include

* fix: includes for precompiled-headers=off

* Add missing `<memory>` includes

* Add missing `#pragma once`

* Fix tests

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
2022-12-31 14:41:01 +00:00

74 lines
1.9 KiB
C++

#include "ChatterinoBadges.hpp"
#include "common/NetworkRequest.hpp"
#include "common/NetworkResult.hpp"
#include "common/Outcome.hpp"
#include "messages/Emote.hpp"
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include <QThread>
#include <QUrl>
namespace chatterino {
void ChatterinoBadges::initialize(Settings &settings, Paths &paths)
{
this->loadChatterinoBadges();
}
ChatterinoBadges::ChatterinoBadges()
{
}
boost::optional<EmotePtr> ChatterinoBadges::getBadge(const UserId &id)
{
std::shared_lock lock(this->mutex_);
auto it = badgeMap.find(id.string);
if (it != badgeMap.end())
{
return emotes[it->second];
}
return boost::none;
}
void ChatterinoBadges::loadChatterinoBadges()
{
static QUrl url("https://api.chatterino.com/badges");
NetworkRequest(url)
.concurrent()
.onSuccess([this](auto result) -> Outcome {
auto jsonRoot = result.parseJson();
std::unique_lock lock(this->mutex_);
int index = 0;
for (const auto &jsonBadge_ : jsonRoot.value("badges").toArray())
{
auto jsonBadge = jsonBadge_.toObject();
auto emote = Emote{
EmoteName{},
ImageSet{Url{jsonBadge.value("image1").toString()},
Url{jsonBadge.value("image2").toString()},
Url{jsonBadge.value("image3").toString()}},
Tooltip{jsonBadge.value("tooltip").toString()}, Url{}};
emotes.push_back(
std::make_shared<const Emote>(std::move(emote)));
for (const auto &user : jsonBadge.value("users").toArray())
{
badgeMap[user.toString()] = index;
}
++index;
}
return Success;
})
.execute();
}
} // namespace chatterino