/***************************************************************************
-* Copyright (C) 2005-08 by the Quassel Project *
+* Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "chatlinemodel.h"
#include "networkmodel.h"
#include "chatviewsettings.h"
+#include "clientignorelistmanager.h"
ChatMonitorFilter::ChatMonitorFilter(MessageModel *model, QObject *parent)
: MessageFilter(model, parent)
bool ChatMonitorFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
Q_UNUSED(sourceParent)
- Message::Flags flags = (Message::Flags)sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::FlagsRole).toInt();
+ QModelIndex source_index = sourceModel()->index(sourceRow, 0);
+
+ Message::Flags flags = (Message::Flags)source_index.data(MessageModel::FlagsRole).toInt();
if(flags & Message::Backlog || (!_showOwnMessages && flags & Message::Self))
return false;
- Message::Type type = (Message::Type)sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::TypeRole).toInt();
+ Message::Type type = (Message::Type)source_index.data(MessageModel::TypeRole).toInt();
if(!(type & (Message::Plain | Message::Notice | Message::Action)))
return false;
+ BufferId bufferId = source_index.data(MessageModel::BufferIdRole).value<BufferId>();
+
// ChatMonitorSettingsPage
if(_operationMode == ChatViewSettings::OptOut
&& !(_showHighlights && flags & Message::Highlight)
- && _bufferIds.contains(sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::BufferIdRole).value<BufferId>()))
+ && _bufferIds.contains(bufferId))
return false;
if(_operationMode == ChatViewSettings::OptIn
&& !(_showHighlights && flags & Message::Highlight)
- && !_bufferIds.contains(sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::BufferIdRole).value<BufferId>()))
+ && !_bufferIds.contains(bufferId))
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;
}
fields << Client::networkModel()->bufferName(bufid);
}
- Message::Type messageType = (Message::Type)sourceModel()->data(source_index, MessageModel::TypeRole).toInt();
+ Message::Type messageType = (Message::Type)source_index.data(MessageModel::TypeRole).toInt();
if(messageType & (Message::Plain | Message::Notice)) {
QString sender = MessageFilter::data(index, ChatLineModel::EditRole).toString();
fields << sender;
foreach (QVariant v, newValue.toList()) {
_bufferIds << v.value<BufferId>();
}
+ invalidateFilter();
}