X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagefilter.cpp;h=39fd3eb733b203d8e5c92cf393bfc3e041173d3c;hp=c9c44d163f1bf5bd6c9cc49772e7b67ae73d35bc;hb=f9c4ee168a794add5261a7f1b6abb518f5987f8c;hpb=aa5df1497a6fca61d6f59be49572799b5c9d93fe diff --git a/src/client/messagefilter.cpp b/src/client/messagefilter.cpp index c9c44d16..39fd3eb7 100644 --- a/src/client/messagefilter.cpp +++ b/src/client/messagefilter.cpp @@ -25,6 +25,7 @@ #include "buffermodel.h" #include "messagemodel.h" #include "networkmodel.h" +#include "clientignorelistmanager.h" MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent) : QSortFilterProxyModel(parent), @@ -46,6 +47,8 @@ MessageFilter::MessageFilter(MessageModel *source, const QList &buffer void MessageFilter::init() { setDynamicSortFilter(true); + _userNoticesTarget = _serverNoticesTarget = _errorMsgsTarget = -1; + BufferSettings defaultSettings; defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged())); defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged())); @@ -118,7 +121,7 @@ QString MessageFilter::idString() const { bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { Q_UNUSED(sourceParent); QModelIndex sourceIdx = sourceModel()->index(sourceRow, 2); - Message::Type messageType = (Message::Type)sourceModel()->data(sourceIdx, MessageModel::TypeRole).toInt(); + Message::Type messageType = (Message::Type)sourceIdx.data(MessageModel::TypeRole).toInt(); // apply message type filter if(_messageTypeFilter & messageType) @@ -127,42 +130,44 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar if(_validBuffers.isEmpty()) return true; - BufferId bufferId = sourceModel()->data(sourceIdx, MessageModel::BufferIdRole).value(); + BufferId bufferId = sourceIdx.data(MessageModel::BufferIdRole).value(); if(!bufferId.isValid()) { return true; } - MsgId msgId = sourceModel()->data(sourceIdx, MessageModel::MsgIdRole).value(); - Message::Flags flags = (Message::Flags)sourceModel()->data(sourceIdx, MessageModel::FlagsRole).toInt(); + MsgId msgId = sourceIdx.data(MessageModel::MsgIdRole).value(); + Message::Flags flags = (Message::Flags)sourceIdx.data(MessageModel::FlagsRole).toInt(); NetworkId myNetworkId = networkId(); NetworkId msgNetworkId = Client::networkModel()->networkId(bufferId); if(myNetworkId != msgNetworkId) return false; - bool redirect = false; - int redirectionTarget = 0; - switch(messageType) { - case Message::Notice: - if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) { - redirect = true; - if(flags & Message::ServerMsg) { - // server notice - redirectionTarget = _serverNoticesTarget; - } else { - redirectionTarget = _userNoticesTarget; + // ignorelist handling + // only match if message is not flagged as server msg + if(!(flags & Message::ServerMsg) && Client::ignoreListManager() + && Client::ignoreListManager()->match(sourceIdx.data(MessageModel::MessageRole).value(), Client::networkModel()->networkName(bufferId))) + return false; + + if(flags & Message::Redirected) { + int redirectionTarget = 0; + switch(messageType) { + case Message::Notice: + if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) { + if(flags & Message::ServerMsg) { + // server notice + redirectionTarget = _serverNoticesTarget; + } else { + redirectionTarget = _userNoticesTarget; + } } + break; + case Message::Error: + redirectionTarget = _errorMsgsTarget; + break; + default: + break; } - break; - case Message::Error: - redirect = true; - redirectionTarget = _errorMsgsTarget; - break; - default: - break; - } - - if(redirect) { if(redirectionTarget & BufferSettings::DefaultBuffer && _validBuffers.contains(bufferId)) return true;