fix dynamic bit badges
This commit is contained in:
+18
-8
@@ -38,31 +38,41 @@ Resources::Resources(EmoteManager &emoteManager, WindowManager &windowManager)
|
|||||||
{
|
{
|
||||||
QString badgesUrl("https://badges.twitch.tv/v1/badges/global/display?language=en");
|
QString badgesUrl("https://badges.twitch.tv/v1/badges/global/display?language=en");
|
||||||
|
|
||||||
util::urlJsonFetch(badgesUrl, [this](QJsonObject &root) {
|
util::urlJsonFetch(badgesUrl, [this, &emoteManager, &windowManager](QJsonObject &root) {
|
||||||
QJsonObject sets = root.value("badge_sets").toObject();
|
QJsonObject sets = root.value("badge_sets").toObject();
|
||||||
|
|
||||||
for (auto it = std::begin(sets); it != std::end(sets); ++it) {
|
for (auto it = std::begin(sets); it != std::end(sets); ++it) {
|
||||||
printf("%s\n", qPrintable(it.key()));
|
|
||||||
|
|
||||||
auto &badgeSet = this->badgeSets[it.key().toStdString()];
|
auto &badgeSet = this->badgeSets[it.key().toStdString()];
|
||||||
|
|
||||||
std::map<std::string, BadgeVersion> &versionsMap = badgeSet.versions;
|
std::map<std::string, BadgeVersion> &versionsMap = badgeSet.versions;
|
||||||
|
|
||||||
QJsonObject versions = sets.value("versions").toObject();
|
QJsonObject versions = it.value().value("versions").toObject();
|
||||||
|
|
||||||
for (auto versionIt = std::begin(versions); versionIt != std::end(versions);
|
for (auto versionIt = std::begin(versions); versionIt != std::end(versions);
|
||||||
++versionIt) {
|
++versionIt) {
|
||||||
/*
|
|
||||||
std::string kkey = versionIt.key().toStdString();
|
std::string kkey = versionIt.key().toStdString();
|
||||||
QJsonObject versionObj = versionIt.value().toObject();
|
QJsonObject versionObj = versionIt.value().toObject();
|
||||||
versionsMap.emplace(std::make_pair(kkey, versionObj));
|
BadgeVersion v(std::move(versionObj), emoteManager, windowManager);
|
||||||
*/
|
versionsMap.emplace(kkey, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->dynamicBadgesLoaded = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Resources::BadgeVersion::BadgeVersion(QJsonObject &&root)
|
Resources::BadgeVersion::BadgeVersion(QJsonObject &&root, EmoteManager &emoteManager,
|
||||||
|
WindowManager &windowManager)
|
||||||
|
: badgeImage1x(new messages::LazyLoadedImage(emoteManager, windowManager,
|
||||||
|
root.value("image_url_1x").toString()))
|
||||||
|
, badgeImage2x(new messages::LazyLoadedImage(emoteManager, windowManager,
|
||||||
|
root.value("image_url_2x").toString()))
|
||||||
|
, badgeImage4x(new messages::LazyLoadedImage(emoteManager, windowManager,
|
||||||
|
root.value("image_url_4x").toString()))
|
||||||
|
, description(root.value("description").toString().toStdString())
|
||||||
|
, title(root.value("title").toString().toStdString())
|
||||||
|
, clickAction(root.value("clickAction").toString().toStdString())
|
||||||
|
, clickURL(root.value("clickURL").toString().toStdString())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -36,7 +36,8 @@ public:
|
|||||||
struct BadgeVersion {
|
struct BadgeVersion {
|
||||||
BadgeVersion() = delete;
|
BadgeVersion() = delete;
|
||||||
|
|
||||||
explicit BadgeVersion(QJsonObject &&root);
|
explicit BadgeVersion(QJsonObject &&root, EmoteManager &emoteManager,
|
||||||
|
WindowManager &windowManager);
|
||||||
|
|
||||||
messages::LazyLoadedImage *badgeImage1x;
|
messages::LazyLoadedImage *badgeImage1x;
|
||||||
messages::LazyLoadedImage *badgeImage2x;
|
messages::LazyLoadedImage *badgeImage2x;
|
||||||
@@ -44,7 +45,7 @@ public:
|
|||||||
std::string description;
|
std::string description;
|
||||||
std::string title;
|
std::string title;
|
||||||
std::string clickAction;
|
std::string clickAction;
|
||||||
std::string clickUrl;
|
std::string clickURL;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BadgeSet {
|
struct BadgeSet {
|
||||||
@@ -53,7 +54,6 @@ public:
|
|||||||
|
|
||||||
std::map<std::string, BadgeSet> badgeSets;
|
std::map<std::string, BadgeSet> badgeSets;
|
||||||
|
|
||||||
bool bitBadgesLoaded = false;
|
|
||||||
bool dynamicBadgesLoaded = false;
|
bool dynamicBadgesLoaded = false;
|
||||||
|
|
||||||
messages::LazyLoadedImage *buttonBan;
|
messages::LazyLoadedImage *buttonBan;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ SharedMessage TwitchMessageBuilder::parse(const Communi::IrcPrivateMessage *ircM
|
|||||||
const auto &channelResources = resources.channels[roomID];
|
const auto &channelResources = resources.channels[roomID];
|
||||||
|
|
||||||
if (iterator != tags.end()) {
|
if (iterator != tags.end()) {
|
||||||
auto badges = iterator.value().toString().split(',');
|
QStringList badges = iterator.value().toString().split(',');
|
||||||
|
|
||||||
b.appendTwitchBadges(badges, resources, emoteManager, channelResources);
|
b.appendTwitchBadges(badges, resources, emoteManager, channelResources);
|
||||||
}
|
}
|
||||||
@@ -358,7 +358,7 @@ void TwitchMessageBuilder::appendTwitchBadges(const QStringList &badges, Resourc
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (badge.startsWith("bits/")) {
|
if (badge.startsWith("bits/")) {
|
||||||
if (!resources.bitBadgesLoaded) {
|
if (!resources.dynamicBadgesLoaded) {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -366,8 +366,26 @@ void TwitchMessageBuilder::appendTwitchBadges(const QStringList &badges, Resourc
|
|||||||
QString cheerAmountQS = badge.mid(5);
|
QString cheerAmountQS = badge.mid(5);
|
||||||
std::string cheerAmountString = cheerAmountQS.toStdString();
|
std::string cheerAmountString = cheerAmountQS.toStdString();
|
||||||
|
|
||||||
appendWord(Word(resources.cheerBadges[cheerAmountString], Word::BadgeCheer, QString(),
|
try {
|
||||||
QString("Twitch Cheer" + cheerAmountQS)));
|
auto &badgeSet = resources.badgeSets.at("bits");
|
||||||
|
|
||||||
|
try {
|
||||||
|
auto &badgeVersion = badgeSet.versions.at(cheerAmountString);
|
||||||
|
|
||||||
|
appendWord(
|
||||||
|
Word(badgeVersion.badgeImage1x, Word::BadgeCheer, QString(),
|
||||||
|
QString("Twitch " + QString::fromStdString(badgeVersion.title))));
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
printf("Exception caught: %s\n", e.what());
|
||||||
|
printf("When trying to fetch the badge version: %s\n",
|
||||||
|
cheerAmountString.c_str());
|
||||||
|
// XXX: Version not found
|
||||||
|
}
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
printf("Exception caught: %s\n", e.what());
|
||||||
|
// XXX
|
||||||
|
}
|
||||||
|
|
||||||
} else if (badge == "staff/1") {
|
} else if (badge == "staff/1") {
|
||||||
appendWord(
|
appendWord(
|
||||||
Word(resources.badgeStaff, Word::BadgeStaff, QString(), QString("Twitch Staff")));
|
Word(resources.badgeStaff, Word::BadgeStaff, QString(), QString("Twitch Staff")));
|
||||||
|
|||||||
Reference in New Issue
Block a user