mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
refactor: utilize TwitchUsers::resolveID
This commit is contained in:
parent
d2681a0b43
commit
0163474a93
9 changed files with 47 additions and 88 deletions
|
@ -71,17 +71,6 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void remove(const key_t &key)
|
||||
{
|
||||
auto it = _cache_items_map.find(key);
|
||||
if (it == _cache_items_map.end())
|
||||
{
|
||||
throw std::range_error("There is no such key in cache");
|
||||
}
|
||||
_cache_items_list.erase(it->second);
|
||||
_cache_items_map.erase(it);
|
||||
}
|
||||
|
||||
const value_t &get(const key_t &key)
|
||||
{
|
||||
auto it = _cache_items_map.find(key);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "common/Args.hpp"
|
||||
#include "mocks/DisabledStreamerMode.hpp"
|
||||
#include "mocks/EmptyApplication.hpp"
|
||||
#include "mocks/TwitchUsers.hpp"
|
||||
#include "providers/bttv/BttvLiveUpdates.hpp"
|
||||
#include "singletons/Fonts.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
|
@ -55,6 +56,11 @@ public:
|
|||
return &this->fonts;
|
||||
}
|
||||
|
||||
ITwitchUsers *getTwitchUsers() override
|
||||
{
|
||||
return &this->twitchUsers;
|
||||
}
|
||||
|
||||
BttvLiveUpdates *getBttvLiveUpdates() override
|
||||
{
|
||||
return nullptr;
|
||||
|
@ -71,6 +77,7 @@ public:
|
|||
DisabledStreamerMode streamerMode;
|
||||
Theme theme;
|
||||
Fonts fonts;
|
||||
TwitchUsers twitchUsers;
|
||||
};
|
||||
|
||||
} // namespace chatterino::mock
|
||||
|
|
|
@ -26,7 +26,6 @@ public:
|
|||
, mentionsChannel(std::shared_ptr<Channel>(new MockChannel("forsen3")))
|
||||
, liveChannel(std::shared_ptr<Channel>(new MockChannel("forsen")))
|
||||
, automodChannel(std::shared_ptr<Channel>(new MockChannel("forsen2")))
|
||||
, channelNamesById_(1)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -50,18 +49,6 @@ public:
|
|||
return {};
|
||||
}
|
||||
|
||||
std::optional<QString> getOrPopulateChannelCache(
|
||||
const QString &channelId) override
|
||||
{
|
||||
if (channelId == "11148817")
|
||||
return "pajlada";
|
||||
if (channelId == "141981764")
|
||||
return "twitchdev";
|
||||
if (channelId == "1025594235")
|
||||
return "shared_chat_test_01";
|
||||
return {};
|
||||
}
|
||||
|
||||
void addFakeMessage(const QString &data) override
|
||||
{
|
||||
}
|
||||
|
@ -161,7 +148,6 @@ public:
|
|||
ChannelPtr mentionsChannel;
|
||||
ChannelPtr liveChannel;
|
||||
ChannelPtr automodChannel;
|
||||
UniqueAccess<cache::lru_cache<QString, QString>> channelNamesById_;
|
||||
QString lastUserThatWhisperedMe{"forsen"};
|
||||
|
||||
std::unordered_map<QString, std::weak_ptr<Channel>> mockChannels;
|
||||
|
|
24
mocks/include/mocks/TwitchUsers.hpp
Normal file
24
mocks/include/mocks/TwitchUsers.hpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include "providers/twitch/TwitchUser.hpp"
|
||||
#include "providers/twitch/TwitchUsers.hpp"
|
||||
|
||||
namespace chatterino::mock {
|
||||
|
||||
class TwitchUsers : public ITwitchUsers
|
||||
{
|
||||
public:
|
||||
TwitchUsers() = default;
|
||||
|
||||
std::shared_ptr<TwitchUser> resolveID(const UserId &id)
|
||||
{
|
||||
TwitchUser u = {
|
||||
.id = id.string,
|
||||
.name = {},
|
||||
.displayName = {},
|
||||
};
|
||||
return std::make_shared<TwitchUser>(u);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace chatterino::mock
|
|
@ -32,6 +32,7 @@
|
|||
#include "providers/twitch/TwitchChannel.hpp"
|
||||
#include "providers/twitch/TwitchIrc.hpp"
|
||||
#include "providers/twitch/TwitchIrcServer.hpp"
|
||||
#include "providers/twitch/TwitchUsers.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
|
@ -2765,22 +2766,23 @@ void MessageBuilder::appendTwitchBadges(const QVariantMap &tags,
|
|||
if (this->message().flags.has(MessageFlag::SharedMessage))
|
||||
{
|
||||
const QString sourceId = tags["source-room-id"].toString();
|
||||
std::optional<QString> sourceName;
|
||||
if (twitchChannel->roomId() == sourceId)
|
||||
QString sourceName;
|
||||
if (sourceId.isEmpty())
|
||||
{
|
||||
sourceName = "";
|
||||
}
|
||||
else if (twitchChannel->roomId() == sourceId)
|
||||
{
|
||||
sourceName = twitchChannel->getName();
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceName =
|
||||
getApp()->getTwitch()->getOrPopulateChannelCache(sourceId);
|
||||
getApp()->getTwitchUsers()->resolveID({sourceId})->displayName;
|
||||
}
|
||||
|
||||
if (sourceName.has_value())
|
||||
{
|
||||
this->emplace<BadgeElement>(makeSharedChatBadge(sourceName.value()),
|
||||
MessageElementFlag::BadgeSharedChannel);
|
||||
}
|
||||
this->emplace<BadgeElement>(makeSharedChatBadge(sourceName),
|
||||
MessageElementFlag::BadgeSharedChannel);
|
||||
}
|
||||
|
||||
auto badgeInfos = parseBadgeInfoTag(tags);
|
||||
|
|
|
@ -153,7 +153,6 @@ TwitchIrcServer::TwitchIrcServer()
|
|||
, liveChannel(new Channel("/live", Channel::Type::TwitchLive))
|
||||
, automodChannel(new Channel("/automod", Channel::Type::TwitchAutomod))
|
||||
, watchingChannel(Channel::getEmpty(), Channel::Type::TwitchWatching)
|
||||
, channelNamesById_(512)
|
||||
{
|
||||
// Initialize the connections
|
||||
// XXX: don't create write connection if there is no separate write connection.
|
||||
|
@ -1129,38 +1128,6 @@ std::shared_ptr<Channel> TwitchIrcServer::getChannelOrEmptyByID(
|
|||
return Channel::getEmpty();
|
||||
}
|
||||
|
||||
std::optional<QString> TwitchIrcServer::getOrPopulateChannelCache(
|
||||
const QString &channelId)
|
||||
{
|
||||
{
|
||||
const auto cache = this->channelNamesById_.access();
|
||||
if (cache->exists(channelId))
|
||||
{
|
||||
return cache->get(channelId);
|
||||
}
|
||||
|
||||
// prevent multiple helix requests for single user
|
||||
cache->put(channelId, "");
|
||||
}
|
||||
|
||||
getHelix()->getUserById(
|
||||
channelId,
|
||||
[this](const HelixUser &user) {
|
||||
const auto cache = this->channelNamesById_.access();
|
||||
cache->put(user.id, user.displayName);
|
||||
},
|
||||
[this, channelId] {
|
||||
const auto cache = this->channelNamesById_.access();
|
||||
if (cache->exists(channelId) && cache->get(channelId).isEmpty())
|
||||
{
|
||||
// invalidate cache so another helix request can be attempted
|
||||
cache->remove(channelId);
|
||||
}
|
||||
});
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
QString TwitchIrcServer::cleanChannelName(const QString &dirtyChannelName)
|
||||
{
|
||||
if (dirtyChannelName.startsWith('#'))
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
#include "common/Atomic.hpp"
|
||||
#include "common/Channel.hpp"
|
||||
#include "common/Common.hpp"
|
||||
#include "common/UniqueAccess.hpp"
|
||||
#include "providers/irc/IrcConnection2.hpp"
|
||||
#include "util/RatelimitBucket.hpp"
|
||||
|
||||
#include <IrcMessage>
|
||||
#include <lrucache/lrucache.hpp>
|
||||
#include <pajlada/signals/signal.hpp>
|
||||
#include <pajlada/signals/signalholder.hpp>
|
||||
|
||||
|
@ -45,9 +43,6 @@ public:
|
|||
virtual ChannelPtr getOrAddChannel(const QString &dirtyChannelName) = 0;
|
||||
virtual ChannelPtr getChannelOrEmpty(const QString &dirtyChannelName) = 0;
|
||||
|
||||
virtual std::optional<QString> getOrPopulateChannelCache(
|
||||
const QString &channelId) = 0;
|
||||
|
||||
virtual void addFakeMessage(const QString &data) = 0;
|
||||
|
||||
virtual void addGlobalSystemMessage(const QString &messageText) = 0;
|
||||
|
@ -100,14 +95,6 @@ public:
|
|||
std::shared_ptr<Channel> getChannelOrEmptyByID(
|
||||
const QString &channelID) override;
|
||||
|
||||
/**
|
||||
* Obtains the channel display name associated with the passed ID,
|
||||
* so that Shared Chat messages can provide source channel context.
|
||||
* Can yield an empty string if a helix request is already in-flight.
|
||||
*/
|
||||
std::optional<QString> getOrPopulateChannelCache(
|
||||
const QString &channelId) override;
|
||||
|
||||
void reloadAllBTTVChannelEmotes();
|
||||
void reloadAllFFZChannelEmotes();
|
||||
void reloadAllSevenTVChannelEmotes();
|
||||
|
@ -203,9 +190,6 @@ private:
|
|||
// https://dev.twitch.tv/docs/irc/guide#rate-limits
|
||||
QObjectPtr<RatelimitBucket> joinBucket_;
|
||||
|
||||
// cached channel id => name for resolving Shared Chat members
|
||||
UniqueAccess<cache::lru_cache<QString, QString>> channelNamesById_;
|
||||
|
||||
QTimer reconnectTimer_;
|
||||
int falloffCounter_ = 1;
|
||||
|
||||
|
|
|
@ -70,15 +70,15 @@
|
|||
"images": {
|
||||
"1x": ""
|
||||
},
|
||||
"name": "SharedChat_shared_chat_test_01",
|
||||
"tooltip": "Shared Message from shared_chat_test_01"
|
||||
"name": "SharedChat_",
|
||||
"tooltip": "Shared Message"
|
||||
},
|
||||
"flags": "BadgeSharedChannel",
|
||||
"link": {
|
||||
"type": "None",
|
||||
"value": ""
|
||||
},
|
||||
"tooltip": "Shared Message from shared_chat_test_01",
|
||||
"tooltip": "Shared Message",
|
||||
"trailingSpace": true,
|
||||
"type": "BadgeElement"
|
||||
},
|
||||
|
|
|
@ -70,15 +70,15 @@
|
|||
"images": {
|
||||
"1x": ""
|
||||
},
|
||||
"name": "SharedChat_shared_chat_test_01",
|
||||
"tooltip": "Shared Message from shared_chat_test_01"
|
||||
"name": "SharedChat_",
|
||||
"tooltip": "Shared Message"
|
||||
},
|
||||
"flags": "BadgeSharedChannel",
|
||||
"link": {
|
||||
"type": "None",
|
||||
"value": ""
|
||||
},
|
||||
"tooltip": "Shared Message from shared_chat_test_01",
|
||||
"tooltip": "Shared Message",
|
||||
"trailingSpace": true,
|
||||
"type": "BadgeElement"
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue