Exclude ignored messages in Away Log
authorSvetlana Tkachenko <svetlana@members.fsf.org>
Wed, 31 Jan 2018 23:11:35 +0000 (23:11 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sat, 16 Jun 2018 22:50:21 +0000 (00:50 +0200)
Cleaned-up-by: Manuel Nickschas <sputnick@quassel-irc.org>
src/qtui/awaylogfilter.cpp

index 3669c41..882a7af 100644 (file)
@@ -19,6 +19,7 @@
  ***************************************************************************/
 
 #include "awaylogfilter.h"
+#include "clientignorelistmanager.h"
 
 AwayLogFilter::AwayLogFilter(MessageModel *model, QObject *parent)
     : ChatMonitorFilter(model, parent)
@@ -33,16 +34,28 @@ bool AwayLogFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar
     QModelIndex source_index = sourceModel()->index(sourceRow, 0);
 
     Message::Flags flags = (Message::Flags)sourceModel()->data(source_index, MessageModel::FlagsRole).toInt();
-    if (!(flags & Message::Backlog && flags & Message::Highlight))
+    // Only show highlights from the backlog
+    if (!(flags & Message::Backlog && flags & Message::Highlight)) {
         return false;
+    }
 
+    // do not use invalid buffers
     BufferId bufferId = sourceModel()->data(source_index, MessageModel::BufferIdRole).value<BufferId>();
     if (!bufferId.isValid()) {
         return false;
     }
 
-    if (Client::networkModel()->lastSeenMsgId(bufferId) >= sourceModel()->data(source_index, MessageModel::MsgIdRole).value<MsgId>())
+    // only show messages that were sent after the user detached
+    if (Client::networkModel()->lastSeenMsgId(bufferId) >= sourceModel()->data(source_index, MessageModel::MsgIdRole).value<MsgId>()) {
         return false;
+    }
+
+    // ignorelist handling
+    // only match if message is not flagged as server msg
+    if (!(flags & Message::ServerMsg) && Client::ignoreListManager()
+            && Client::ignoreListManager()->match(source_index.data(MessageModel::MessageRole).value<Message>(), Client::networkModel()->networkName(bufferId))) {
+        return false;
+    }
 
     return true;
 }