diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c5bca529446..f7912f44e60 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,6 +107,8 @@ set(SOURCE_FILES controllers/ignores/IgnoreController.hpp controllers/ignores/IgnoreModel.cpp controllers/ignores/IgnoreModel.hpp + controllers/ignores/IgnorePhrase.cpp + controllers/ignores/IgnorePhrase.hpp controllers/moderationactions/ModerationAction.cpp controllers/moderationactions/ModerationAction.hpp diff --git a/src/common/CompletionModel.cpp b/src/common/CompletionModel.cpp index fc4bd404960..f246c69ebfe 100644 --- a/src/common/CompletionModel.cpp +++ b/src/common/CompletionModel.cpp @@ -4,6 +4,8 @@ #include "common/ChatterSet.hpp" #include "controllers/accounts/AccountController.hpp" #include "controllers/commands/CommandController.hpp" +#include "messages/Emote.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchCommon.hpp" #include "providers/twitch/TwitchIrcServer.hpp" diff --git a/src/controllers/commands/CommandController.cpp b/src/controllers/commands/CommandController.cpp index 1a439e2c9f2..6d698438ee9 100644 --- a/src/controllers/commands/CommandController.cpp +++ b/src/controllers/commands/CommandController.cpp @@ -15,6 +15,7 @@ #include "providers/irc/IrcChannel2.hpp" #include "providers/irc/IrcServer.hpp" #include "providers/twitch/api/Helix.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchCommon.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "providers/twitch/TwitchMessageBuilder.hpp" diff --git a/src/controllers/commands/builtin/twitch/ChatSettings.cpp b/src/controllers/commands/builtin/twitch/ChatSettings.cpp index ebec21bad20..40387d4ae31 100644 --- a/src/controllers/commands/builtin/twitch/ChatSettings.cpp +++ b/src/controllers/commands/builtin/twitch/ChatSettings.cpp @@ -4,6 +4,7 @@ #include "controllers/accounts/AccountController.hpp" #include "messages/MessageBuilder.hpp" #include "providers/twitch/api/Helix.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "util/FormatTime.hpp" #include "util/Helpers.hpp" diff --git a/src/controllers/highlights/HighlightController.cpp b/src/controllers/highlights/HighlightController.cpp index ff4572adf5d..785eb047dd5 100644 --- a/src/controllers/highlights/HighlightController.cpp +++ b/src/controllers/highlights/HighlightController.cpp @@ -1,6 +1,7 @@ #include "controllers/highlights/HighlightController.hpp" #include "common/QLogging.hpp" +#include "providers/twitch/TwitchAccount.hpp" namespace { diff --git a/src/controllers/ignores/IgnoreController.cpp b/src/controllers/ignores/IgnoreController.cpp index e36feead018..0e3e0601877 100644 --- a/src/controllers/ignores/IgnoreController.cpp +++ b/src/controllers/ignores/IgnoreController.cpp @@ -2,6 +2,7 @@ #include "common/QLogging.hpp" #include "controllers/ignores/IgnorePhrase.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "singletons/Settings.hpp" namespace chatterino { diff --git a/src/controllers/ignores/IgnorePhrase.cpp b/src/controllers/ignores/IgnorePhrase.cpp new file mode 100644 index 00000000000..a7b8519e92c --- /dev/null +++ b/src/controllers/ignores/IgnorePhrase.cpp @@ -0,0 +1,115 @@ +#include "controllers/ignores/IgnorePhrase.hpp" + +#include "Application.hpp" +#include "controllers/accounts/AccountController.hpp" +#include "providers/twitch/TwitchAccount.hpp" + +namespace chatterino { + +IgnorePhrase::IgnorePhrase(const QString &pattern, bool isRegex, bool isBlock, + const QString &replace, bool isCaseSensitive) + : pattern_(pattern) + , isRegex_(isRegex) + , regex_(pattern) + , isBlock_(isBlock) + , replace_(replace) + , isCaseSensitive_(isCaseSensitive) +{ + if (this->isCaseSensitive_) + { + regex_.setPatternOptions( + QRegularExpression::UseUnicodePropertiesOption); + } + else + { + regex_.setPatternOptions( + QRegularExpression::CaseInsensitiveOption | + QRegularExpression::UseUnicodePropertiesOption); + } +} + +bool IgnorePhrase::operator==(const IgnorePhrase &other) const +{ + return std::tie(this->pattern_, this->isRegex_, this->isBlock_, + this->replace_, this->isCaseSensitive_) == + std::tie(other.pattern_, other.isRegex_, other.isBlock_, + other.replace_, other.isCaseSensitive_); +} + +const QString &IgnorePhrase::getPattern() const +{ + return this->pattern_; +} + +bool IgnorePhrase::isRegex() const +{ + return this->isRegex_; +} + +bool IgnorePhrase::isRegexValid() const +{ + return this->regex_.isValid(); +} + +bool IgnorePhrase::isMatch(const QString &subject) const +{ + return !this->pattern_.isEmpty() && + (this->isRegex() + ? (this->regex_.isValid() && + this->regex_.match(subject).hasMatch()) + : subject.contains(this->pattern_, this->caseSensitivity())); +} + +const QRegularExpression &IgnorePhrase::getRegex() const +{ + return this->regex_; +} + +bool IgnorePhrase::isBlock() const +{ + return this->isBlock_; +} + +const QString &IgnorePhrase::getReplace() const +{ + return this->replace_; +} + +bool IgnorePhrase::isCaseSensitive() const +{ + return this->isCaseSensitive_; +} + +Qt::CaseSensitivity IgnorePhrase::caseSensitivity() const +{ + return this->isCaseSensitive_ ? Qt::CaseSensitive : Qt::CaseInsensitive; +} + +const std::unordered_map &IgnorePhrase::getEmotes() const +{ + return this->emotes_; +} + +bool IgnorePhrase::containsEmote() const +{ + if (!this->emotesChecked_) + { + const auto &accvec = getApp()->accounts->twitch.accounts; + for (const auto &acc : accvec) + { + const auto &accemotes = *acc->accessEmotes(); + for (const auto &emote : accemotes.emotes) + { + if (this->replace_.contains(emote.first.string, + Qt::CaseSensitive)) + { + this->emotes_.emplace(emote.first, emote.second); + } + } + } + this->emotesChecked_ = true; + } + return !this->emotes_.empty(); +} + +} // namespace chatterino diff --git a/src/controllers/ignores/IgnorePhrase.hpp b/src/controllers/ignores/IgnorePhrase.hpp index 387e8fb5eb6..5c311b66978 100644 --- a/src/controllers/ignores/IgnorePhrase.hpp +++ b/src/controllers/ignores/IgnorePhrase.hpp @@ -1,7 +1,6 @@ #pragma once -#include "Application.hpp" -#include "controllers/accounts/AccountController.hpp" +#include "messages/Emote.hpp" #include "singletons/Settings.hpp" #include "util/RapidjsonHelpers.hpp" #include "util/RapidJsonSerializeQString.hpp" @@ -10,118 +9,39 @@ #include #include -#include +#include namespace chatterino { class IgnorePhrase { public: - bool operator==(const IgnorePhrase &other) const - { - return std::tie(this->pattern_, this->isRegex_, this->isBlock_, - this->replace_, this->isCaseSensitive_) == - std::tie(other.pattern_, other.isRegex_, other.isBlock_, - other.replace_, other.isCaseSensitive_); - } - IgnorePhrase(const QString &pattern, bool isRegex, bool isBlock, - const QString &replace, bool isCaseSensitive) - : pattern_(pattern) - , isRegex_(isRegex) - , regex_(pattern) - , isBlock_(isBlock) - , replace_(replace) - , isCaseSensitive_(isCaseSensitive) - { - if (this->isCaseSensitive_) - { - regex_.setPatternOptions( - QRegularExpression::UseUnicodePropertiesOption); - } - else - { - regex_.setPatternOptions( - QRegularExpression::CaseInsensitiveOption | - QRegularExpression::UseUnicodePropertiesOption); - } - } + const QString &replace, bool isCaseSensitive); - const QString &getPattern() const - { - return this->pattern_; - } + bool operator==(const IgnorePhrase &other) const; - bool isRegex() const - { - return this->isRegex_; - } + const QString &getPattern() const; - bool isRegexValid() const - { - return this->regex_.isValid(); - } + bool isRegex() const; - bool isMatch(const QString &subject) const - { - return !this->pattern_.isEmpty() && - (this->isRegex() ? (this->regex_.isValid() && - this->regex_.match(subject).hasMatch()) - : subject.contains(this->pattern_, - this->caseSensitivity())); - } + bool isRegexValid() const; - const QRegularExpression &getRegex() const - { - return this->regex_; - } + bool isMatch(const QString &subject) const; - bool isBlock() const - { - return this->isBlock_; - } + const QRegularExpression &getRegex() const; - const QString &getReplace() const - { - return this->replace_; - } + bool isBlock() const; - bool isCaseSensitive() const - { - return this->isCaseSensitive_; - } + const QString &getReplace() const; - Qt::CaseSensitivity caseSensitivity() const - { - return this->isCaseSensitive_ ? Qt::CaseSensitive : Qt::CaseInsensitive; - } + bool isCaseSensitive() const; - const std::unordered_map &getEmotes() const - { - return this->emotes_; - } + Qt::CaseSensitivity caseSensitivity() const; - bool containsEmote() const - { - if (!this->emotesChecked_) - { - const auto &accvec = getApp()->accounts->twitch.accounts; - for (const auto &acc : accvec) - { - const auto &accemotes = *acc->accessEmotes(); - for (const auto &emote : accemotes.emotes) - { - if (this->replace_.contains(emote.first.string, - Qt::CaseSensitive)) - { - this->emotes_.emplace(emote.first, emote.second); - } - } - } - this->emotesChecked_ = true; - } - return !this->emotes_.empty(); - } + const std::unordered_map &getEmotes() const; + + bool containsEmote() const; private: QString pattern_; diff --git a/src/controllers/nicknames/Nickname.hpp b/src/controllers/nicknames/Nickname.hpp index fa55339d10d..79cb264264d 100644 --- a/src/controllers/nicknames/Nickname.hpp +++ b/src/controllers/nicknames/Nickname.hpp @@ -5,6 +5,7 @@ #include "util/RapidJsonSerializeQString.hpp" #include +#include #include #include diff --git a/src/messages/MessageBuilder.cpp b/src/messages/MessageBuilder.cpp index 735d81aa22e..871e6c34367 100644 --- a/src/messages/MessageBuilder.cpp +++ b/src/messages/MessageBuilder.cpp @@ -9,6 +9,7 @@ #include "messages/MessageElement.hpp" #include "providers/LinkResolver.hpp" #include "providers/twitch/PubSubActions.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "singletons/Emotes.hpp" #include "singletons/Resources.hpp" #include "singletons/Theme.hpp" diff --git a/src/providers/twitch/IrcMessageHandler.cpp b/src/providers/twitch/IrcMessageHandler.cpp index 12c8f3f8f4e..8edd3ade6f0 100644 --- a/src/providers/twitch/IrcMessageHandler.cpp +++ b/src/providers/twitch/IrcMessageHandler.cpp @@ -5,6 +5,7 @@ #include "controllers/accounts/AccountController.hpp" #include "messages/LimitedQueue.hpp" #include "messages/Message.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchAccountManager.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchHelpers.hpp" diff --git a/src/providers/twitch/PubSubManager.cpp b/src/providers/twitch/PubSubManager.cpp index cce10786b94..8909663f175 100644 --- a/src/providers/twitch/PubSubManager.cpp +++ b/src/providers/twitch/PubSubManager.cpp @@ -4,6 +4,7 @@ #include "providers/twitch/PubSubActions.hpp" #include "providers/twitch/PubSubHelpers.hpp" #include "providers/twitch/PubSubMessages.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "util/DebugCount.hpp" #include "util/Helpers.hpp" #include "util/RapidjsonHelpers.hpp" @@ -476,6 +477,18 @@ PubSub::PubSub(const QString &host, std::chrono::seconds pingInterval) bind(&PubSub::onConnectionFail, this, ::_1)); } +void PubSub::setAccount(std::shared_ptr account) +{ + this->token_ = account->getOAuthToken(); + this->userID_ = account->getUserId(); +} + +void PubSub::setAccountData(QString token, QString userID) +{ + this->token_ = token; + this->userID_ = userID; +} + void PubSub::addClient() { if (this->addingClient) diff --git a/src/providers/twitch/PubSubManager.hpp b/src/providers/twitch/PubSubManager.hpp index 0e3e9652009..4c608d206ea 100644 --- a/src/providers/twitch/PubSubManager.hpp +++ b/src/providers/twitch/PubSubManager.hpp @@ -6,8 +6,8 @@ #include "providers/twitch/PubSubClientOptions.hpp" #include "providers/twitch/PubSubMessages.hpp" #include "providers/twitch/PubSubWebsocket.hpp" -#include "providers/twitch/TwitchAccount.hpp" #include "util/ExponentialBackoff.hpp" +#include "util/QStringHash.hpp" #include #include @@ -24,6 +24,8 @@ namespace chatterino { +class TwitchAccount; + class PubSub { using WebsocketMessagePtr = @@ -57,17 +59,9 @@ class PubSub PubSub(const QString &host, std::chrono::seconds pingInterval = std::chrono::seconds(15)); - void setAccount(std::shared_ptr account) - { - this->token_ = account->getOAuthToken(); - this->userID_ = account->getUserId(); - } + void setAccount(std::shared_ptr account); - void setAccountData(QString token, QString userID) - { - this->token_ = token; - this->userID_ = userID; - } + void setAccountData(QString token, QString userID); ~PubSub() = delete; diff --git a/src/providers/twitch/TwitchAccount.cpp b/src/providers/twitch/TwitchAccount.cpp index 8e0c5446e6d..789ed8339f0 100644 --- a/src/providers/twitch/TwitchAccount.cpp +++ b/src/providers/twitch/TwitchAccount.cpp @@ -442,71 +442,4 @@ void TwitchAccount::autoModDeny(const QString msgID, ChannelPtr channel) }); } -void TwitchAccount::loadEmoteSetData(std::shared_ptr emoteSet) -{ - if (!emoteSet) - { - qCWarning(chatterinoTwitch) << "null emote set sent"; - return; - } - - auto staticSetIt = this->staticEmoteSets.find(emoteSet->key); - if (staticSetIt != this->staticEmoteSets.end()) - { - const auto &staticSet = staticSetIt->second; - emoteSet->channelName = staticSet.channelName; - emoteSet->text = staticSet.text; - return; - } - - getHelix()->getEmoteSetData( - emoteSet->key, - [emoteSet](HelixEmoteSetData emoteSetData) { - // Follower emotes can be only used in their origin channel - if (emoteSetData.emoteType == "follower") - { - emoteSet->local = true; - } - - if (emoteSetData.ownerId.isEmpty() || - emoteSetData.setId != emoteSet->key) - { - qCDebug(chatterinoTwitch) - << QString("Failed to fetch emoteSetData for %1, assuming " - "Twitch is the owner") - .arg(emoteSet->key); - - // most (if not all) emotes that fail to load are time limited event emotes owned by Twitch - emoteSet->channelName = "twitch"; - emoteSet->text = "Twitch"; - - return; - } - - // emote set 0 = global emotes - if (emoteSetData.ownerId == "0") - { - // emoteSet->channelName = QString(); - emoteSet->text = "Twitch Global"; - return; - } - - getHelix()->getUserById( - emoteSetData.ownerId, - [emoteSet](HelixUser user) { - emoteSet->channelName = user.login; - emoteSet->text = user.displayName; - }, - [emoteSetData] { - qCWarning(chatterinoTwitch) - << "Failed to query user by id:" << emoteSetData.ownerId - << emoteSetData.setId; - }); - }, - [emoteSet] { - // fetching emoteset data failed - return; - }); -} - } // namespace chatterino diff --git a/src/providers/twitch/TwitchAccount.hpp b/src/providers/twitch/TwitchAccount.hpp index 1f101e54cc2..5213f004750 100644 --- a/src/providers/twitch/TwitchAccount.hpp +++ b/src/providers/twitch/TwitchAccount.hpp @@ -20,39 +20,6 @@ namespace chatterino { -enum FollowResult { - FollowResult_Following, - FollowResult_NotFollowing, - FollowResult_Failed, -}; - -struct TwitchEmoteSetResolverResponse { - const QString channelName; - const QString channelId; - const QString type; - const int tier; - const bool isCustom; - // Example response: - // { - // "channel_name": "zneix", - // "channel_id": "99631238", - // "type": "", - // "tier": 1, - // "custom": false - // } - - TwitchEmoteSetResolverResponse(QJsonObject jsonObject) - : channelName(jsonObject.value("channel_name").toString()) - , channelId(jsonObject.value("channel_id").toString()) - , type(jsonObject.value("type").toString()) - , tier(jsonObject.value("tier").toInt()) - , isCustom(jsonObject.value("custom").toBool()) - { - } -}; - -std::vector getEmoteSetBatches(QStringList emoteSetKeys); - class TwitchAccount : public Account { public: @@ -69,8 +36,6 @@ class TwitchAccount : public Account std::vector emotes; }; - std::map staticEmoteSets; - struct TwitchAccountEmoteData { std::vector> emoteSets; @@ -127,8 +92,6 @@ class TwitchAccount : public Account void autoModDeny(const QString msgID, ChannelPtr channel); private: - void loadEmoteSetData(std::shared_ptr emoteSet); - QString oauthClient_; QString oauthToken_; QString userName_; diff --git a/src/providers/twitch/TwitchAccountManager.hpp b/src/providers/twitch/TwitchAccountManager.hpp index eaa303c1a1d..7c8acd32ed8 100644 --- a/src/providers/twitch/TwitchAccountManager.hpp +++ b/src/providers/twitch/TwitchAccountManager.hpp @@ -2,7 +2,6 @@ #include "common/ChatterinoSetting.hpp" #include "common/SignalVector.hpp" -#include "providers/twitch/TwitchAccount.hpp" #include "util/SharedPtrElementLess.hpp" #include diff --git a/src/providers/twitch/TwitchChannel.cpp b/src/providers/twitch/TwitchChannel.cpp index 76309e27f36..c16315ac6fd 100644 --- a/src/providers/twitch/TwitchChannel.cpp +++ b/src/providers/twitch/TwitchChannel.cpp @@ -6,6 +6,7 @@ #include "common/QLogging.hpp" #include "controllers/accounts/AccountController.hpp" #include "controllers/notifications/NotificationController.hpp" +#include "messages/Emote.hpp" #include "messages/Message.hpp" #include "providers/bttv/BttvEmotes.hpp" #include "providers/bttv/LoadBttvChannelEmote.hpp" @@ -15,6 +16,7 @@ #include "providers/twitch/api/Helix.hpp" #include "providers/twitch/IrcMessageHandler.hpp" #include "providers/twitch/PubSubManager.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchCommon.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "providers/twitch/TwitchMessageBuilder.hpp" diff --git a/src/providers/twitch/TwitchMessageBuilder.cpp b/src/providers/twitch/TwitchMessageBuilder.cpp index b68c393f753..a8b1b0e5b7e 100644 --- a/src/providers/twitch/TwitchMessageBuilder.cpp +++ b/src/providers/twitch/TwitchMessageBuilder.cpp @@ -6,10 +6,12 @@ #include "controllers/ignores/IgnoreController.hpp" #include "controllers/ignores/IgnorePhrase.hpp" #include "controllers/userdata/UserDataController.hpp" +#include "messages/Emote.hpp" #include "messages/Message.hpp" #include "providers/chatterino/ChatterinoBadges.hpp" #include "providers/ffz/FfzBadges.hpp" #include "providers/seventv/SeventvBadges.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchBadge.hpp" #include "providers/twitch/TwitchBadges.hpp" #include "providers/twitch/TwitchChannel.hpp" diff --git a/src/widgets/Window.cpp b/src/widgets/Window.cpp index 1e87ec49eee..818d0311d4b 100644 --- a/src/widgets/Window.cpp +++ b/src/widgets/Window.cpp @@ -7,6 +7,7 @@ #include "common/Version.hpp" #include "controllers/accounts/AccountController.hpp" #include "controllers/hotkeys/HotkeyController.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Settings.hpp" #include "singletons/Theme.hpp" diff --git a/src/widgets/dialogs/EmotePopup.cpp b/src/widgets/dialogs/EmotePopup.cpp index 3d9da28abcc..083064409ad 100644 --- a/src/widgets/dialogs/EmotePopup.cpp +++ b/src/widgets/dialogs/EmotePopup.cpp @@ -6,8 +6,10 @@ #include "controllers/accounts/AccountController.hpp" #include "controllers/hotkeys/HotkeyController.hpp" #include "debug/Benchmark.hpp" +#include "messages/Emote.hpp" #include "messages/Message.hpp" #include "messages/MessageBuilder.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Emotes.hpp" diff --git a/src/widgets/dialogs/LoginDialog.cpp b/src/widgets/dialogs/LoginDialog.cpp index 7a7fbaeefb5..eb26ac26383 100644 --- a/src/widgets/dialogs/LoginDialog.cpp +++ b/src/widgets/dialogs/LoginDialog.cpp @@ -5,6 +5,7 @@ #include "common/NetworkRequest.hpp" #include "common/QLogging.hpp" #include "controllers/accounts/AccountController.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "util/Clipboard.hpp" #include "util/Helpers.hpp" diff --git a/src/widgets/dialogs/ReplyThreadPopup.cpp b/src/widgets/dialogs/ReplyThreadPopup.cpp index c6cb92f39fd..83c39b7799a 100644 --- a/src/widgets/dialogs/ReplyThreadPopup.cpp +++ b/src/widgets/dialogs/ReplyThreadPopup.cpp @@ -5,6 +5,7 @@ #include "common/QLogging.hpp" #include "controllers/hotkeys/HotkeyController.hpp" #include "messages/MessageThread.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "util/LayoutCreator.hpp" #include "widgets/helper/ChannelView.hpp" #include "widgets/helper/ResizingTextEdit.hpp" diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index 893b20b8edb..df34dc6020d 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -11,6 +11,7 @@ #include "messages/MessageBuilder.hpp" #include "providers/IvrApi.hpp" #include "providers/twitch/api/Helix.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Resources.hpp" diff --git a/src/widgets/helper/ChannelView.cpp b/src/widgets/helper/ChannelView.cpp index e2b0c2f3789..14746c72759 100644 --- a/src/widgets/helper/ChannelView.cpp +++ b/src/widgets/helper/ChannelView.cpp @@ -14,6 +14,7 @@ #include "messages/MessageBuilder.hpp" #include "messages/MessageElement.hpp" #include "providers/LinkResolver.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Resources.hpp" diff --git a/src/widgets/splits/InputCompletionPopup.cpp b/src/widgets/splits/InputCompletionPopup.cpp index 2f7aabd6375..eb6a2ace747 100644 --- a/src/widgets/splits/InputCompletionPopup.cpp +++ b/src/widgets/splits/InputCompletionPopup.cpp @@ -6,6 +6,7 @@ #include "providers/bttv/BttvEmotes.hpp" #include "providers/ffz/FfzEmotes.hpp" #include "providers/seventv/SeventvEmotes.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Emotes.hpp" diff --git a/src/widgets/splits/Split.cpp b/src/widgets/splits/Split.cpp index 7258b92ce33..bcf5c3b71f5 100644 --- a/src/widgets/splits/Split.cpp +++ b/src/widgets/splits/Split.cpp @@ -11,6 +11,7 @@ #include "controllers/notifications/NotificationController.hpp" #include "messages/MessageThread.hpp" #include "providers/twitch/EmoteValue.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "providers/twitch/TwitchMessageBuilder.hpp" diff --git a/src/widgets/splits/SplitHeader.cpp b/src/widgets/splits/SplitHeader.cpp index fe7a72f3345..af75e2a8fb7 100644 --- a/src/widgets/splits/SplitHeader.cpp +++ b/src/widgets/splits/SplitHeader.cpp @@ -7,6 +7,7 @@ #include "controllers/hotkeys/HotkeyCategory.hpp" #include "controllers/hotkeys/HotkeyController.hpp" #include "controllers/notifications/NotificationController.hpp" +#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "providers/twitch/TwitchIrcServer.hpp" #include "singletons/Resources.hpp"