included qca2 into build system
[quassel.git] / src / client / coreconnection.cpp
index 59d3f8f..8ad692e 100644 (file)
@@ -45,6 +45,12 @@ CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent)
   _progressValue(-1)
 {
   qRegisterMetaType<ConnectionState>("CoreConnection::ConnectionState");
+}
+
+void CoreConnection::init() {
+  Client::signalProxy()->setHeartBeatInterval(30);
+  connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected()));
+  connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), SIGNAL(lagUpdated(int)));
 
   _reconnectTimer.setSingleShot(true);
   connect(&_reconnectTimer, SIGNAL(timeout()), SLOT(reconnectTimeout()));
@@ -53,11 +59,6 @@ CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent)
   connect(Solid::Networking::notifier(), SIGNAL(statusChanged(Solid::Networking::Status)),
           SLOT(solidNetworkStatusChanged(Solid::Networking::Status)));
 #endif
-}
-
-void CoreConnection::init() {
-  Client::signalProxy()->setHeartBeatInterval(30);
-  connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected()));
 
   CoreConnectionSettings s;
   s.initAndNotify("PingTimeoutInterval", this, SLOT(pingTimeoutIntervalChanged(QVariant)), 60);
@@ -152,16 +153,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:
@@ -254,7 +255,7 @@ void CoreConnection::coreSocketError(QAbstractSocket::SocketError) {
 }
 
 void CoreConnection::coreSocketDisconnected() {
-  qDebug() << Q_FUNC_INFO;
+  // qDebug() << Q_FUNC_INFO;
   resetConnection(true);
   // FIXME handle disconnects gracefully
 }
@@ -336,6 +337,7 @@ void CoreConnection::resetConnection(bool wantReconnect) {
 
   setProgressMaximum(-1); // disable
   setState(Disconnected);
+  emit lagUpdated(-1);
 
   emit connectionMsg(tr("Disconnected from core."));
   emit encrypted(false);
@@ -472,6 +474,8 @@ void CoreConnection::clientInitAck(const QVariantMap &msg) {
     return;
   }
 
+  Client::setCoreFeatures((Quassel::Features)msg["CoreFeatures"].toUInt());
+
 #ifndef QT_NO_COMPRESS
   if(msg["SupportsCompression"].toBool()) {
     _socket->setProperty("UseCompression", true);
@@ -631,6 +635,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);