common: Make SyncableObject non-copyable
[quassel.git] / src / qtui / awaylogfilter.cpp
index 6016c7d..3521856 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2020 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 #include "awaylogfilter.h"
 
-AwayLogFilter::AwayLogFilter(MessageModel *model, QObject *parent)
-    : ChatMonitorFilter(model, parent)
-{
-}
+#include "clientignorelistmanager.h"
 
+AwayLogFilter::AwayLogFilter(MessageModel* model, QObject* parent)
+    : ChatMonitorFilter(model, parent)
+{}
 
-bool AwayLogFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
+bool AwayLogFilter::filterAcceptsRow(int sourceRow, const QModelIndexsourceParent) const
 {
     Q_UNUSED(sourceParent)
 
     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;
 }
 
-
-QVariant AwayLogFilter::data(const QModelIndex &index, int role) const
+QVariant AwayLogFilter::data(const QModelIndex& index, int role) const
 {
     if (role != MessageModel::FlagsRole)
         return ChatMonitorFilter::data(index, role);