Fix includes
[quassel.git] / src / client / coreconnection.cpp
index f523914..717fff3 100644 (file)
@@ -42,7 +42,9 @@ CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent)
   _wantReconnect(false),
   _progressMinimum(0),
   _progressMaximum(-1),
-  _progressValue(-1)
+  _progressValue(-1),
+  _wasReconnect(false),
+  _requestedDisconnect(false)
 {
   qRegisterMetaType<ConnectionState>("CoreConnection::ConnectionState");
 }
@@ -153,16 +155,16 @@ void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status)
   switch(status) {
   case Solid::Networking::Unknown:
   case Solid::Networking::Connected:
-    qDebug() << "Solid: Network status changed to connected or unknown";
+    //qDebug() << "Solid: Network status changed to connected or unknown";
     if(state() == Disconnected) {
       if(_wantReconnect && s.autoReconnect()) {
         reconnectToCore();
       }
     }
     break;
+  case Solid::Networking::Disconnecting:
   case Solid::Networking::Unconnected:
-    qDebug() << "Solid: Disconnected";
-    if(!isLocalConnection())
+    if(state() != Disconnected && !isLocalConnection())
       disconnectFromCore(tr("Network is down"), true);
     break;
   default:
@@ -255,7 +257,8 @@ void CoreConnection::coreSocketError(QAbstractSocket::SocketError) {
 }
 
 void CoreConnection::coreSocketDisconnected() {
-  qDebug() << Q_FUNC_INFO;
+  // qDebug() << Q_FUNC_INFO;
+  _wasReconnect = !_requestedDisconnect;
   resetConnection(true);
   // FIXME handle disconnects gracefully
 }
@@ -304,6 +307,7 @@ void CoreConnection::coreHasData() {
 }
 
 void CoreConnection::disconnectFromCore() {
+  _requestedDisconnect = true;
   disconnectFromCore(QString(), false);  // requested disconnect, so don't try to reconnect
 }
 
@@ -311,6 +315,8 @@ void CoreConnection::disconnectFromCore(const QString &errorString, bool wantRec
   if(!wantReconnect)
     _reconnectTimer.stop();
 
+  _wasReconnect = wantReconnect; // store if disconnect was requested
+
   if(errorString.isEmpty())
     emit connectionError(tr("Disconnected"));
   else
@@ -328,6 +334,7 @@ void CoreConnection::resetConnection(bool wantReconnect) {
     _socket->deleteLater();
     _socket = 0;
   }
+  _requestedDisconnect = false;
   _blockSize = 0;
 
   _coreMsgBuffer.clear();
@@ -635,6 +642,9 @@ void CoreConnection::internalSessionStateReceived(const QVariant &packedState) {
 }
 
 void CoreConnection::syncToCore(const QVariantMap &sessionState) {
+  if(sessionState.contains("CoreFeatures"))
+    Client::setCoreFeatures((Quassel::Features)sessionState["CoreFeatures"].toUInt());
+
   setProgressText(tr("Receiving network states"));
   updateProgress(0, 100);