core: Allow clean shutdown of the core
[quassel.git] / 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;
 }