Some connection handling improvements made for daemon. Changelog updated to newest...
[jenirok] / src / common / connectionmanager.cpp
index d6bddff..dfee7d6 100644 (file)
 #include <icd/dbus_api.h>
 #include "connectionmanager.h"
 
+bool ConnectionManager::connected_ = false;
 
 ConnectionManager::ConnectionManager(QObject* parent): QObject(parent),
 blocking_(true), stateReady_(false), connectionReady_(false), scanReady_(false),
-connected_(false), timeout_(false), numberOfConnections_(0),
+timeout_(false), numberOfConnections_(0),
 scannedConnections_(0), timer_(0), error_(NO_ERROR), connections_(0)
 {
     QDBusConnection systemBus = QDBusConnection::systemBus();
@@ -123,9 +124,13 @@ bool ConnectionManager::connect(QString const& id)
             error_ = UNKNOWN_ERROR;
         }
 
+        connected_ = false;
+
         return false;
     }
 
+    connected_ = true;
+
     return true;
 }
 
@@ -139,6 +144,7 @@ bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType
 
     if(!scanConnections(connections))
     {
+        qDebug() << "Unable to scan connections";
         return false;
     }
 
@@ -200,24 +206,38 @@ bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType
 
 bool ConnectionManager::disconnect(bool force)
 {
-    // Forced disconnect is not allowed if connection
-    // was not initialized by this class
-    if(!connected_ && force)
+    if(force)
     {
-        return false;
+        // Do not allow forced disconnection if connection was not started
+        // by this class.
+        if(!connected_)
+        {
+            return false;
+        }
+
+        QDBusMessage msg = QDBusMessage::createSignal("/com/nokia/icd_ui",
+                                                      "com.nokia.icd_ui",
+                                                      "disconnect");
+
+        QList<QVariant> arguments;
+        bool val = true;
+        arguments.append(QVariant(val));
+        msg.setArguments(arguments);
+
+        bool ret = QDBusConnection::systemBus().send(msg);
+
+        if(ret)
+        {
+            connected_ = false;
+        }
+
+        return ret;
     }
 
     connectionReady_ = false;
     unsigned int flags;
 
-    if(force)
-    {
-        flags = static_cast<unsigned int>(ICD_CONNECTION_FLAG_UI_EVENT);
-    }
-    else
-    {
-        flags = static_cast<unsigned int>(ICD_CONNECTION_FLAG_USER_EVENT);
-    }
+    flags = static_cast<unsigned int>(ICD_CONNECTION_FLAG_USER_EVENT);
 
     icd2interface_->call(ICD_DBUS_API_DISCONNECT_REQ, QVariant(flags));
     connected_ = false;