- return false;
- }
-
-
- if(_validBuffers.contains(bufferId)) {
- return true;
- } else {
- // show Quit messages in Query buffers:
- if(bufferType() != BufferInfo::QueryBuffer)
- return false;
- if(!(messageType & Message::Quit))
- return false;
-
- if(myNetworkId != msgNetworkId)
- return false;
-
- uint messageTimestamp = sourceModel()->data(sourceIdx, MessageModel::TimestampRole).value<QDateTime>().toTime_t();
- QString quiter = sourceModel()->data(sourceIdx, Qt::DisplayRole).toString().section(' ', 0, 0, QString::SectionSkipEmpty).toLower();
- if(quiter != bufferName().toLower())
- return false;
-
- if(_filteredQuitMsgs.contains(quiter, messageTimestamp))
- return false;
+ // 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;
+
+ // 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;
+ }
+
+ if (redirectionTarget & BufferSettings::DefaultBuffer && _validBuffers.contains(bufferId))
+ return true;
+
+ if (redirectionTarget & BufferSettings::CurrentBuffer && !(flags & Message::Backlog)) {
+ BufferId redirectedTo = sourceModel()->data(sourceIdx, MessageModel::RedirectedToRole).value<BufferId>();
+ if (!redirectedTo.isValid()) {
+ BufferId redirectedTo = Client::bufferModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>();
+ if (redirectedTo.isValid())
+ sourceModel()->setData(sourceIdx, QVariant::fromValue<BufferId>(redirectedTo), MessageModel::RedirectedToRole);
+ }
+
+ if (_validBuffers.contains(redirectedTo))
+ return true;
+ }
+
+ 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;
+ }