Chatterino
TwitchBadges.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QMap>
4 #include <QString>
5 #include <boost/optional.hpp>
6 #include <unordered_map>
7 
9 #include "messages/Image.hpp"
10 #include "util/DisplayBadge.hpp"
11 #include "util/QStringHash.hpp"
12 
13 #include "pajlada/signals/signal.hpp"
14 
15 #include <memory>
16 #include <queue>
17 #include <shared_mutex>
18 
19 namespace chatterino {
20 
21 struct Emote;
22 using EmotePtr = std::shared_ptr<const Emote>;
23 
24 class Settings;
25 class Paths;
26 
28 {
29  using QIconPtr = std::shared_ptr<QIcon>;
30  using ImagePtr = std::shared_ptr<Image>;
31  using BadgeIconCallback = std::function<void(QString, const QIconPtr)>;
32 
33 public:
34  static TwitchBadges *instance();
35 
36  // Get badge from name and version
37  boost::optional<EmotePtr> badge(const QString &set,
38  const QString &version) const;
39  // Get first matching badge with name, regardless of version
40  boost::optional<EmotePtr> badge(const QString &set) const;
41 
42  void getBadgeIcon(const QString &name, BadgeIconCallback callback);
43  void getBadgeIcon(const DisplayBadge &badge, BadgeIconCallback callback);
44  void getBadgeIcons(const QList<DisplayBadge> &badges,
45  BadgeIconCallback callback);
46 
47 private:
48  static TwitchBadges *instance_;
49 
50  TwitchBadges();
51  void loadTwitchBadges();
52  void loaded();
53  void loadEmoteImage(const QString &name, ImagePtr image,
54  BadgeIconCallback &&callback);
55 
56  std::shared_mutex badgesMutex_;
57  QMap<QString, QIconPtr> badgesMap_;
58 
59  std::mutex queueMutex_;
60  std::queue<QPair<QString, BadgeIconCallback>> callbackQueue_;
61 
62  std::shared_mutex loadedMutex_;
63  bool loaded_ = false;
64 
66  std::unordered_map<QString, std::unordered_map<QString, EmotePtr>>>
67  badgeSets_; // "bits": { "100": ... "500": ...
68 };
69 
70 } // namespace chatterino
void getBadgeIcons(const QList< DisplayBadge > &badges, BadgeIconCallback callback)
Definition: TwitchBadges.cpp:184
boost::optional< EmotePtr > badge(const QString &set, const QString &version) const
Definition: TwitchBadges.cpp:110
void getBadgeIcon(const QString &name, BadgeIconCallback callback)
Definition: TwitchBadges.cpp:140
Definition: DisplayBadge.hpp:6
Definition: TwitchBadges.hpp:27
Definition: Application.cpp:48
std::shared_ptr< const Emote > EmotePtr
Definition: Emote.hpp:38
Definition: UniqueAccess.hpp:53
QString name
Definition: Credentials.cpp:94
static TwitchBadges * instance()
Definition: TwitchBadges.cpp:239