- if(_bufferList.isEmpty()) return true;
- BufferId id = sourceModel()->data(sourceModel()->index(sourceRow, 0), MessageModel::BufferIdRole).value<BufferId>();
- return _bufferList.contains(id);
+ QModelIndex sourceIdx = sourceModel()->index(sourceRow, 2);
+ Message::Type messageType = (Message::Type)sourceModel()->data(sourceIdx, MessageModel::TypeRole).toInt();
+
+ // apply message type filter
+ if(_messageTypeFilter & messageType)
+ return false;
+
+ if(_validBuffers.isEmpty())
+ return true;
+
+ BufferId id = sourceModel()->data(sourceIdx, MessageModel::BufferIdRole).value<BufferId>();
+ if(!id.isValid()) {
+ return true;
+ }
+
+ if(_validBuffers.contains(id)) {
+ return true;
+ } else {
+ // show Quit messages in Query buffers:
+ if(bufferType() != BufferInfo::QueryBuffer)
+ return false;
+ if(!(messageType & Message::Quit))
+ return false;
+ if(networkId() != Client::networkModel()->networkId(id))
+ 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;
+
+ MessageFilter *that = const_cast<MessageFilter *>(this);
+ that->_filteredQuitMsgs.insert(quiter, messageTimestamp);
+ return true;
+ }
+}
+
+void MessageFilter::requestBacklog() {
+ QSet<BufferId>::const_iterator bufferIdIter = _validBuffers.constBegin();
+ while(bufferIdIter != _validBuffers.constEnd()) {
+ Client::messageModel()->requestBacklog(*bufferIdIter);
+ bufferIdIter++;
+ }