_autoWhoEnabled(true),
_autoWhoInterval(90),
_autoWhoNickLimit(0), // unlimited
- _autoWhoDelay(3)
+ _autoWhoDelay(5)
{
_autoReconnectTimer.setSingleShot(true);
_socketCloseTimer.setSingleShot(true);
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);
}
}
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;
}
_autoWhoCycleTimer.stop();
_autoWhoTimer.stop();
_autoWhoQueue.clear();
- _autoWhoInProgress.clear();
+ _autoWhoPending.clear();
_socketCloseTimer.stop();
}
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
inline QString channelKey(const QString &channel) const { return _channelKeys.value(channel.toLower(), QString()); }
- inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoInProgress.value(channel.toLower(), 0); }
+ inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoPending.value(channel.toLower(), 0); }
inline UserId userId() const { return _coreSession->user(); }
bool _autoWhoEnabled;
QStringList _autoWhoQueue;
- QHash<QString, int> _autoWhoInProgress;
+ QHash<QString, int> _autoWhoPending;
int _autoWhoInterval;
int _autoWhoNickLimit;
int _autoWhoDelay;