feat: show BTTV Pro badges (#6625)

Reviewed-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
nerix
2025-12-07 15:15:58 +01:00
committed by GitHub
parent ab8e0751b1
commit 0aff6fbe83
31 changed files with 394 additions and 82 deletions
+50
View File
@@ -0,0 +1,50 @@
#pragma once
#include "common/Aliases.hpp"
#include <QJsonObject>
#include <shared_mutex>
namespace chatterino {
struct Emote;
using EmotePtr = std::shared_ptr<const Emote>;
class BadgeRegistry
{
public:
virtual ~BadgeRegistry() = default;
/// Return the badge, if any, that is assigned to the user
std::optional<EmotePtr> getBadge(const UserId &id) const;
/// Assign the given badge to the user
void assignBadgeToUser(const QString &badgeID, const UserId &userID);
/// Remove the given badge from the user
void clearBadgeFromUser(const QString &badgeID, const UserId &userID);
/// Register a new known badge
/// The json object will contain all information about the badge, like its ID & its images
/// @returns The badge's ID
QString registerBadge(const QJsonObject &badgeJson);
protected:
BadgeRegistry() = default;
virtual QString idForBadge(const QJsonObject &badgeJson) const = 0;
virtual EmotePtr createBadge(const QString &id,
const QJsonObject &badgeJson) const = 0;
private:
/// Mutex for both `badgeMap_` and `knownBadges_`
mutable std::shared_mutex mutex_;
/// user-id => badge
std::unordered_map<QString, EmotePtr> badgeMap_;
/// badge-id => badge
std::unordered_map<QString, EmotePtr> knownBadges_;
};
} // namespace chatterino