made Highlighting work (needs core restart)
[quassel.git] / src / core / ircserverhandler.cpp
index d701441..2f9c013 100644 (file)
@@ -308,10 +308,12 @@ void IrcServerHandler::handlePrivmsg(QString prefix, QList<QByteArray> params) {
   if(network()->isMyNick(target)) {
     // it's possible to pack multiple privmsgs into one param using ctcp
     QStringList messages = networkConnection->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, target, userDecode(ircuser->nick(), params[1]));
+    quint8 flags;
     foreach(QString message, messages) {
-      if(!message.isEmpty()) {
-       emit displayMsg(Message::Plain, "", message, prefix, Message::PrivMsg);
-      }
+      flags = Message::PrivMsg;
+      if(message.contains(network()->myNick()))
+       flags |= Message::Highlight;
+      emit displayMsg(Message::Plain, "", message, prefix, flags);
     }
   } else {
     // so it's probably a channel..
@@ -321,8 +323,13 @@ void IrcServerHandler::handlePrivmsg(QString prefix, QList<QByteArray> params) {
     }
 
     QStringList messages = networkConnection->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, target, bufferDecode(target, params[1]));
-    foreach(QString message, messages)
-      emit displayMsg(Message::Plain, target, message, prefix);
+    quint8 flags;
+    foreach(QString message, messages) {
+      flags = Message::None;
+      if(message.contains(network()->myNick()))
+       flags |= Message::Highlight;
+      emit displayMsg(Message::Plain, target, message, prefix, flags);
+    }
   }
 
 }
@@ -444,7 +451,7 @@ void IrcServerHandler::handle432(QString prefix, QList<QByteArray> params) {
   } else {
     QString errnick = params[0];
     emit displayMsg(Message::Error, "", tr("Nick %1 contains illegal characters").arg(errnick));
-    handle433(prefix, params);
+    tryNextNick(errnick);
   }
 }
 
@@ -452,13 +459,18 @@ void IrcServerHandler::handle432(QString prefix, QList<QByteArray> params) {
 void IrcServerHandler::handle433(QString prefix, QList<QByteArray> params) {
   Q_UNUSED(prefix);
 
-  // if there is a problem while connecting to the server -> we handle it
+  QString errnick = serverDecode(params[0]);
+  emit displayMsg(Message::Error, "", tr("Nick already in use: %1").arg(errnick));
 
+  // if there is a problem while connecting to the server -> we handle it
   // but only if our connection has not been finished yet...
   if(!networkConnection->network()->currentServer().isEmpty())
     return;
-  
-  QString errnick = serverDecode(params[0]);
+
+  tryNextNick(errnick);
+}
+
+void IrcServerHandler::tryNextNick(const QString &errnick) {
   QStringList desiredNicks = networkConnection->coreSession()->identity(networkConnection->network()->identity())->nicks();
   int nextNick = desiredNicks.indexOf(errnick) + 1;
   if(desiredNicks.size() > nextNick) {
@@ -466,9 +478,9 @@ void IrcServerHandler::handle433(QString prefix, QList<QByteArray> params) {
   } else {
     emit displayMsg(Message::Error, "", tr("No free and valid nicks in nicklist found. use: /nick <othernick> to continue"));
   }
-  
 }
 
+
 /***********************************************************************************/