#include "buffermodel.h"
#include "messagemodel.h"
#include "networkmodel.h"
+#include "clientignorelistmanager.h"
MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent)
: QSortFilterProxyModel(parent),
void MessageFilter::init() {
setDynamicSortFilter(true);
+ _userNoticesTarget = _serverNoticesTarget = _errorMsgsTarget = -1;
+
BufferSettings defaultSettings;
defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged()));
defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged()));
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)
if(_validBuffers.isEmpty())
return true;
- BufferId bufferId = sourceModel()->data(sourceIdx, MessageModel::BufferIdRole).value<BufferId>();
+ BufferId bufferId = sourceIdx.data(MessageModel::BufferIdRole).value<BufferId>();
if(!bufferId.isValid()) {
return true;
}
- MsgId msgId = sourceModel()->data(sourceIdx, MessageModel::MsgIdRole).value<MsgId>();
- Message::Flags flags = (Message::Flags)sourceModel()->data(sourceIdx, MessageModel::FlagsRole).toInt();
+ MsgId msgId = sourceIdx.data(MessageModel::MsgIdRole).value<MsgId>();
+ 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<Message>(), 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;