This should fix a bug resulting in a crash, when a IrcUser object was not destroyed...
[quassel.git] / src / core / ircserverhandler.cpp
index dab5882..d83e420 100644 (file)
@@ -153,7 +153,7 @@ void IrcServerHandler::handleJoin(QString prefix, QStringList params) {
   QString channel = params[0];
   IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
   emit displayMsg(Message::Join, channel, channel, prefix);
-
+  qDebug() << "IrcServerHandler::handleJoin()" << prefix << params;
   ircuser->joinChannel(channel);
 }
 
@@ -257,35 +257,35 @@ void IrcServerHandler::handlePing(QString prefix, QStringList params) {
 
 void IrcServerHandler::handlePrivmsg(QString prefix, QStringList params) {
   networkInfo()->updateNickFromMask(prefix);
-  Q_ASSERT(params.count() >= 2);
   if(params.count()<2)
-    emit displayMsg(Message::Plain, params[0], "", prefix);
-  else {
-    // it's possible to pack multiple privmsgs into one param using ctcp
-    QStringList messages = server->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, params[0], params[1]);
-
-    // are we the target or is it a channel?
-    if(networkInfo()->isMyNick(params[0])) {
-      foreach(QString message, messages) {
-        if(!message.isEmpty()) {
-          emit displayMsg(Message::Plain, "", message, prefix, Message::PrivMsg);
-        }
+    params << QString("");
+  
+  // it's possible to pack multiple privmsgs into one param using ctcp
+  QStringList messages = server->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, params[0], params[1]);
+  
+  // are we the target or is it a channel?
+  if(networkInfo()->isMyNick(params[0])) {
+    foreach(QString message, messages) {
+      if(!message.isEmpty()) {
+       emit displayMsg(Message::Plain, "", message, prefix, Message::PrivMsg);
       }
-   
-    } else {
-      Q_ASSERT(isChannelName(params[0]));  // should be channel!
-      foreach(QString message, messages) {
-        if(!message.isEmpty()) {
-          emit displayMsg(Message::Plain, params[0], message, prefix);
-        }
+    }
+    
+  } else {
+    Q_ASSERT(isChannelName(params[0]));  // should be channel!
+    foreach(QString message, messages) {
+      if(!message.isEmpty()) {
+       emit displayMsg(Message::Plain, params[0], message, prefix);
       }
     }
   }
+
 }
 
 void IrcServerHandler::handleQuit(QString prefix, QStringList params) {
   IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
   Q_ASSERT(ircuser);
+  qDebug() << "IrcServerHandler:handleQuit" << prefix << params;
 
   QString msg;
   if(params.count())
@@ -293,8 +293,8 @@ void IrcServerHandler::handleQuit(QString prefix, QStringList params) {
   
   foreach(QString channel, ircuser->channels())
     emit displayMsg(Message::Quit, channel, msg, prefix);
-
-  ircuser->deleteLater();
+  
+  networkInfo()->removeIrcUser(nickFromMask(prefix));
 }
 
 void IrcServerHandler::handleTopic(QString prefix, QStringList params) {
@@ -379,7 +379,7 @@ void IrcServerHandler::handle353(QString prefix, QStringList params) {
       mode = networkInfo()->prefixToMode(nick[0]);
       nick = nick.mid(1);
     }
-    
+
     IrcUser *ircuser = networkInfo()->newIrcUser(nick);
     ircuser->joinChannel(channelname);