X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.cpp;h=4da6dbd9855c787ec964ce04f81071dc8782a56e;hp=32888ecf1c615943fd5b4769246c139af4aaa230;hb=0775b2fab5e91cbf3b40caa575d1ee44b6686350;hpb=7687144347370b830d3b8957bd223acb629fee83 diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 32888ecf..4da6dbd9 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -46,7 +46,7 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) _autoWhoEnabled(true), _autoWhoInterval(90), _autoWhoNickLimit(0), // unlimited - _autoWhoDelay(3) + _autoWhoDelay(5) { _autoReconnectTimer.setSingleShot(true); _socketCloseTimer.setSingleShot(true); @@ -257,7 +257,7 @@ void CoreNetwork::setChannelJoined(const QString &channel) { void CoreNetwork::setChannelParted(const QString &channel) { removeChannelKey(channel); _autoWhoQueue.removeAll(channel.toLower()); - _autoWhoInProgress.remove(channel.toLower()); + _autoWhoPending.remove(channel.toLower()); Core::setChannelPersistent(userId(), networkId(), channel, false); } @@ -275,9 +275,11 @@ void CoreNetwork::removeChannelKey(const QString &channel) { } bool CoreNetwork::setAutoWhoDone(const QString &channel) { - if(_autoWhoInProgress.value(channel.toLower(), 0) <= 0) + QString chan = channel.toLower(); + if(_autoWhoPending.value(chan, 0) <= 0) return false; - _autoWhoInProgress[channel.toLower()]--; + if(--_autoWhoPending[chan] <= 0) + _autoWhoPending.remove(chan); return true; } @@ -301,7 +303,7 @@ void CoreNetwork::socketError(QAbstractSocket::SocketError error) { _previousConnectionAttemptFailed = true; qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString())); emit connectionError(socket.errorString()); - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString())); + displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString())); emitConnectionError(socket.errorString()); if(socket.state() < QAbstractSocket::ConnectedState) { socketDisconnected(); @@ -331,7 +333,14 @@ void CoreNetwork::socketInitialized() { if(!server.password.isEmpty()) { putRawLine(serverEncode(QString("PASS %1").arg(server.password))); } - putRawLine(serverEncode(QString("NICK :%1").arg(identity->nicks()[0]))); + QString nick; + if(identity->nicks().isEmpty()) { + nick = "quassel"; + qWarning() << "CoreNetwork::socketInitialized(): no nicks supplied for identity Id" << identity->id(); + } else { + nick = identity->nicks()[0]; + } + putRawLine(serverEncode(QString("NICK :%1").arg(nick))); putRawLine(serverEncode(QString("USER %1 8 * :%2").arg(identity->ident(), identity->realName()))); } @@ -341,7 +350,7 @@ void CoreNetwork::socketDisconnected() { _autoWhoCycleTimer.stop(); _autoWhoTimer.stop(); _autoWhoQueue.clear(); - _autoWhoInProgress.clear(); + _autoWhoPending.clear(); _socketCloseTimer.stop(); @@ -350,7 +359,7 @@ void CoreNetwork::socketDisconnected() { IrcUser *me_ = me(); if(me_) { foreach(QString channel, me_->channels()) - emit displayMsg(Message::Quit, BufferInfo::ChannelBuffer, channel, _quitReason, me_->hostmask()); + displayMsg(Message::Quit, BufferInfo::ChannelBuffer, channel, _quitReason, me_->hostmask()); } setConnected(false); @@ -536,12 +545,16 @@ void CoreNetwork::disablePingTimeout() { } void CoreNetwork::sendAutoWho() { + // Don't send autowho if there are still some pending + if(_autoWhoPending.count()) + return; + while(!_autoWhoQueue.isEmpty()) { QString chan = _autoWhoQueue.takeFirst(); IrcChannel *ircchan = ircChannel(chan); if(!ircchan) continue; if(_autoWhoNickLimit > 0 && ircchan->ircUsers().count() > _autoWhoNickLimit) continue; - _autoWhoInProgress[chan]++; + _autoWhoPending[chan]++; putRawLine("WHO " + serverEncode(chan)); if(_autoWhoQueue.isEmpty() && _autoWhoEnabled && !_autoWhoCycleTimer.isActive()) { // Timer was stopped, means a new cycle is due immediately