X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetworkinfo.cpp;h=8791ffff3ccbc08e1450bf7130157784e8fd91b5;hp=114287aca32240b5228582f19ed1f37fd2d305a9;hb=a7f5d6a23f7214b11f6db85346a67fd7d02767da;hpb=902c95728306e5ba115de84800fc8d5d239c9d62 diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 114287ac..8791ffff 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -20,7 +20,6 @@ #include "networkinfo.h" #include "signalproxy.h" -#include "synchronizer.h" #include "ircuser.h" #include "ircchannel.h" @@ -31,7 +30,7 @@ // ==================== // Public: // ==================== -NetworkInfo::NetworkInfo(const uint &networkid, SignalProxy *proxy, QObject *parent) +NetworkInfo::NetworkInfo(const uint &networkid, QObject *parent) : QObject(parent), _networkId(networkid), _initialized(false), @@ -39,10 +38,10 @@ NetworkInfo::NetworkInfo(const uint &networkid, SignalProxy *proxy, QObject *par _networkName(QString()), _currentServer(QString()), _prefixes(QString()), - _prefixModes(QString()) + _prefixModes(QString()), + _proxy(NULL) { setObjectName(QString::number(networkid)); - _synchronizer = new Synchronizer(this, proxy); } // I think this is unnecessary since IrcUsers have us as their daddy :) @@ -62,8 +61,13 @@ bool NetworkInfo::initialized() const { return _initialized; } -Synchronizer *NetworkInfo::synchronizer() { - return _synchronizer; +SignalProxy *NetworkInfo::proxy() const { + return _proxy; +} + +void NetworkInfo::setProxy(SignalProxy *proxy) { + _proxy = proxy; + proxy->synchronize(this); } bool NetworkInfo::isMyNick(const QString &nick) const { @@ -162,7 +166,11 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { QString nick(nickFromMask(hostmask)); if(!_ircUsers.contains(nick)) { IrcUser *ircuser = new IrcUser(hostmask, this); - new Synchronizer(ircuser, synchronizer()->proxy()); + // mark IrcUser as already initialized to keep the SignalProxy from requesting initData + if(initialized()) + ircuser->setInitialized(); + _proxy->synchronize(ircuser); + connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickChanged(QString))); connect(ircuser, SIGNAL(initDone()), this, SIGNAL(ircUserInitDone())); connect(ircuser, SIGNAL(destroyed()), this, SLOT(ircUserDestroyed())); @@ -186,7 +194,11 @@ QList NetworkInfo::ircUsers() const { IrcChannel *NetworkInfo::newIrcChannel(const QString &channelname) { if(!_ircChannels.contains(channelname)) { IrcChannel *channel = new IrcChannel(channelname, this); - new Synchronizer(channel, synchronizer()->proxy()); + // mark IrcUser as already initialized to keep the SignalProxy from requesting initData + if(initialized()) + channel->setInitialized(); + _proxy->synchronize(channel); + connect(channel, SIGNAL(initDone()), this, SIGNAL(ircChannelInitDone())); connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); _ircChannels[channelname] = channel; @@ -299,6 +311,7 @@ IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) { void NetworkInfo::ircUserNickChanged(QString newnick) { QString oldnick = _ircUsers.key(qobject_cast(sender())); + if(oldnick.isNull()) return; @@ -309,27 +322,15 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { } void NetworkInfo::ircUserDestroyed() { - IrcUser *ircuser = qobject_cast(sender()); - QHash::iterator i = _ircUsers.begin(); - while(i != _ircUsers.end()) { - if(i.value() == ircuser) { - i = _ircUsers.erase(i); - } else { - i++; - } - } + IrcUser *ircuser = static_cast(sender()); + Q_ASSERT(ircuser); + _ircUsers.remove(_ircUsers.key(ircuser)); } void NetworkInfo::channelDestroyed() { - IrcChannel *channel = qobject_cast(sender()); - QHash::iterator i = _ircChannels.begin(); - while(i != _ircChannels.end()) { - if(i.value() == channel) { - i = _ircChannels.erase(i); - } else { - i++; - } - } + IrcChannel *channel = static_cast(sender()); + Q_ASSERT(channel); + _ircChannels.remove(_ircChannels.key(channel)); } void NetworkInfo::setInitialized() {