This should fix a bug resulting in a crash, when a IrcUser object was not destroyed...
[quassel.git] / src / common / networkinfo.cpp
index 75a45c0..a6e311a 100644 (file)
@@ -166,6 +166,7 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
   QString nick(nickFromMask(hostmask));
   if(!_ircUsers.contains(nick)) {
     IrcUser *ircuser = new IrcUser(hostmask, this);
+    qDebug() << "new IrcUser()" << ircuser << hostmask;
     // mark IrcUser as already initialized to keep the SignalProxy from requesting initData
     if(initialized())
       ircuser->setInitialized();
@@ -183,6 +184,22 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) {
   return  _ircUsers[nick];
 }
 
+void NetworkInfo::removeIrcUser(IrcUser *ircuser) {
+  QString nick = _ircUsers.key(ircuser);
+  if(nick.isNull())
+    return;
+
+  _ircUsers.remove(nick);
+  ircuser->deleteLater();
+  emit ircUserRemoved(nick);
+}
+
+void NetworkInfo::removeIrcUser(QString nick) {
+  IrcUser *ircuser;
+  if((ircuser = ircUser(nick)) != 0)
+    removeIrcUser(ircuser);
+}
+
 IrcUser *NetworkInfo::ircUser(const QString &nickname) const {
   if(_ircUsers.contains(nickname))
     return _ircUsers[nickname];
@@ -307,10 +324,13 @@ IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) {
   QString nick(nickFromMask(mask));
   IrcUser *ircuser;
   
+  qDebug() << "NetworkInfo::updateNickFromMask()" << mask;
   if(_ircUsers.contains(nick)) {
+    qDebug() << "  is known User";
     ircuser = _ircUsers[nick];
     ircuser->updateHostmask(mask);
   } else {
+    qDebug() << "  is new User";
     ircuser = newIrcUser(mask);
   }
   return ircuser;
@@ -331,7 +351,8 @@ void NetworkInfo::ircUserNickChanged(QString newnick) {
 void NetworkInfo::ircUserDestroyed() {
   IrcUser *ircuser = static_cast<IrcUser *>(sender());
   Q_ASSERT(ircuser);
-  _ircUsers.remove(_ircUsers.key(ircuser));
+  qDebug() << "NetworkInfo::ircUserDestroyed()" << ircuser;
+  removeIrcUser(ircuser);
 }
 
 void NetworkInfo::channelDestroyed() {
@@ -356,8 +377,8 @@ void NetworkInfo::determinePrefixes() {
     _prefixes = PREFIX.section(")", 1);
     _prefixModes = PREFIX.mid(1).section(")", 0, 0);
   } else {
-    QString defaultPrefixes("@%+");
-    QString defaultPrefixModes("ohv");
+    QString defaultPrefixes("~&@%+");
+    QString defaultPrefixModes("qaohv");
 
     // we just assume that in PREFIX are only prefix chars stored
     for(int i = 0; i < defaultPrefixes.size(); i++) {