some concurrency additions (#2698)
This commit is contained in:
@@ -4,14 +4,11 @@
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
#include <QThread>
|
||||
#include <QUrl>
|
||||
#include "common/NetworkRequest.hpp"
|
||||
#include "common/Outcome.hpp"
|
||||
#include "messages/Emote.hpp"
|
||||
|
||||
#include <QUrl>
|
||||
|
||||
#include <map>
|
||||
|
||||
namespace chatterino {
|
||||
void ChatterinoBadges::initialize(Settings &settings, Paths &paths)
|
||||
{
|
||||
@@ -24,6 +21,8 @@ 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())
|
||||
{
|
||||
@@ -37,8 +36,12 @@ 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())
|
||||
{
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
#include <boost/optional.hpp>
|
||||
#include <common/Singleton.hpp>
|
||||
|
||||
#include "common/Aliases.hpp"
|
||||
|
||||
#include <map>
|
||||
#include <shared_mutex>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include "common/Aliases.hpp"
|
||||
#include "util/QStringHash.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
@@ -23,7 +23,10 @@ public:
|
||||
|
||||
private:
|
||||
void loadChatterinoBadges();
|
||||
std::map<QString, int> badgeMap;
|
||||
|
||||
std::shared_mutex mutex_;
|
||||
|
||||
std::unordered_map<QString, int> badgeMap;
|
||||
std::vector<EmotePtr> emotes;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user