X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetworkinfo.cpp;h=a6e311a358f5eeaeba8361f8ae08ad2d5db25aa2;hp=8791ffff3ccbc08e1450bf7130157784e8fd91b5;hb=1cad7d10240a398c11af0043720d675e631f016f;hpb=a7f5d6a23f7214b11f6db85346a67fd7d02767da diff --git a/src/common/networkinfo.cpp b/src/common/networkinfo.cpp index 8791ffff..a6e311a3 100644 --- a/src/common/networkinfo.cpp +++ b/src/common/networkinfo.cpp @@ -45,13 +45,13 @@ NetworkInfo::NetworkInfo(const uint &networkid, QObject *parent) } // I think this is unnecessary since IrcUsers have us as their daddy :) -// NetworkInfo::~NetworkInfo() { +//NetworkInfo::~NetworkInfo() { // QHashIterator ircuser(_ircUsers); // while (ircuser.hasNext()) { // ircuser.next(); // delete ircuser.value(); // } -// } +//} uint NetworkInfo::networkId() const { return _networkId; @@ -166,10 +166,14 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { QString nick(nickFromMask(hostmask)); if(!_ircUsers.contains(nick)) { IrcUser *ircuser = new IrcUser(hostmask, this); + qDebug() << "new IrcUser()" << ircuser << hostmask; // mark IrcUser as already initialized to keep the SignalProxy from requesting initData if(initialized()) ircuser->setInitialized(); - _proxy->synchronize(ircuser); + if(proxy()) + proxy()->synchronize(ircuser); + else + qWarning() << "unable to synchronize new IrcUser" << hostmask << "forgot to call NetworkInfo::setProxy(SignalProxy *)?"; connect(ircuser, SIGNAL(nickSet(QString)), this, SLOT(ircUserNickChanged(QString))); connect(ircuser, SIGNAL(initDone()), this, SIGNAL(ircUserInitDone())); @@ -180,6 +184,22 @@ IrcUser *NetworkInfo::newIrcUser(const QString &hostmask) { return _ircUsers[nick]; } +void NetworkInfo::removeIrcUser(IrcUser *ircuser) { + QString nick = _ircUsers.key(ircuser); + if(nick.isNull()) + return; + + _ircUsers.remove(nick); + ircuser->deleteLater(); + emit ircUserRemoved(nick); +} + +void NetworkInfo::removeIrcUser(QString nick) { + IrcUser *ircuser; + if((ircuser = ircUser(nick)) != 0) + removeIrcUser(ircuser); +} + IrcUser *NetworkInfo::ircUser(const QString &nickname) const { if(_ircUsers.contains(nickname)) return _ircUsers[nickname]; @@ -197,7 +217,11 @@ IrcChannel *NetworkInfo::newIrcChannel(const QString &channelname) { // mark IrcUser as already initialized to keep the SignalProxy from requesting initData if(initialized()) channel->setInitialized(); - _proxy->synchronize(channel); + + if(proxy()) + proxy()->synchronize(channel); + else + qWarning() << "unable to synchronize new IrcChannel" << channelname << "forgot to call NetworkInfo::setProxy(SignalProxy *)?"; connect(channel, SIGNAL(initDone()), this, SIGNAL(ircChannelInitDone())); connect(channel, SIGNAL(destroyed()), this, SLOT(channelDestroyed())); @@ -300,10 +324,13 @@ IrcUser *NetworkInfo::updateNickFromMask(const QString &mask) { QString nick(nickFromMask(mask)); IrcUser *ircuser; + qDebug() << "NetworkInfo::updateNickFromMask()" << mask; if(_ircUsers.contains(nick)) { + qDebug() << " is known User"; ircuser = _ircUsers[nick]; ircuser->updateHostmask(mask); } else { + qDebug() << " is new User"; ircuser = newIrcUser(mask); } return ircuser; @@ -324,7 +351,8 @@ void NetworkInfo::ircUserNickChanged(QString newnick) { void NetworkInfo::ircUserDestroyed() { IrcUser *ircuser = static_cast(sender()); Q_ASSERT(ircuser); - _ircUsers.remove(_ircUsers.key(ircuser)); + qDebug() << "NetworkInfo::ircUserDestroyed()" << ircuser; + removeIrcUser(ircuser); } void NetworkInfo::channelDestroyed() { @@ -349,8 +377,8 @@ void NetworkInfo::determinePrefixes() { _prefixes = PREFIX.section(")", 1); _prefixModes = PREFIX.mid(1).section(")", 0, 0); } else { - QString defaultPrefixes("@%+"); - QString defaultPrefixModes("ohv"); + QString defaultPrefixes("~&@%+"); + QString defaultPrefixModes("qaohv"); // we just assume that in PREFIX are only prefix chars stored for(int i = 0; i < defaultPrefixes.size(); i++) {