first version of backend migration interface
[quassel.git] / src / core / corenetwork.cpp
index 32888ec..4da6dbd 100644 (file)
@@ -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