core: Allow clean shutdown of the core
[quassel.git] / src / qtui / awaylogfilter.cpp
index 3b6b8c3..882a7af 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2014 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -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;
 }