From 99445d2c7ce2f5336798098963f4954eaafebdde Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Wed, 28 Nov 2007 17:55:36 +0000 Subject: [PATCH] This _should_ fix the bug, that users quitting the network won't be propagated to the nicklist. Can't test it, since the nicklist doesn't currently work on Mac OS (the issue seems to be even before or in NickModel::setIrcChannel()) --- src/common/ircchannel.cpp | 5 ++--- src/common/ircchannel.h | 1 - src/common/networkinfo.cpp | 12 +++++++++++- src/common/networkinfo.h | 3 +++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/common/ircchannel.cpp b/src/common/ircchannel.cpp index 577270d6..cff2e751 100644 --- a/src/common/ircchannel.cpp +++ b/src/common/ircchannel.cpp @@ -56,7 +56,7 @@ bool IrcChannel::isKnownUser(IrcUser *ircuser) const { isknown = false; } - if(!_userModes.contains(ircuser) && ircuser) { + if(!_userModes.contains(ircuser)) { qWarning() << "Channel" << name() << "received data for unknown User" << ircuser->nick(); isknown = false; } @@ -207,9 +207,8 @@ void IrcChannel::initSetUserModes(const QVariantMap &usermodes) { void IrcChannel::ircUserDestroyed() { IrcUser *ircUser = static_cast(sender()); Q_ASSERT(ircUser); - emit ircUserParted(ircUser); - emit ircUserDestroyed(ircUser); _userModes.remove(ircUser); + emit ircUserParted(ircUser); } void IrcChannel::ircUserNickSet(QString nick) { diff --git a/src/common/ircchannel.h b/src/common/ircchannel.h index 6dab1e20..c66bf2b0 100644 --- a/src/common/ircchannel.h +++ b/src/common/ircchannel.h @@ -90,7 +90,6 @@ signals: void ircUserJoined(IrcUser *ircuser); void ircUserParted(IrcUser *ircuser); - void ircUserDestroyed(IrcUser *ircuser); void ircUserNickSet(IrcUser *ircuser, QString nick); void ircUserModeAdded(IrcUser *ircuser, QString mode); void ircUserModeRemoved(IrcUser *ircuser, QString mode); diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 5690a264..0ef2f1f6 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -183,6 +183,14 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { return _ircUsers[nick]; } +void NetworkInfo::removeIrcUser(QString nick) { + IrcUser *ircuser; + if((ircuser = ircUser(nick)) != 0) { + ircuser->deleteLater(); + emit ircUserRemoved(nick); + } +} + IrcUser *NetworkInfo::ircUser(const QString &nickname) const { if(_ircUsers.contains(nickname)) return _ircUsers[nickname]; @@ -331,7 +339,9 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { void NetworkInfo::ircUserDestroyed() { IrcUser *ircuser = static_cast(sender()); Q_ASSERT(ircuser); - _ircUsers.remove(_ircUsers.key(ircuser)); + QString nick = _ircUsers.key(ircuser); + _ircUsers.remove(nick); + emit ircUserRemoved(nick); } void NetworkInfo::channelDestroyed() { diff --git a/src/common/networkinfo.h b/src/common/networkinfo.h index 776c7b77..f767603d 100644 --- a/src/common/networkinfo.h +++ b/src/common/networkinfo.h @@ -89,6 +89,7 @@ public slots: void removeSupport(const QString ¶m); inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); } + void removeIrcUser(QString nick); //init geters QVariantMap initSupports() const; @@ -122,6 +123,8 @@ signals: void ircUserAdded(QString hostmask); void ircChannelAdded(QString channelname); + void ircUserRemoved(QString nick); + void initDone(); void ircUserInitDone(); void ircChannelInitDone(); -- 2.20.1