X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=fa87a30bbd8d8542afb7debb85a48b633341623c;hb=d1c517f3be0e4457f363f74a474a8a47bdd4a5cf;hp=17db37d97ea29a457648b29c648aa320345ba88d;hpb=4aca5963302eb2f6dfc41b723df4b362704f1b2b;p=quassel.git diff --git a/src/common/network.cpp b/src/common/network.cpp index 17db37d9..fa87a30b 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -241,7 +241,18 @@ void Network::removeIrcUser(IrcUser *ircuser) { ircuser->deleteLater(); } -void Network::removeIrcUser(QString nick) { +void Network::removeChansAndUsers() { + QList users = ircUsers(); + foreach(IrcUser *user, users) { + removeIrcUser(user); + } + QList channels = ircChannels(); + foreach(IrcChannel *channel, channels) { + removeIrcChannel(channel); + } +} + +void Network::removeIrcUser(const QString &nick) { IrcUser *ircuser; if((ircuser = ircUser(nick)) != 0) removeIrcUser(ircuser); @@ -367,6 +378,8 @@ void Network::setCurrentServer(const QString ¤tServer) { void Network::setConnected(bool connected) { _connected = connected; + if(!connected) + removeChansAndUsers(); emit connectedSet(connected); } @@ -497,6 +510,24 @@ void Network::ircChannelInitDone() { emit ircChannelInitDone(ircchannel); } +void Network::removeIrcChannel(IrcChannel *channel) { + QString chanName = _ircChannels.key(channel); + if(chanName.isNull()) + return; + + _ircChannels.remove(chanName); + disconnect(channel, 0, this, 0); + emit ircChannelRemoved(chanName); + emit ircChannelRemoved(channel); + channel->deleteLater(); +} + +void Network::removeIrcChannel(const QString &channel) { + IrcChannel *chan; + if((chan = ircChannel(channel)) != 0) + removeIrcChannel(chan); +} + void Network::channelDestroyed() { IrcChannel *channel = static_cast(sender()); Q_ASSERT(channel);