Cleanup allowing for tags to be available at later points, adds TAGMSG
[quassel.git] / src / qtui / awaylogfilter.cpp
index 09964a4..c5c7b58 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
 #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
 {
-}
+    Q_UNUSED(sourceParent)
+
+    QModelIndex source_index = sourceModel()->index(sourceRow, 0);
 
-bool AwayLogFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
-  Q_UNUSED(sourceParent)
+    Message::Flags flags = (Message::Flags)sourceModel()->data(source_index, MessageModel::FlagsRole).toInt();
+    // Only show highlights from the backlog
+    if (!(flags & Message::Backlog && flags & Message::Highlight)) {
+        return false;
+    }
 
-  QModelIndex source_index = sourceModel()->index(sourceRow, 0);
+    // do not use invalid buffers
+    BufferId bufferId = sourceModel()->data(source_index, MessageModel::BufferIdRole).value<BufferId>();
+    if (!bufferId.isValid()) {
+        return false;
+    }
 
-  Message::Flags flags = (Message::Flags)source_index.data(MessageModel::FlagsRole).toInt();
-  if(!(flags & Message::Backlog && flags & Message::Highlight))
-    return false;
+    // 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;
+    }
 
-  BufferId bufferId = source_index.data(MessageModel::BufferIdRole).value<BufferId>();
-  if(!bufferId.isValid()) {
-    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;
+    }
 
-  if(Client::networkModel()->lastSeenMsgId(bufferId) >= source_index.data(MessageModel::MsgIdRole).value<MsgId>())
-    return false;
+    return true;
+}
+
+QVariant AwayLogFilter::data(const QModelIndex& index, int role) const
+{
+    if (role != MessageModel::FlagsRole)
+        return ChatMonitorFilter::data(index, role);
 
-  return true;
+    QModelIndex source_index = mapToSource(index);
+    Message::Flags flags = (Message::Flags)sourceModel()->data(source_index, MessageModel::FlagsRole).toInt();
+    flags &= ~Message::Highlight;
+    return (int)flags;
 }