From 113a7795f426c071d6eadd393ea3b122e43de551 Mon Sep 17 00:00:00 2001
From: Marko <goncarmarko@gmail.com>
Date: Sat, 14 Aug 2021 12:28:08 +0000
Subject: [PATCH] Hide similar messages by any user (#2716)

Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
---
 CHANGELOG.md                               |  1 +
 src/providers/twitch/IrcMessageHandler.cpp | 12 ++++++------
 src/singletons/Settings.hpp                |  2 ++
 src/widgets/settingspages/GeneralPage.cpp  |  6 +++---
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e6cb014f6..9579c2c0e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
 - Minor: Remove TwitchEmotes.com attribution and the open/copy options when right-clicking a Twitch Emote. (#2214, #3136)
 - Minor: Strip leading @ and trailing , from username in /user and /usercard commands. (#3143)
 - Minor: Display a system message when reloading subscription emotes to match BTTV/FFZ behavior (#3135)
+- Minor: Added a setting to hide similar messages by any user. (#2716)
 - Bugfix: Notifications for moderators about other moderators deleting messages can now be disabled. (#3121)
 - Bugfix: Moderation mode and active filters are now preserved when opening a split as a popup. (#3113, #3130)
 - Bugfix: Fixed a bug that caused all badge highlights to use the same color. (#3132, #3134)
diff --git a/src/providers/twitch/IrcMessageHandler.cpp b/src/providers/twitch/IrcMessageHandler.cpp
index 456d05223..0e720d0ee 100644
--- a/src/providers/twitch/IrcMessageHandler.cpp
+++ b/src/providers/twitch/IrcMessageHandler.cpp
@@ -112,11 +112,10 @@ float IrcMessageHandler::similarity(
     MessagePtr msg, const LimitedQueueSnapshot<MessagePtr> &messages)
 {
     float similarityPercent = 0.0f;
-    int bySameUser = 0;
-    for (int i = 1; bySameUser < getSettings()->hideSimilarMaxMessagesToCheck;
-         ++i)
+    int checked = 0;
+    for (int i = 1; i <= messages.size(); ++i)
     {
-        if (messages.size() < i)
+        if (checked >= getSettings()->hideSimilarMaxMessagesToCheck)
         {
             break;
         }
@@ -126,11 +125,12 @@ float IrcMessageHandler::similarity(
         {
             break;
         }
-        if (msg->loginName != prevMsg->loginName)
+        if (getSettings()->hideSimilarBySameUser &&
+            msg->loginName != prevMsg->loginName)
         {
             continue;
         }
-        ++bySameUser;
+        ++checked;
         similarityPercent = std::max(
             similarityPercent,
             relativeSimilarity(msg->messageText, prevMsg->messageText));
diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp
index 703fefbde..af61779f9 100644
--- a/src/singletons/Settings.hpp
+++ b/src/singletons/Settings.hpp
@@ -392,6 +392,8 @@ public:
     BoolSetting colorSimilarDisabled = {"/similarity/colorSimilarDisabled",
                                         true};
     BoolSetting hideSimilar = {"/similarity/hideSimilar", false};
+    BoolSetting hideSimilarBySameUser = {"/similarity/hideSimilarBySameUser",
+                                         true};
     BoolSetting hideSimilarMyself = {"/similarity/hideSimilarMyself", false};
     BoolSetting shownSimilarTriggerHighlights = {
         "/similarity/shownSimilarTriggerHighlights", false};
diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp
index 0254c1360..24780ed41 100644
--- a/src/widgets/settingspages/GeneralPage.cpp
+++ b/src/widgets/settingspages/GeneralPage.cpp
@@ -520,11 +520,11 @@ void GeneralPage::initLayout(GeneralPageView &layout)
     layout.addCheckbox("Title", s.headerStreamTitle);
 
     layout.addSubtitle("R9K");
-    layout.addDescription(
-        "Hide similar messages by the same user. Toggle hidden "
-        "messages by pressing Ctrl+H.");
+    layout.addDescription("Hide similar messages. Toggle hidden "
+                          "messages by pressing Ctrl+H.");
     layout.addCheckbox("Hide similar messages", s.similarityEnabled);
     //layout.addCheckbox("Gray out matches", s.colorSimilarDisabled);
+    layout.addCheckbox("By the same user", s.hideSimilarBySameUser);
     layout.addCheckbox("Hide my own messages", s.hideSimilarMyself);
     layout.addCheckbox("Receive notification sounds from hidden messages",
                        s.shownSimilarTriggerHighlights);