- Highlights are now determined in Client::checkForHighlight(Message &).
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 10 Feb 2008 16:35:46 +0000 (16:35 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 10 Feb 2008 16:35:46 +0000 (16:35 +0000)
- Fixed a bug where all messages where marked as highlighted, when not connected to the according network.

src/client/client.cpp
src/client/client.h
src/client/networkmodel.cpp
src/common/message.cpp
src/common/message.h
src/qtui/chatline-old.cpp
version.inc

index e09684b..b80942a 100644 (file)
@@ -379,24 +379,23 @@ void Client::networkDestroyed() {
   }
 }
 
-void Client::recvMessage(const Message &msg) {
+void Client::recvMessage(Message &msg) {
+  Buffer *b;
+  
   if(msg.type() == Message::Error) {
-    Buffer *b = buffer(msg.bufferInfo().bufferId());
-    if(b) {
-      b->appendMsg(msg);
-      networkModel()->updateBufferActivity(msg);
-    } else {
-      //TODO: display message in the status buffer
+    b = buffer(msg.bufferInfo().bufferId());
+    if(!b) {
+      // FIXME: if buffer doesn't exist, forward the message to the status or current buffer
       b = buffer(msg.bufferInfo());
-      b->appendMsg(msg);
-      networkModel()->updateBufferActivity(msg);
     }
   } else {
-    Buffer *b = buffer(msg.bufferInfo());
-    b->appendMsg(msg);
-    networkModel()->updateBufferActivity(msg);
+    b = buffer(msg.bufferInfo());
   }
-
+  
+  checkForHighlight(msg);
+  b->appendMsg(msg);
+  networkModel()->updateBufferActivity(msg);
+  
   if(msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) {
     const Network *net = network(msg.bufferInfo().networkId());
     QString networkName = net != 0
@@ -417,6 +416,7 @@ void Client::recvBacklogData(BufferInfo id, QVariantList msgs, bool /*done*/) {
   Buffer *b = buffer(id);
   foreach(QVariant v, msgs) {
     Message msg = v.value<Message>();
+    checkForHighlight(msg);
     b->prependMsg(msg);
     networkModel()->updateBufferActivity(msg);
     if(!layoutQueue.contains(b)) layoutQueue.append(b);
@@ -439,3 +439,11 @@ AbstractUiMsg *Client::layoutMsg(const Message &msg) {
   return instance()->mainUi->layoutMsg(msg);
 }
 
+void Client::checkForHighlight(Message &msg) const {
+  const Network *net = network(msg.bufferInfo().networkId());
+  if(net && !net->myNick().isEmpty()) {
+    QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$");
+    if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text()))
+      msg.setFlags(msg.flags() | Message::Highlight);
+  }
+}
index 40bf332..27224a3 100644 (file)
@@ -103,6 +103,8 @@ public:
 
   enum ClientMode { LocalCore, RemoteCore };
 
+  void checkForHighlight(Message &msg) const;
+  
 signals:
   void sendInput(BufferInfo, QString message);
   void showBuffer(Buffer *);
@@ -157,7 +159,7 @@ private slots:
   //void networkConnected(NetworkId);
   //void networkDisconnected(NetworkId);
 
-  void recvMessage(const Message &message);
+  void recvMessage(Message &message);
   void recvStatusMsg(QString network, QString message);
   void recvBacklogData(BufferInfo, QVariantList, bool);
   void updateBufferInfo(BufferInfo);
index 8cf95bb..52e5740 100644 (file)
@@ -758,13 +758,8 @@ void NetworkModel::updateBufferActivity(const Message &msg) {
   if(msg.type() == Message::Plain || msg.type() == Message::Notice)
     level |= BufferItem::NewMessage;
 
-
-  const Network *net = Client::network(msg.bufferInfo().networkId());
-  if(net) {
-    QRegExp nickRegExp("^(.*\\W)?"+net->myNick()+"(\\W.*)?$");
-    if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text()))
+  if(msg.flags() & Message::Highlight) 
       level |= BufferItem::Highlight;
-  }
 
   bufferItem(msg.bufferInfo())->updateActivity(level);
 }
index e09457a..97cee42 100644 (file)
@@ -44,6 +44,10 @@ Message::Message(QDateTime ts,BufferInfo bufferInfo, Type type, QString text, QS
 {
 }
 
+void Message::setFlags(quint8 flags) {
+  _flags = flags;
+}
+
 QString Message::mircToInternal(QString mirc) {
   mirc.replace('%', "%%");      // escape % just to be sure
   mirc.replace('\x02', "%B");
index 77fde33..17f5493 100644 (file)
@@ -70,6 +70,8 @@ public:
   inline quint8 flags() const { return _flags; }
   inline QDateTime timestamp() const { return _timestamp; }
 
+  void setFlags(quint8 flags);
+  
   QString formattedTimestamp();
   QString formattedSender();
   QString formattedText();
index c26da15..b3b1683 100644 (file)
@@ -42,12 +42,7 @@ ChatLine::~ChatLine() {
 }
 
 void ChatLine::formatMsg(Message msg) {
-  const Network *net = Client::network(msg.bufferInfo().networkId());
-  if(net) {
-    QRegExp nickRegExp("^(.*\\W)?"+net->myNick()+"(\\W.*)?$");
-    if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text()))
-      isHighlight = true;
-  }
+  isHighlight = msg.flags() & Message::Highlight;
   QTextOption tsOption, senderOption, textOption;
   styledTimeStamp = QtUi::style()->styleString(msg.formattedTimestamp());
   styledSender = QtUi::style()->styleString(msg.formattedSender());
index c3368e5..5b49062 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-02-10";
-  quasselBuild = 497;
+  quasselBuild = 498;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 480;