X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=ead100d8e5f208ac31620ba3c86a065bc58f9fb1;hp=bab066b09b1f31e8c57211328ec290e787ac44b9;hb=a33e42aee121185f479667b2104a15fc2033762e;hpb=671e451cf1c10a6e3f442af82b58bfc4de0cb5a2 diff --git a/src/common/network.cpp b/src/common/network.cpp index bab066b0..ead100d8 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -208,6 +208,7 @@ void Network::ircUserDestroyed() { QHash::iterator ircUserIter = _ircUsers.begin(); while(ircUserIter != _ircUsers.end()) { if(ircUser == *ircUserIter) { + emit deletedIrcUserRemoved(ircUserIter.key()); ircUserIter = _ircUsers.erase(ircUserIter); break; } @@ -215,6 +216,30 @@ void Network::ircUserDestroyed() { } } +void Network::removeDeletedIrcUser(const QString &username) { + // DO NOT CALL THIS SLOT EVER!!! + + // this slots purpose is only to remove deleted users that haven't been synced yet. + // Reason: + // as a user parting a channel results in it's deletion if it is no longer in any known channel + // this action can only be communicated if the slaves are allready in sync. + // so if such a deleted user isn't synced in slave mode, we kill and remove it. + + Q_ASSERT(proxy()); + + if(!_ircUsers.contains(username)) + return; + + IrcUser *ircUser = _ircUsers[username]; + + if(ircUser->isInitialized()) + return; + + _ircUsers.remove(username); + emit ircUserRemoved(username); + emit ircUserRemoved(ircUser); +} + void Network::removeIrcUser(IrcUser *ircuser) { QString nick = _ircUsers.key(ircuser); if(nick.isNull())