Finish up singleton refactoring into one giant class
This commit is contained in:
@@ -35,12 +35,15 @@ void IrcMessageHandler::handleRoomStateMessage(Communi::IrcMessage *message)
|
||||
QStringList words = QString(message->toData()).split("#");
|
||||
|
||||
// ensure the format is valid
|
||||
if (words.length() < 2)
|
||||
if (words.length() < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto app = getApp();
|
||||
|
||||
QString channelName = words.at(1);
|
||||
|
||||
auto channel = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||
auto channel = app->twitch.server->getChannelOrEmpty(channelName);
|
||||
|
||||
if (channel->isEmpty()) {
|
||||
return;
|
||||
@@ -51,7 +54,7 @@ void IrcMessageHandler::handleRoomStateMessage(Communi::IrcMessage *message)
|
||||
twitchChannel->setRoomID(roomID);
|
||||
}
|
||||
|
||||
ResourceManager::getInstance().loadChannelData(roomID);
|
||||
app->resources->loadChannelData(roomID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,8 +71,10 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message)
|
||||
return;
|
||||
}
|
||||
|
||||
auto app = getApp();
|
||||
|
||||
// get channel
|
||||
auto chan = TwitchServer::getInstance().getChannelOrEmpty(chanName);
|
||||
auto chan = app->twitch.server->getChannelOrEmpty(chanName);
|
||||
|
||||
if (chan->isEmpty()) {
|
||||
debug::Log("[IrcMessageHandler:handleClearChatMessage] Twitch channel {} not found",
|
||||
@@ -125,8 +130,6 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message)
|
||||
}
|
||||
}
|
||||
|
||||
auto app = getApp();
|
||||
|
||||
// refresh all
|
||||
app->windows->repaintVisibleChatWidgets(chan.get());
|
||||
}
|
||||
@@ -136,12 +139,14 @@ void IrcMessageHandler::handleUserStateMessage(Communi::IrcMessage *message)
|
||||
QVariant _mod = message->tag("mod");
|
||||
|
||||
if (_mod.isValid()) {
|
||||
auto app = getApp();
|
||||
|
||||
QString channelName;
|
||||
if (!TrimChannelName(message->parameter(0), channelName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto c = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||
auto c = app->twitch.server->getChannelOrEmpty(channelName);
|
||||
if (c->isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -161,7 +166,7 @@ void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *message)
|
||||
|
||||
args.isReceivedWhisper = true;
|
||||
|
||||
auto c = TwitchServer::getInstance().whispersChannel.get();
|
||||
auto c = app->twitch.server->whispersChannel.get();
|
||||
|
||||
twitch::TwitchMessageBuilder builder(c, message, message->parameter(1), args);
|
||||
|
||||
@@ -170,13 +175,13 @@ void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *message)
|
||||
_message->flags |= messages::Message::DoNotTriggerNotification;
|
||||
|
||||
if (_message->flags & messages::Message::Highlighted) {
|
||||
TwitchServer::getInstance().mentionsChannel->addMessage(_message);
|
||||
app->twitch.server->mentionsChannel->addMessage(_message);
|
||||
}
|
||||
|
||||
c->addMessage(_message);
|
||||
|
||||
if (app->settings->inlineWhispers) {
|
||||
TwitchServer::getInstance().forEachChannel([_message](ChannelPtr channel) {
|
||||
app->twitch.server->forEachChannel([_message](ChannelPtr channel) {
|
||||
channel->addMessage(_message); //
|
||||
});
|
||||
}
|
||||
@@ -190,8 +195,9 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message)
|
||||
|
||||
void IrcMessageHandler::handleModeMessage(Communi::IrcMessage *message)
|
||||
{
|
||||
auto channel =
|
||||
TwitchServer::getInstance().getChannelOrEmpty(message->parameter(0).remove(0, 1));
|
||||
auto app = getApp();
|
||||
|
||||
auto channel = app->twitch.server->getChannelOrEmpty(message->parameter(0).remove(0, 1));
|
||||
|
||||
if (channel->isEmpty()) {
|
||||
return;
|
||||
@@ -206,19 +212,20 @@ void IrcMessageHandler::handleModeMessage(Communi::IrcMessage *message)
|
||||
|
||||
void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message)
|
||||
{
|
||||
auto app = getApp();
|
||||
MessagePtr msg = Message::createSystemMessage(message->content());
|
||||
|
||||
QString channelName;
|
||||
if (!TrimChannelName(message->target(), channelName)) {
|
||||
// Notice wasn't targeted at a single channel, send to all twitch channels
|
||||
TwitchServer::getInstance().forEachChannelAndSpecialChannels([msg](const auto &c) {
|
||||
app->twitch.server->forEachChannelAndSpecialChannels([msg](const auto &c) {
|
||||
c->addMessage(msg); //
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto channel = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||
auto channel = app->twitch.server->getChannelOrEmpty(channelName);
|
||||
|
||||
if (channel->isEmpty()) {
|
||||
debug::Log("[IrcManager:handleNoticeMessage] Channel {} not found in channel manager",
|
||||
|
||||
@@ -539,8 +539,9 @@ bool TwitchMessageBuilder::tryAppendEmote(QString &emoteString)
|
||||
// maybe put the individual badges into a map instead of this mess
|
||||
void TwitchMessageBuilder::appendTwitchBadges()
|
||||
{
|
||||
singletons::ResourceManager &resourceManager = singletons::ResourceManager::getInstance();
|
||||
const auto &channelResources = resourceManager.channels[this->roomID];
|
||||
auto app = getApp();
|
||||
|
||||
const auto &channelResources = app->resources->channels[this->roomID];
|
||||
|
||||
auto iterator = this->tags.find("badges");
|
||||
|
||||
@@ -557,7 +558,7 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
}
|
||||
|
||||
if (badge.startsWith("bits/")) {
|
||||
if (!singletons::ResourceManager::getInstance().dynamicBadgesLoaded) {
|
||||
if (!app->resources->dynamicBadgesLoaded) {
|
||||
// Do nothing
|
||||
continue;
|
||||
}
|
||||
@@ -576,45 +577,45 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
|
||||
// Use default bit badge
|
||||
try {
|
||||
const auto &badge = resourceManager.badgeSets.at("bits").versions.at(versionKey);
|
||||
const auto &badge = app->resources->badgeSets.at("bits").versions.at(versionKey);
|
||||
this->emplace<ImageElement>(badge.badgeImage1x, MessageElement::BadgeVanity);
|
||||
} catch (const std::out_of_range &) {
|
||||
debug::Log("No default bit badge for version {} found", versionKey);
|
||||
continue;
|
||||
}
|
||||
} else if (badge == "staff/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgeStaff,
|
||||
this->emplace<ImageElement>(app->resources->badgeStaff,
|
||||
MessageElement::BadgeGlobalAuthority)
|
||||
->setTooltip("Twitch Staff");
|
||||
} else if (badge == "admin/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgeAdmin,
|
||||
this->emplace<ImageElement>(app->resources->badgeAdmin,
|
||||
MessageElement::BadgeGlobalAuthority)
|
||||
->setTooltip("Twitch Admin");
|
||||
} else if (badge == "global_mod/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgeGlobalModerator,
|
||||
this->emplace<ImageElement>(app->resources->badgeGlobalModerator,
|
||||
MessageElement::BadgeGlobalAuthority)
|
||||
->setTooltip("Twitch Global Moderator");
|
||||
} else if (badge == "moderator/1") {
|
||||
// TODO: Implement custom FFZ moderator badge
|
||||
this->emplace<ImageElement>(resourceManager.badgeModerator,
|
||||
this->emplace<ImageElement>(app->resources->badgeModerator,
|
||||
MessageElement::BadgeChannelAuthority)
|
||||
->setTooltip("Twitch Channel Moderator");
|
||||
} else if (badge == "turbo/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgeTurbo,
|
||||
this->emplace<ImageElement>(app->resources->badgeTurbo,
|
||||
MessageElement::BadgeGlobalAuthority)
|
||||
->setTooltip("Twitch Turbo Subscriber");
|
||||
} else if (badge == "broadcaster/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgeBroadcaster,
|
||||
this->emplace<ImageElement>(app->resources->badgeBroadcaster,
|
||||
MessageElement::BadgeChannelAuthority)
|
||||
->setTooltip("Twitch Broadcaster");
|
||||
} else if (badge == "premium/1") {
|
||||
this->emplace<ImageElement>(resourceManager.badgePremium, MessageElement::BadgeVanity)
|
||||
this->emplace<ImageElement>(app->resources->badgePremium, MessageElement::BadgeVanity)
|
||||
->setTooltip("Twitch Prime Subscriber");
|
||||
} else if (badge.startsWith("partner/")) {
|
||||
int index = badge.midRef(8).toInt();
|
||||
switch (index) {
|
||||
case 1: {
|
||||
this->emplace<ImageElement>(resourceManager.badgeVerified,
|
||||
this->emplace<ImageElement>(app->resources->badgeVerified,
|
||||
MessageElement::BadgeVanity)
|
||||
->setTooltip("Twitch Verified");
|
||||
} break;
|
||||
@@ -631,7 +632,7 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
auto badgeSetIt = channelResources.badgeSets.find("subscriber");
|
||||
if (badgeSetIt == channelResources.badgeSets.end()) {
|
||||
// Fall back to default badge
|
||||
this->emplace<ImageElement>(resourceManager.badgeSubscriber,
|
||||
this->emplace<ImageElement>(app->resources->badgeSubscriber,
|
||||
MessageElement::BadgeSubscription)
|
||||
->setTooltip("Twitch Subscriber");
|
||||
continue;
|
||||
@@ -645,7 +646,7 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
|
||||
if (badgeVersionIt == badgeSet.versions.end()) {
|
||||
// Fall back to default badge
|
||||
this->emplace<ImageElement>(resourceManager.badgeSubscriber,
|
||||
this->emplace<ImageElement>(app->resources->badgeSubscriber,
|
||||
MessageElement::BadgeSubscription)
|
||||
->setTooltip("Twitch Subscriber");
|
||||
continue;
|
||||
@@ -657,7 +658,7 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
MessageElement::BadgeSubscription)
|
||||
->setTooltip("Twitch " + QString::fromStdString(badgeVersion.title));
|
||||
} else {
|
||||
if (!resourceManager.dynamicBadgesLoaded) {
|
||||
if (!app->resources->dynamicBadgesLoaded) {
|
||||
// Do nothing
|
||||
continue;
|
||||
}
|
||||
@@ -675,7 +676,7 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
std::string versionKey = parts[1].toStdString();
|
||||
|
||||
try {
|
||||
auto &badgeSet = resourceManager.badgeSets.at(badgeSetKey);
|
||||
auto &badgeSet = app->resources->badgeSets.at(badgeSetKey);
|
||||
|
||||
try {
|
||||
auto &badgeVersion = badgeSet.versions.at(versionKey);
|
||||
@@ -696,7 +697,9 @@ void TwitchMessageBuilder::appendTwitchBadges()
|
||||
|
||||
void TwitchMessageBuilder::appendChatterinoBadges()
|
||||
{
|
||||
auto &badges = singletons::ResourceManager::getInstance().chatterinoBadges;
|
||||
auto app = getApp();
|
||||
|
||||
auto &badges = app->resources->chatterinoBadges;
|
||||
auto it = badges.find(this->userName.toStdString());
|
||||
|
||||
if (it == badges.end()) {
|
||||
@@ -711,9 +714,9 @@ void TwitchMessageBuilder::appendChatterinoBadges()
|
||||
|
||||
bool TwitchMessageBuilder::tryParseCheermote(const QString &string)
|
||||
{
|
||||
auto app = getApp();
|
||||
// Try to parse custom cheermotes
|
||||
const auto &channelResources =
|
||||
singletons::ResourceManager::getInstance().channels[this->roomID];
|
||||
const auto &channelResources = app->resources->channels[this->roomID];
|
||||
if (channelResources.loaded) {
|
||||
for (const auto &cheermoteSet : channelResources.cheermoteSets) {
|
||||
auto match = cheermoteSet.regex.match(string);
|
||||
|
||||
@@ -23,15 +23,12 @@ TwitchServer::TwitchServer()
|
||||
, watchingChannel(Channel::getEmpty(), Channel::TwitchWatching)
|
||||
{
|
||||
qDebug() << "init TwitchServer";
|
||||
|
||||
getApp()->accounts->Twitch.userChanged.connect(
|
||||
[this]() { util::postToThread([this] { this->connect(); }); });
|
||||
}
|
||||
|
||||
TwitchServer &TwitchServer::getInstance()
|
||||
void TwitchServer::initialize()
|
||||
{
|
||||
static TwitchServer s;
|
||||
return s;
|
||||
getApp()->accounts->Twitch.userChanged.connect(
|
||||
[this]() { util::postToThread([this] { this->connect(); }); });
|
||||
}
|
||||
|
||||
void TwitchServer::initializeConnection(IrcConnection *connection, bool isRead, bool isWrite)
|
||||
@@ -85,7 +82,7 @@ void TwitchServer::privateMessageReceived(IrcPrivateMessage *message)
|
||||
}
|
||||
|
||||
this->onPrivateMessage.invoke(message);
|
||||
auto chan = TwitchServer::getInstance().getChannelOrEmpty(channelName);
|
||||
auto chan = this->getChannelOrEmpty(channelName);
|
||||
|
||||
if (chan->isEmpty()) {
|
||||
return;
|
||||
@@ -98,7 +95,7 @@ void TwitchServer::privateMessageReceived(IrcPrivateMessage *message)
|
||||
if (!builder.isIgnored()) {
|
||||
messages::MessagePtr _message = builder.build();
|
||||
if (_message->flags & messages::Message::Highlighted) {
|
||||
TwitchServer::getInstance().mentionsChannel->addMessage(_message);
|
||||
this->mentionsChannel->addMessage(_message);
|
||||
}
|
||||
|
||||
chan->addMessage(_message);
|
||||
|
||||
@@ -13,10 +13,11 @@ namespace twitch {
|
||||
class TwitchServer final : public irc::AbstractIrcServer
|
||||
{
|
||||
TwitchServer();
|
||||
friend class Application;
|
||||
|
||||
void initialize();
|
||||
|
||||
public:
|
||||
static TwitchServer &getInstance();
|
||||
|
||||
// fourtf: ugh
|
||||
void forEachChannelAndSpecialChannels(std::function<void(ChannelPtr)> func);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user