From: Marcus Eggenberger Date: Tue, 4 Nov 2008 11:29:05 +0000 (+0100) Subject: fixing a bug where quit messages from different networks were shown if the user has... X-Git-Tag: 0.3.1~74 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=114f8a14b8bc82669ffda0599ce30fc299be9396 fixing a bug where quit messages from different networks were shown if the user has the same nickname --- diff --git a/src/client/messagefilter.cpp b/src/client/messagefilter.cpp index 238c7d57..79d6e9dd 100644 --- a/src/client/messagefilter.cpp +++ b/src/client/messagefilter.cpp @@ -27,8 +27,7 @@ MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent) : QSortFilterProxyModel(parent), - _messageTypeFilter(0), - _bufferType(BufferInfo::InvalidBuffer) + _messageTypeFilter(0) { init(); setSourceModel(source); @@ -37,8 +36,7 @@ MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent) MessageFilter::MessageFilter(MessageModel *source, const QList &buffers, QObject *parent) : QSortFilterProxyModel(parent), _validBuffers(buffers.toSet()), - _messageTypeFilter(0), - _bufferType(BufferInfo::InvalidBuffer) + _messageTypeFilter(0) { init(); setSourceModel(source); @@ -110,19 +108,20 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar return false; if(!(messageType & Message::Quit)) return false; + if(networkId() != Client::networkModel()->networkId(id)) + return false; uint messageTimestamp = sourceModel()->data(sourceIdx, MessageModel::TimestampRole).value().toTime_t(); - if(_filteredQuitMsgs.contains(messageTimestamp)) + QString quiter = sourceModel()->data(sourceIdx, Qt::DisplayRole).toString().section(' ', 0, 0, QString::SectionSkipEmpty).toLower(); + if(quiter != bufferName().toLower()) return false; - QString quiter = sourceModel()->data(sourceIdx, Qt::DisplayRole).toString().section(' ', 0, 0, QString::SectionSkipEmpty); - if(quiter.toLower() == bufferName().toLower()) { - MessageFilter *that = const_cast(this); - that->_filteredQuitMsgs << messageTimestamp; - return true; - } else { + if(_filteredQuitMsgs.contains(quiter, messageTimestamp)) return false; - } + + MessageFilter *that = const_cast(this); + that->_filteredQuitMsgs.insert(quiter, messageTimestamp); + return true; } } @@ -133,21 +132,3 @@ void MessageFilter::requestBacklog() { bufferIdIter++; } } - -const QString &MessageFilter::bufferName() const { - if(_bufferName.isEmpty()) { - MessageFilter *that = const_cast(this); - that->_bufferName = Client::networkModel()->bufferName(singleBufferId()); - return that->_bufferName; - } - return _bufferName; -} - -BufferInfo::Type MessageFilter::bufferType() const { - if(_bufferType == BufferInfo::InvalidBuffer) { - MessageFilter *that = const_cast(this); - that->_bufferType = Client::networkModel()->bufferType(singleBufferId()); - return that->_bufferType; - } - return _bufferType; -} diff --git a/src/client/messagefilter.h b/src/client/messagefilter.h index 9d17ddb1..342fb86d 100644 --- a/src/client/messagefilter.h +++ b/src/client/messagefilter.h @@ -24,7 +24,9 @@ #include #include "bufferinfo.h" +#include "client.h" #include "messagemodel.h" +#include "networkmodel.h" #include "types.h" class MessageFilter : public QSortFilterProxyModel { @@ -47,18 +49,16 @@ public slots: void requestBacklog(); protected: - const QString &bufferName() const; - BufferInfo::Type bufferType() const; + QString bufferName() const { return Client::networkModel()->bufferName(singleBufferId()); } + BufferInfo::Type bufferType() const { return Client::networkModel()->bufferType(singleBufferId()); } + NetworkId networkId() const { return Client::networkModel()->networkId(singleBufferId()); } private: void init(); QSet _validBuffers; - QSet _filteredQuitMsgs; + QMultiHash _filteredQuitMsgs; int _messageTypeFilter; - - QString _bufferName; - BufferInfo::Type _bufferType; }; #endif