From 86111d59b6243a8ad6338eb246821b7db9e424d6 Mon Sep 17 00:00:00 2001 From: KleberPF <43550602+KleberPF@users.noreply.github.com> Date: Sat, 24 Feb 2024 10:21:29 -0300 Subject: [PATCH] Add option always include broadcaster in user completions (#5193) --- CHANGELOG.md | 1 + .../completion/sources/UserSource.cpp | 20 +++++++++++++++++++ src/providers/twitch/TwitchChannel.hpp | 13 ++++++------ src/singletons/Settings.hpp | 4 ++++ src/widgets/settingspages/GeneralPage.cpp | 5 +++++ 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f6c026e..baec4269 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Minor: Add a new completion API for experimental plugins feature. (#5000, #5047) - Minor: Re-enabled _Restart on crash_ option on Windows. (#5012) - Minor: The whisper highlight color can now be configured through the settings. (#5053) +- Minor: Added an option to always include the broadcaster in user completions. This is enabled by default. (#5193) - Minor: Added missing periods at various moderator messages and commands. (#5061) - Minor: Improved color selection and display. (#5057) - Minor: Improved Streamlink documentation in the settings dialog. (#5076) diff --git a/src/controllers/completion/sources/UserSource.cpp b/src/controllers/completion/sources/UserSource.cpp index 46b16bcd..bebe8183 100644 --- a/src/controllers/completion/sources/UserSource.cpp +++ b/src/controllers/completion/sources/UserSource.cpp @@ -59,6 +59,26 @@ void UserSource::initializeFromChannel(const Channel *channel) } this->items_ = tc->accessChatters()->all(); + + if (getSettings()->alwaysIncludeBroadcasterInUserCompletions) + { + auto it = std::find_if(this->items_.begin(), this->items_.end(), + [tc](const UserItem &user) { + return user.first == tc->getName(); + }); + + if (it != this->items_.end()) + { + auto broadcaster = *it; + this->items_.erase(it); + this->items_.insert(this->items_.begin(), broadcaster); + } + else + { + this->items_.insert(this->items_.begin(), + {tc->getName(), tc->getDisplayName()}); + } + } } const std::vector &UserSource::output() const diff --git a/src/providers/twitch/TwitchChannel.hpp b/src/providers/twitch/TwitchChannel.hpp index 2b89bd9a..6fc7b043 100644 --- a/src/providers/twitch/TwitchChannel.hpp +++ b/src/providers/twitch/TwitchChannel.hpp @@ -264,6 +264,12 @@ public: void updateStreamStatus(const std::optional &helixStream); void updateStreamTitle(const QString &title); + /** + * Returns the display name of the user + * + * If the display name contained chinese, japenese, or korean characters, the user's login name is returned instead + **/ + const QString &getDisplayName() const override; void updateDisplayName(const QString &displayName); private: @@ -323,13 +329,6 @@ private: void setDisplayName(const QString &name); void setLocalizedName(const QString &name); - /** - * Returns the display name of the user - * - * If the display name contained chinese, japenese, or korean characters, the user's login name is returned instead - **/ - const QString &getDisplayName() const override; - /** * Returns the localized name of the user **/ diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index c66fcb21..daed3e6a 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -218,6 +218,10 @@ public: "/behaviour/autocompletion/emoteCompletionWithColon", true}; BoolSetting showUsernameCompletionMenu = { "/behaviour/autocompletion/showUsernameCompletionMenu", true}; + BoolSetting alwaysIncludeBroadcasterInUserCompletions = { + "/behaviour/autocompletion/alwaysIncludeBroadcasterInUserCompletions", + true, + }; BoolSetting useSmartEmoteCompletion = { "/experiments/useSmartEmoteCompletion", false, diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index 3c7938f4..a7c2899b 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -1032,6 +1032,11 @@ void GeneralPage::initLayout(GeneralPageView &layout) "Find mentions of users in chat without the @ prefix."); layout.addCheckbox("Show username autocompletion popup menu", s.showUsernameCompletionMenu); + layout.addCheckbox( + "Always include broadcaster in user completions", + s.alwaysIncludeBroadcasterInUserCompletions, false, + "This will ensure a broadcaster is always easy to ping, even if they " + "don't have chat open or have typed recently."); const QStringList usernameDisplayModes = {"Username", "Localized name", "Username and localized name"};