/***************************************************************************
- * 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 *
}
void MessageFilter::init() {
+ setDynamicSortFilter(true);
+
BufferSettings defaultSettings;
+ defaultSettings.notify("UserNoticesTarget", this, SLOT(messageRedirectionChanged()));
+ defaultSettings.notify("ServerNoticesTarget", this, SLOT(messageRedirectionChanged()));
+ defaultSettings.notify("ErrorMsgsTarget", this, SLOT(messageRedirectionChanged()));
+ messageRedirectionChanged();
+
_messageTypeFilter = defaultSettings.messageFilter();
defaultSettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged()));
- 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()));
- messageRedirectionChanged();
BufferSettings mySettings(idString());
if(mySettings.hasFilter())
_messageTypeFilter = mySettings.messageFilter();
mySettings.notify("MessageTypeFilter", this, SLOT(messageTypeFilterChanged()));
+ mySettings.notify("hasMessageTypeFilter", this, SLOT(messageTypeFilterChanged()));
}
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 {
if(_validBuffers.isEmpty())
return "*";
- QList<BufferId> bufferIds = _validBuffers.toList();;
+ QList<BufferId> bufferIds = _validBuffers.toList();
qSort(bufferIds);
QStringList bufferIdStrings;
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<BufferId>())) {
+ if(redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) {
BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value<BufferId>();
if(!redirectedTo.isValid()) {
- sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(singleBufferId()), MessageModel::RedirectedToRole);
- _redirectedMsgs << msgId;
- return true;
- } else if(_validBuffers.contains(redirectedTo)) {
- return true;
+ BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(redirectedTo.isValid())
+ sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(redirectedTo), MessageModel::RedirectedToRole);
}
- }
- QSet<BufferId>::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<BufferId>::const_iterator idIter = _validBuffers.constBegin();
+ while(idIter != _validBuffers.constEnd()) {
+ if(Client::networkModel()->bufferType(*idIter) == BufferInfo::StatusBuffer)
+ return true;
+ idIter++;
+ }
}
return false;