The Networksettings are now stored purely in the Database.
[quassel.git] / src / client / client.cpp
index 9e22ce0..2ad6ffa 100644 (file)
@@ -76,6 +76,8 @@ void Client::init() {
   _networkModel = new NetworkModel(this);
   connect(this, SIGNAL(bufferUpdated(BufferInfo)),
           _networkModel, SLOT(bufferUpdated(BufferInfo)));
+  connect(this, SIGNAL(networkRemoved(NetworkId)),
+         _networkModel, SLOT(networkRemoved(NetworkId)));
 
   _bufferModel = new BufferModel(_networkModel);
 
@@ -379,11 +381,24 @@ void Client::networkDestroyed() {
   }
 }
 
-void Client::recvMessage(const Message &msg) {
-  Buffer *b = buffer(msg.bufferInfo());
+void Client::recvMessage(const Message &message) {
+  Message msg = message;
+  Buffer *b;
+  
+  if(msg.type() == Message::Error) {
+    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());
+    }
+  } else {
+    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
@@ -404,8 +419,9 @@ 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);
+    networkModel()->updateBufferActivity(msg);
     if(!layoutQueue.contains(b)) layoutQueue.append(b);
   }
   if(layoutQueue.count() && !layoutTimer->isActive()) layoutTimer->start();
@@ -426,3 +442,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);
+  }
+}