Browse Source

IRCClient: Only notify about channel messages containing our nickname

Andreas Kling 5 years ago
parent
commit
3c29818048
2 changed files with 28 additions and 15 deletions
  1. 26 15
      Applications/IRCClient/IRCWindow.cpp
  2. 2 0
      Applications/IRCClient/IRCWindow.h

+ 26 - 15
Applications/IRCClient/IRCWindow.cpp

@@ -93,26 +93,37 @@ bool IRCWindow::is_active() const
     return m_client.current_window() == this;
 }
 
-void IRCWindow::did_add_message(const String& name, const String& message)
+void IRCWindow::post_notification_if_needed(const String& name, const String& message)
 {
-    if ((!is_active() || !window()->is_active()) && !name.is_null() && !message.is_null()) {
-        auto notification = GUI::Notification::construct();
-
-        if (type() == Type::Channel) {
-            StringBuilder builder;
-            builder.append(name);
-            builder.append(" in ");
-            builder.append(m_name);
-            notification->set_title(builder.to_string());
-        } else {
-            notification->set_title(name);
-        }
+    if (name.is_null() || message.is_null())
+        return;
+    if (is_active() && window()->is_active())
+        return;
+
+    auto notification = GUI::Notification::construct();
+
+    if (type() == Type::Channel) {
+
+        if (!message.contains(m_client.nickname()))
+            return;
 
+        StringBuilder builder;
+        builder.append(name);
+        builder.append(" in ");
+        builder.append(m_name);
+        notification->set_title(builder.to_string());
+    } else {
         notification->set_title(name);
-        notification->set_text(message);
-        notification->show();
     }
 
+    notification->set_text(message);
+    notification->show();
+}
+
+void IRCWindow::did_add_message(const String& name, const String& message)
+{
+    post_notification_if_needed(name, message);
+
     if (!is_active()) {
         ++m_unread_count;
         m_client.aid_update_window_list();

+ 2 - 0
Applications/IRCClient/IRCWindow.h

@@ -68,6 +68,8 @@ public:
 private:
     IRCWindow(IRCClient&, void* owner, Type, const String& name);
 
+    void post_notification_if_needed(const String& name, const String& message);
+
     IRCClient& m_client;
     void* m_owner { nullptr };
     Type m_type;