mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Remove urlFetchJSON
usages. They now use NetworkRequest.getJSON
This commit is contained in:
parent
75079d5ac8
commit
41ec892bf8
4 changed files with 67 additions and 45 deletions
|
@ -38,28 +38,7 @@ Resources::Resources(EmoteManager &em, WindowManager &wm)
|
||||||
, buttonBan(lli(em, wm, ":/images/button_ban.png", 0.25))
|
, buttonBan(lli(em, wm, ":/images/button_ban.png", 0.25))
|
||||||
, buttonTimeout(lli(em, wm, ":/images/button_timeout.png", 0.25))
|
, buttonTimeout(lli(em, wm, ":/images/button_timeout.png", 0.25))
|
||||||
{
|
{
|
||||||
QString badgesUrl("https://badges.twitch.tv/v1/badges/global/display?language=en");
|
this->loadDynamicTwitchBadges();
|
||||||
|
|
||||||
util::urlFetchJSON(badgesUrl, QThread::currentThread(), [this](QJsonObject &root) {
|
|
||||||
QJsonObject sets = root.value("badge_sets").toObject();
|
|
||||||
qDebug() << "badges fetched";
|
|
||||||
for (QJsonObject::iterator it = sets.begin(); it != sets.end(); ++it) {
|
|
||||||
QJsonObject versions = it.value().toObject().value("versions").toObject();
|
|
||||||
|
|
||||||
auto &badgeSet = this->badgeSets[it.key().toStdString()];
|
|
||||||
auto &versionsMap = badgeSet.versions;
|
|
||||||
|
|
||||||
for (auto versionIt = std::begin(versions); versionIt != std::end(versions);
|
|
||||||
++versionIt) {
|
|
||||||
std::string kkey = versionIt.key().toStdString();
|
|
||||||
QJsonObject versionObj = versionIt.value().toObject();
|
|
||||||
BadgeVersion v(std::move(versionObj), this->emoteManager, this->windowManager);
|
|
||||||
versionsMap.emplace(kkey, v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this->dynamicBadgesLoaded = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
this->loadChatterinoBadges();
|
this->loadChatterinoBadges();
|
||||||
}
|
}
|
||||||
|
@ -83,12 +62,13 @@ void Resources::loadChannelData(const std::string &roomID, bool bypassCache)
|
||||||
{
|
{
|
||||||
qDebug() << "Load channel data for" << QString::fromStdString(roomID);
|
qDebug() << "Load channel data for" << QString::fromStdString(roomID);
|
||||||
|
|
||||||
// Step 1: Get
|
|
||||||
|
|
||||||
QString url = "https://badges.twitch.tv/v1/badges/channels/" + QString::fromStdString(roomID) +
|
QString url = "https://badges.twitch.tv/v1/badges/channels/" + QString::fromStdString(roomID) +
|
||||||
"/display?language=en";
|
"/display?language=en";
|
||||||
|
|
||||||
util::urlFetchJSON(url, QThread::currentThread(), [this, roomID](QJsonObject &root) {
|
util::NetworkRequest req(url);
|
||||||
|
req.setCaller(QThread::currentThread());
|
||||||
|
|
||||||
|
req.getJSON([this, roomID](QJsonObject &root) {
|
||||||
QJsonObject sets = root.value("badge_sets").toObject();
|
QJsonObject sets = root.value("badge_sets").toObject();
|
||||||
|
|
||||||
Resources::Channel &ch = this->channels[roomID];
|
Resources::Channel &ch = this->channels[roomID];
|
||||||
|
@ -112,13 +92,44 @@ void Resources::loadChannelData(const std::string &roomID, bool bypassCache)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Resources::loadDynamicTwitchBadges()
|
||||||
|
{
|
||||||
|
static QString url("https://badges.twitch.tv/v1/badges/global/display?language=en");
|
||||||
|
|
||||||
|
util::NetworkRequest req(url);
|
||||||
|
req.setCaller(QThread::currentThread());
|
||||||
|
req.getJSON([this](QJsonObject &root) {
|
||||||
|
QJsonObject sets = root.value("badge_sets").toObject();
|
||||||
|
qDebug() << "badges fetched";
|
||||||
|
for (QJsonObject::iterator it = sets.begin(); it != sets.end(); ++it) {
|
||||||
|
QJsonObject versions = it.value().toObject().value("versions").toObject();
|
||||||
|
|
||||||
|
auto &badgeSet = this->badgeSets[it.key().toStdString()];
|
||||||
|
auto &versionsMap = badgeSet.versions;
|
||||||
|
|
||||||
|
for (auto versionIt = std::begin(versions); versionIt != std::end(versions);
|
||||||
|
++versionIt) {
|
||||||
|
std::string kkey = versionIt.key().toStdString();
|
||||||
|
QJsonObject versionObj = versionIt.value().toObject();
|
||||||
|
BadgeVersion v(std::move(versionObj), this->emoteManager, this->windowManager);
|
||||||
|
versionsMap.emplace(kkey, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->dynamicBadgesLoaded = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void Resources::loadChatterinoBadges()
|
void Resources::loadChatterinoBadges()
|
||||||
{
|
{
|
||||||
this->chatterinoBadges.clear();
|
this->chatterinoBadges.clear();
|
||||||
|
|
||||||
QString url = "https://fourtf.com/chatterino/badges.json";
|
static QString url("https://fourtf.com/chatterino/badges.json");
|
||||||
|
|
||||||
util::urlFetchJSON(url, QThread::currentThread(), [this](QJsonObject &root) {
|
util::NetworkRequest req(url);
|
||||||
|
req.setCaller(QThread::currentThread());
|
||||||
|
|
||||||
|
req.getJSON([this](QJsonObject &root) {
|
||||||
QJsonArray badgeVariants = root.value("badges").toArray();
|
QJsonArray badgeVariants = root.value("badges").toArray();
|
||||||
qDebug() << "chatbadges fetched";
|
qDebug() << "chatbadges fetched";
|
||||||
for (QJsonArray::iterator it = badgeVariants.begin(); it != badgeVariants.end(); ++it) {
|
for (QJsonArray::iterator it = badgeVariants.begin(); it != badgeVariants.end(); ++it) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ public:
|
||||||
std::map<std::string, std::shared_ptr<ChatterinoBadge>> chatterinoBadges;
|
std::map<std::string, std::shared_ptr<ChatterinoBadge>> chatterinoBadges;
|
||||||
|
|
||||||
void loadChannelData(const std::string &roomID, bool bypassCache = false);
|
void loadChannelData(const std::string &roomID, bool bypassCache = false);
|
||||||
|
void loadDynamicTwitchBadges();
|
||||||
void loadChatterinoBadges();
|
void loadChatterinoBadges();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,31 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonObject>
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkReply>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
|
|
||||||
namespace messages {
|
|
||||||
|
|
||||||
class LazyLoadedImage;
|
|
||||||
|
|
||||||
} // namespace messages
|
|
||||||
|
|
||||||
namespace util {
|
namespace util {
|
||||||
|
|
||||||
|
static QJsonObject parseJSONFromReplyxD(QNetworkReply *reply)
|
||||||
|
{
|
||||||
|
if (reply->error() != QNetworkReply::NetworkError::NoError) {
|
||||||
|
return QJsonObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray data = reply->readAll();
|
||||||
|
QJsonDocument jsonDoc(QJsonDocument::fromJson(data));
|
||||||
|
|
||||||
|
if (jsonDoc.isNull()) {
|
||||||
|
return QJsonObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonDoc.object();
|
||||||
|
}
|
||||||
|
|
||||||
class NetworkRequest
|
class NetworkRequest
|
||||||
{
|
{
|
||||||
struct Data {
|
struct Data {
|
||||||
|
@ -96,6 +108,15 @@ public:
|
||||||
|
|
||||||
emit requester.requestUrl();
|
emit requester.requestUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename FinishedCallback>
|
||||||
|
void getJSON(FinishedCallback onFinished)
|
||||||
|
{
|
||||||
|
this->get([onFinished{std::move(onFinished)}](auto reply) {
|
||||||
|
auto object = parseJSONFromReplyxD(reply);
|
||||||
|
onFinished(object);
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class NetworkWorker : public QObject
|
class NetworkWorker : public QObject
|
||||||
|
|
|
@ -38,17 +38,6 @@ static QJsonObject parseJSONFromReply(QNetworkReply *reply)
|
||||||
return jsonDoc.object();
|
return jsonDoc.object();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void urlFetchJSON(const QString &url, const QObject *caller,
|
|
||||||
std::function<void(QJsonObject &)> successCallback)
|
|
||||||
{
|
|
||||||
util::NetworkRequest req(url);
|
|
||||||
req.setCaller(caller);
|
|
||||||
req.get([=](QNetworkReply *reply) {
|
|
||||||
auto node = parseJSONFromReply(reply);
|
|
||||||
successCallback(node);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static void urlFetchTimeout(const QString &url, const QObject *caller,
|
static void urlFetchTimeout(const QString &url, const QObject *caller,
|
||||||
std::function<void(QNetworkReply *)> successCallback, int timeoutMs)
|
std::function<void(QNetworkReply *)> successCallback, int timeoutMs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue