X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagefilter.cpp;h=323405e121e70ff7b84ec34afdd923f2bd7580e5;hp=95c1db349db420959ecbaa17cb9af5bdb6c538ef;hb=7e20c659f88e26ccdfdc65f4894ed6ecf61ca8a9;hpb=9fcd3d063228a779afae82f015a9067186c3b742 diff --git a/src/client/messagefilter.cpp b/src/client/messagefilter.cpp index 95c1db34..323405e1 100644 --- a/src/client/messagefilter.cpp +++ b/src/client/messagefilter.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * 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 * @@ -47,17 +47,9 @@ void MessageFilter::init() { setDynamicSortFilter(true); BufferSettings defaultSettings; - defaultSettings.notify("UserNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("UserNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("UserNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged())); - - defaultSettings.notify("serverNoticesInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("serverNoticesInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("serverNoticesInCurrentBuffer", this, SLOT(messageRedirectionChanged())); - - defaultSettings.notify("ErrorMsgsInDefaultBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("ErrorMsgsInStatusBuffer", this, SLOT(messageRedirectionChanged())); - defaultSettings.notify("ErrorMsgsInCurrentBuffer", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged())); + defaultSettings.notify("ErrorMsgsTarget", this, SLOT(messageRedirectionChanged())); messageRedirectionChanged(); _messageTypeFilter = defaultSettings.messageFilter(); @@ -88,19 +80,25 @@ void MessageFilter::messageTypeFilterChanged() { void MessageFilter::messageRedirectionChanged() { BufferSettings bufferSettings; - _userNoticesInDefaultBuffer = bufferSettings.value("UserNoticesInDefaultBuffer", QVariant(true)).toBool(); - _userNoticesInStatusBuffer = bufferSettings.value("UserNoticesInStatusBuffer", QVariant(false)).toBool(); - _userNoticesInCurrentBuffer = bufferSettings.value("UserNoticesInCurrentBuffer", QVariant(false)).toBool(); + bool changed = false; - _serverNoticesInDefaultBuffer = bufferSettings.value("ServerNoticesInDefaultBuffer", QVariant(false)).toBool(); - _serverNoticesInStatusBuffer = bufferSettings.value("ServerNoticesInStatusBuffer", QVariant(true)).toBool(); - _serverNoticesInCurrentBuffer = bufferSettings.value("ServerNoticesInCurrentBuffer", QVariant(false)).toBool(); + if(_userNoticesTarget != bufferSettings.userNoticesTarget()) { + _userNoticesTarget = bufferSettings.userNoticesTarget(); + changed = true; + } - _errorMsgsInDefaultBuffer = bufferSettings.value("ErrorMsgsInDefaultBuffer", QVariant(true)).toBool(); - _errorMsgsInStatusBuffer = bufferSettings.value("ErrorMsgsInStatusBuffer", QVariant(false)).toBool(); - _errorMsgsInCurrentBuffer = bufferSettings.value("ErrorMsgsInCurrentBuffer", QVariant(false)).toBool(); + if(_serverNoticesTarget != bufferSettings.serverNoticesTarget()) { + _serverNoticesTarget = bufferSettings.serverNoticesTarget(); + changed = true; + } - invalidateFilter(); + if(_errorMsgsTarget != bufferSettings.errorMsgsTarget()) { + _errorMsgsTarget = bufferSettings.errorMsgsTarget(); + changed = true; + } + + if(changed) + invalidateFilter(); } QString MessageFilter::idString() const { @@ -142,60 +140,49 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar if(myNetworkId != msgNetworkId) return false; - bool redirect = false; - bool inDefaultBuffer; - bool inStatusBuffer; - bool inCurrentBuffer; - - switch(messageType) { - case Message::Notice: - if(Client::networkModel()->bufferType(bufferId) != BufferInfo::ChannelBuffer) { - redirect = true; - if(flags & Message::ServerMsg) { - // server notice - inDefaultBuffer = _serverNoticesInDefaultBuffer; - inStatusBuffer = _serverNoticesInStatusBuffer; - inCurrentBuffer = _serverNoticesInCurrentBuffer; - } else { - inDefaultBuffer = _userNoticesInDefaultBuffer; - inStatusBuffer = _userNoticesInStatusBuffer; - inCurrentBuffer = _userNoticesInCurrentBuffer; + + 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; - inDefaultBuffer = _errorMsgsInDefaultBuffer; - inStatusBuffer = _errorMsgsInStatusBuffer; - inCurrentBuffer = _errorMsgsInCurrentBuffer; - break; - default: - break; - } - if(redirect) { - if(_redirectedMsgs.contains(msgId)) + if(redirectionTarget & BufferSettings::DefaultBuffer && _validBuffers.contains(bufferId)) return true; - if(inDefaultBuffer && _validBuffers.contains(bufferId)) - return true; - - if(inCurrentBuffer && !(flags & Message::Backlog) && _validBuffers.contains(Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value())) { + if(redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) { BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value(); if(!redirectedTo.isValid()) { - sourceModel()->setData(sourceIdx, QVariant::fromValue(singleBufferId()), MessageModel::RedirectedToRole); - _redirectedMsgs << msgId; - return true; - } else if(_validBuffers.contains(redirectedTo)) { - return true; + BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value(); + if(redirectedTo.isValid()) + sourceModel()->setData(sourceIdx, QVariant::fromValue(redirectedTo), MessageModel::RedirectedToRole); } - } - QSet::const_iterator idIter = _validBuffers.constBegin(); - while(idIter != _validBuffers.constEnd()) { - if(inStatusBuffer && Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer) + if(_validBuffers.contains(redirectedTo)) return true; - idIter++; + } + + if(redirectionTarget & BufferSettings::StatusBuffer) { + QSet::const_iterator idIter = _validBuffers.constBegin(); + while(idIter != _validBuffers.constEnd()) { + if(Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer) + return true; + idIter++; + } } return false;