Decomplexify & reencapsulate
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 24 Aug 2009 22:03:58 +0000 (00:03 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 24 Aug 2009 23:16:03 +0000 (01:16 +0200)
src/client/messagefilter.cpp
src/client/messagemodel.cpp
src/client/messagemodel.h
src/core/coresession.cpp
src/qtui/chatmonitorfilter.cpp
src/qtui/mainwin.cpp
src/qtui/settingspages/ignorelistmodel.h

index 53ac5e1..2044b74 100644 (file)
@@ -121,7 +121,7 @@ QString MessageFilter::idString() const {
 bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
   Q_UNUSED(sourceParent);
   QModelIndex sourceIdx = sourceModel()->index(sourceRow, 2);
-  Message::Type messageType = (Message::Type)sourceModel()->data(sourceIdx, MessageModel::TypeRole).toInt();
+  Message::Type messageType = (Message::Type)sourceIdx.data(MessageModel::TypeRole).toInt();
 
   // apply message type filter
   if(_messageTypeFilter & messageType)
@@ -130,13 +130,13 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar
   if(_validBuffers.isEmpty())
     return true;
 
-  BufferId bufferId = sourceModel()->data(sourceIdx, MessageModel::BufferIdRole).value<BufferId>();
+  BufferId bufferId = sourceIdx.data(MessageModel::BufferIdRole).value<BufferId>();
   if(!bufferId.isValid()) {
     return true;
   }
 
-  MsgId msgId = sourceModel()->data(sourceIdx, MessageModel::MsgIdRole).value<MsgId>();
-  Message::Flags flags = (Message::Flags)sourceModel()->data(sourceIdx, MessageModel::FlagsRole).toInt();
+  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);
@@ -144,11 +144,10 @@ bool MessageFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePar
     return false;
 
   // ignorelist handling
-  const MessageModelItem *item = const_cast<const MessageModel*>(static_cast<MessageModel*>(sourceModel()))->messageItemAt(sourceRow);
   // only match if message is not flagged as server msg
-  if(!(item->message().flags() & Message::ServerMsg) &&
-     Client::ignoreListManager()->match(item->message(), Client::networkModel()->networkName(item->bufferId())))
-      return false;
+  if(!(flags & Message::ServerMsg) &&
+      Client::ignoreListManager()->match(sourceIdx.data(MessageModel::MessageRole).value<Message>(), Client::networkModel()->networkName(bufferId)))
+    return false;
 
   if(flags & Message::Redirected) {
     int redirectionTarget = 0;
index 6bcff7b..ab81fe2 100644 (file)
@@ -407,13 +407,14 @@ QVariant MessageModelItem::data(int column, int role) const {
     return QVariant();
 
   switch(role) {
-  case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(msgId());
-  case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(bufferId());
-  case MessageModel::TypeRole: return msgType();
-  case MessageModel::FlagsRole: return (int)msgFlags();
-  case MessageModel::TimestampRole: return timestamp();
-  case MessageModel::RedirectedToRole: return qVariantFromValue<BufferId>(_redirectedTo);
-  default: return QVariant();
+    case MessageModel::MessageRole: return QVariant::fromValue<Message>(_msg);
+    case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(msgId());
+    case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(bufferId());
+    case MessageModel::TypeRole: return msgType();
+    case MessageModel::FlagsRole: return (int)msgFlags();
+    case MessageModel::TimestampRole: return timestamp();
+    case MessageModel::RedirectedToRole: return qVariantFromValue<BufferId>(_redirectedTo);
+    default: return QVariant();
   }
 }
 
index afb8ec3..851509b 100644 (file)
@@ -34,11 +34,12 @@ class MessageModel : public QAbstractItemModel {
   Q_OBJECT
 
 public:
-  enum MessageRole {
+  enum MessageModelRole {
     DisplayRole = Qt::DisplayRole,
     EditRole = Qt::EditRole,
     BackgroundRole = Qt::BackgroundRole,
-    MsgIdRole = Qt::UserRole,
+    MessageRole = Qt::UserRole,
+    MsgIdRole,
     BufferIdRole,
     TypeRole,
     FlagsRole,
@@ -70,8 +71,6 @@ public:
 
   void clear();
 
-  virtual const MessageModelItem *messageItemAt(int i) const = 0;
-
 public slots:
   void requestBacklog(BufferId bufferId);
   void messagesReceived(BufferId bufferId, int count);
@@ -83,6 +82,7 @@ protected:
 
   virtual int messageCount() const = 0;
   virtual bool messagesIsEmpty() const = 0;
+  virtual const MessageModelItem *messageItemAt(int i) const = 0;
   virtual MessageModelItem *messageItemAt(int i) = 0;
   virtual const MessageModelItem *firstMessageItem() const= 0;
   virtual MessageModelItem *firstMessageItem() = 0;
index d81f9c0..371d7ad 100644 (file)
@@ -248,7 +248,7 @@ void CoreSession::processMessages() {
     const RawMessage &rawMsg = _messageQueue.first();
     BufferInfo bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, rawMsg.bufferType, rawMsg.target);
     Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
-    
+
     networkName = _networks.value(bufferInfo.networkId())->networkName();
     // if message is ignored with "HardStrictness" we discard it here
     if(_ignoreListManager.match(msg, networkName) != IgnoreListManager::HardStrictness) {
index 055ed93..9bbed8c 100644 (file)
@@ -64,21 +64,22 @@ bool ChatMonitorFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourc
   if(!(type & (Message::Plain | Message::Notice | Message::Action)))
     return false;
 
+  BufferId bufferId = source_index.data(MessageModel::BufferIdRole).value<BufferId>();
+
   // ChatMonitorSettingsPage
   if(_operationMode == ChatViewSettings::OptOut
     && !(_showHighlights && flags & Message::Highlight)
-    &&  _bufferIds.contains(source_index.data(MessageModel::BufferIdRole).value<BufferId>()))
+    &&  _bufferIds.contains(bufferId))
     return false;
   if(_operationMode == ChatViewSettings::OptIn
     && !(_showHighlights && flags & Message::Highlight)
-    && !_bufferIds.contains(source_index.data(MessageModel::BufferIdRole).value<BufferId>()))
+    && !_bufferIds.contains(bufferId))
     return false;
 
   // ignorelist handling
-  const MessageModelItem *item = const_cast<const MessageModel*>(static_cast<MessageModel*>(sourceModel()))->messageItemAt(sourceRow);
   // only match if message is not flagged as server msg
-  if(!(item->message().flags() & Message::ServerMsg) &&
-     Client::ignoreListManager()->match(item->message(), Client::networkModel()->networkName(item->bufferId())))
+  if(!(flags & Message::ServerMsg) &&
+     Client::ignoreListManager()->match(source_index.data(MessageModel::MessageRole).value<Message>(), Client::networkModel()->networkName(bufferId)))
       return false;
   return true;
 }
index 2a5bad4..36e9825 100644 (file)
@@ -957,9 +957,8 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
     if(hasFocus && bufId == _bufferWidget->currentBuffer())
       continue;
 
-    const MessageModelItem *item = const_cast<const MessageModel*>(Client::messageModel())->messageItemAt(i);
     if((flags & Message::Highlight || bufType == BufferInfo::QueryBuffer) &&
-       !Client::ignoreListManager()->match(item->message(), Client::networkModel()->networkName(bufId))) {
+       !Client::ignoreListManager()->match(idx.data(MessageModel::MessageRole).value<Message>(), Client::networkModel()->networkName(bufId))) {
       QModelIndex senderIdx = Client::messageModel()->index(i, ChatLineModel::SenderColumn);
       QString sender = senderIdx.data(ChatLineModel::EditRole).toString();
       QString contents = idx.data(ChatLineModel::DisplayRole).toString();
index 87b242a..de3eb06 100644 (file)
@@ -88,6 +88,5 @@ int IgnoreListModel::columnCount(const QModelIndex &parent) const {
   Q_UNUSED(parent);
   return isReady() ? 3 : 0;
 }
-    
 
 #endif //IGNORELISTMODEL_H