fixing a bug where quit messages from different networks were shown if the user has...
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 4 Nov 2008 11:29:05 +0000 (12:29 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 4 Nov 2008 11:29:05 +0000 (12:29 +0100)
src/client/messagefilter.cpp
src/client/messagefilter.h

index 238c7d5..79d6e9d 100644 (file)
@@ -27,8 +27,7 @@
 
 MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent)
   : QSortFilterProxyModel(parent),
 
 MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent)
   : QSortFilterProxyModel(parent),
-    _messageTypeFilter(0),
-    _bufferType(BufferInfo::InvalidBuffer)
+    _messageTypeFilter(0)
 {
   init();
   setSourceModel(source);
 {
   init();
   setSourceModel(source);
@@ -37,8 +36,7 @@ MessageFilter::MessageFilter(QAbstractItemModel *source, QObject *parent)
 MessageFilter::MessageFilter(MessageModel *source, const QList<BufferId> &buffers, QObject *parent)
   : QSortFilterProxyModel(parent),
     _validBuffers(buffers.toSet()),
 MessageFilter::MessageFilter(MessageModel *source, const QList<BufferId> &buffers, QObject *parent)
   : QSortFilterProxyModel(parent),
     _validBuffers(buffers.toSet()),
-    _messageTypeFilter(0),
-    _bufferType(BufferInfo::InvalidBuffer)
+    _messageTypeFilter(0)
 {
   init();
   setSourceModel(source);
 {
   init();
   setSourceModel(source);
@@ -110,19 +108,20 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar
       return false;
     if(!(messageType & Message::Quit))
       return false;
       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();
 
     uint messageTimestamp = sourceModel()->data(sourceIdx, MessageModel::TimestampRole).value<QDateTime>().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;
 
       return false;
 
-    QString quiter = sourceModel()->data(sourceIdx, Qt::DisplayRole).toString().section(' ', 0, 0, QString::SectionSkipEmpty);
-    if(quiter.toLower() == bufferName().toLower()) {
-      MessageFilter *that = const_cast<MessageFilter *>(this);
-      that->_filteredQuitMsgs << messageTimestamp;
-      return true;
-    } else {
+    if(_filteredQuitMsgs.contains(quiter, messageTimestamp))
       return false;
       return false;
-    }
+
+    MessageFilter *that = const_cast<MessageFilter *>(this);
+    that->_filteredQuitMsgs.insert(quiter,  messageTimestamp);
+    return true;
   }
 }
 
   }
 }
 
@@ -133,21 +132,3 @@ void MessageFilter::requestBacklog() {
     bufferIdIter++;
   }
 }
     bufferIdIter++;
   }
 }
-
-const QString &MessageFilter::bufferName() const {
-  if(_bufferName.isEmpty()) {
-    MessageFilter *that = const_cast<MessageFilter *>(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<MessageFilter *>(this);
-    that->_bufferType = Client::networkModel()->bufferType(singleBufferId());
-    return that->_bufferType;
-  }
-  return _bufferType;
-}
index 9d17ddb..342fb86 100644 (file)
@@ -24,7 +24,9 @@
 #include <QSortFilterProxyModel>
 
 #include "bufferinfo.h"
 #include <QSortFilterProxyModel>
 
 #include "bufferinfo.h"
+#include "client.h"
 #include "messagemodel.h"
 #include "messagemodel.h"
+#include "networkmodel.h"
 #include "types.h"
 
 class MessageFilter : public QSortFilterProxyModel {
 #include "types.h"
 
 class MessageFilter : public QSortFilterProxyModel {
@@ -47,18 +49,16 @@ public slots:
   void requestBacklog();
 
 protected:
   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<BufferId> _validBuffers;
 
 private:
   void init();
 
   QSet<BufferId> _validBuffers;
-  QSet<uint> _filteredQuitMsgs;
+  QMultiHash<QString, uint> _filteredQuitMsgs;
   int _messageTypeFilter;
   int _messageTypeFilter;
-
-  QString _bufferName;
-  BufferInfo::Type _bufferType;
 };
 
 #endif
 };
 
 #endif