X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetworkinfo.cpp;h=a6e311a358f5eeaeba8361f8ae08ad2d5db25aa2;hp=0ef2f1f69749bb56965ef64bbc8462bdca18b570;hb=1cad7d10240a398c11af0043720d675e631f016f;hpb=69952553cf2f5248a0c7e964d6d5844065d26612 diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 0ef2f1f6..a6e311a3 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -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,12 +184,20 @@ 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) { - ircuser->deleteLater(); - emit ircUserRemoved(nick); - } + if((ircuser = ircUser(nick)) != 0) + removeIrcUser(ircuser); } IrcUser *NetworkInfo::ircUser(const QString &nickname) const { @@ -315,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; @@ -339,9 +351,8 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { void NetworkInfo::ircUserDestroyed() { IrcUser *ircuser = static_cast(sender()); Q_ASSERT(ircuser); - QString nick = _ircUsers.key(ircuser); - _ircUsers.remove(nick); - emit ircUserRemoved(nick); + qDebug() << "NetworkInfo::ircUserDestroyed()" << ircuser; + removeIrcUser(ircuser); } void NetworkInfo::channelDestroyed() {