The Networksettings are now stored purely in the Database.
[quassel.git] / src / client / client.cpp
index e09684b..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,24 +381,24 @@ void Client::networkDestroyed() {
   }
 }
 
-void Client::recvMessage(const Message &msg) {
+void Client::recvMessage(const Message &message) {
+  Message msg = message;
+  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 +419,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 +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);
+  }
+}