Switch some dirty hacking to using real infrastructure. A Chatline now contains three...
[quassel.git] / src / core / ctcphandler.cpp
index e6b5344..ba48964 100644 (file)
@@ -94,7 +94,7 @@ void CtcpHandler::parse(Message::Type messageType, const QString &prefix, const
     ? CtcpReply
     : CtcpQuery;
   
-  quint8 flags = (messageType == Message::Notice && !network()->isChannelName(target))
+  Message::Flags flags = (messageType == Message::Notice && !network()->isChannelName(target))
     ? Message::Redirected
     : Message::None;
 
@@ -107,15 +107,26 @@ void CtcpHandler::parse(Message::Type messageType, const QString &prefix, const
       displayMsg(messageType, target, userDecode(target, dequotedMessage.left(xdelimPos)), prefix, flags);
 
     xdelimEndPos = dequotedMessage.indexOf(XDELIM, xdelimPos + 1);
-    
+    if(xdelimEndPos == -1) {
+      // no matching end delimiter found... treat rest of the message as ctcp
+      xdelimEndPos = dequotedMessage.count();
+    }
     ctcp = xdelimDequote(dequotedMessage.mid(xdelimPos + 1, xdelimEndPos - xdelimPos - 1));
     dequotedMessage = dequotedMessage.mid(xdelimEndPos + 1);
-    
+
     //dispatch the ctcp command
-    spacePos = ctcp.indexOf(' ');
     QString ctcpcmd = userDecode(target, ctcp.left(spacePos));
     QString ctcpparam = userDecode(target, ctcp.mid(spacePos + 1));
 
+    spacePos = ctcp.indexOf(' ');
+    if(spacePos != -1) {
+      ctcpcmd = userDecode(target, ctcp.left(spacePos));
+      ctcpparam = userDecode(target, ctcp.mid(spacePos + 1));
+    } else {
+      ctcpcmd = userDecode(target, ctcp);
+      ctcpparam = QString();
+    }
+
     handle(ctcpcmd, Q_ARG(CtcpType, ctcptype), Q_ARG(QString, prefix), Q_ARG(QString, target), Q_ARG(QString, ctcpparam));
   }
   
@@ -164,7 +175,6 @@ void CtcpHandler::handlePing(CtcpType ctcptype, const QString &prefix, const QSt
 void CtcpHandler::handleVersion(CtcpType ctcptype, const QString &prefix, const QString &target, const QString &param) {
   Q_UNUSED(target)
   if(ctcptype == CtcpQuery) {
-    // FIXME use real Info about quassel :)
     reply(nickFromMask(prefix), "VERSION", QString("Quassel IRC (v%1 build >= %2) -- http://www.quassel-irc.org")
         .arg(Global::quasselVersion).arg(Global::quasselBuild));
     emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP VERSION request by %1").arg(prefix));