X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.cpp;h=db15d2538deec2915738a6074a35a653bf6bc3cd;hb=a1bcca1c86e88406a0c5495b08731e6b11dd987e;hp=b1a17a664f957b9e6424b9d6435ed352004269fb;hpb=da3aa4136fe01e142238f0f42fe1273481037b9d;p=quassel.git diff --git a/src/common/network.cpp b/src/common/network.cpp index b1a17a66..db15d253 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -280,9 +280,7 @@ IrcUser *Network::newIrcUser(const QString &hostmask) { QString nick(nickFromMask(hostmask).toLower()); if(!_ircUsers.contains(nick)) { IrcUser *ircuser = new IrcUser(hostmask, this); - // mark IrcUser as already initialized to keep the SignalProxy from requesting initData - //if(isInitialized()) - // ircuser->setInitialized(); + if(proxy()) proxy()->synchronize(ircuser); else @@ -290,6 +288,7 @@ IrcUser *Network::newIrcUser(const QString &hostmask) { connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickChanged(QString))); connect(ircuser, SIGNAL(initDone()), this, SLOT(ircUserInitDone())); + connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); _ircUsers[nick] = ircuser; emit ircUserAdded(hostmask); emit ircUserAdded(ircuser); @@ -301,6 +300,21 @@ IrcUser *Network::newIrcUser(const QByteArray &hostmask) { return newIrcUser(decodeServerString(hostmask)); } +void Network::ircUserDestroyed() { + IrcUser *ircUser = static_cast(sender()); + if(!ircUser) + return; + + QHash::iterator ircUserIter = _ircUsers.begin(); + while(ircUserIter != _ircUsers.end()) { + if(ircUser == *ircUserIter) { + ircUserIter = _ircUsers.erase(ircUserIter); + break; + } + ircUserIter++; + } +} + void Network::removeIrcUser(IrcUser *ircuser) { QString nick = _ircUsers.key(ircuser); if(nick.isNull()) @@ -313,6 +327,12 @@ void Network::removeIrcUser(IrcUser *ircuser) { ircuser->deleteLater(); } +void Network::removeIrcUser(const QString &nick) { + IrcUser *ircuser; + if((ircuser = ircUser(nick)) != 0) + removeIrcUser(ircuser); +} + void Network::removeChansAndUsers() { QList users = ircUsers(); foreach(IrcUser *user, users) { @@ -324,12 +344,6 @@ void Network::removeChansAndUsers() { } } -void Network::removeIrcUser(const QString &nick) { - IrcUser *ircuser; - if((ircuser = ircUser(nick)) != 0) - removeIrcUser(ircuser); -} - IrcUser *Network::ircUser(QString nickname) const { nickname = nickname.toLower(); if(_ircUsers.contains(nickname)) @@ -353,9 +367,6 @@ quint32 Network::ircUserCount() const { IrcChannel *Network::newIrcChannel(const QString &channelname) { if(!_ircChannels.contains(channelname.toLower())) { IrcChannel *channel = new IrcChannel(channelname, this); - // mark IrcUser as already initialized to keep the SignalProxy from requesting initData - //if(isInitialized()) - // channel->setInitialized(); if(proxy()) proxy()->synchronize(channel); @@ -628,15 +639,13 @@ QStringList Network::initIrcUsers() const { } QStringList Network::initIrcChannels() const { - return _ircChannels.keys(); -} - -QStringList Network::initPersistentChannels() const { - QStringList list; - foreach(QString chan, _persistentChannels.keys()) { - list << QString("%1/%2").arg(chan).arg(_persistentChannels.value(chan)); + QStringList channels; + QHash::const_iterator iter = _ircChannels.constBegin(); + while(iter != _ircChannels.constEnd()) { + channels << iter.value()->name(); + iter++; } - return list; + return channels; } void Network::initSetSupports(const QVariantMap &supports) { @@ -660,38 +669,12 @@ void Network::initSetIrcUsers(const QStringList &hostmasks) { } void Network::initSetIrcChannels(const QStringList &channels) { - // FIXME This does not work correctly, "received data for unknown User" triggers - // So we disable this for now - return; - if(!_ircChannels.empty()) return; foreach(QString channel, channels) newIrcChannel(channel); } -void Network::initSetPersistentChannels(const QStringList &channels) { - foreach(QString chan, channels) { - QStringList l = chan.split("/"); - _persistentChannels[l[0]] = l[1]; - } -} - -void Network::addPersistentChannel(const QString &channel, const QString &key) { - _persistentChannels[channel.toLower()] = key; - emit persistentChannelAdded(channel, key); -} - -void Network::removePersistentChannel(const QString &channel) { - _persistentChannels.remove(channel.toLower()); - emit persistentChannelRemoved(channel); -} - -void Network::setPersistentChannelKey(const QString &channel, const QString &key) { - _persistentChannels[channel.toLower()] = key; - emit persistentChannelKeySet(channel, key); -} - IrcUser *Network::updateNickFromMask(const QString &mask) { QString nick(nickFromMask(mask).toLower()); IrcUser *ircuser;