Fixed a bug that caused wlan connections to not being found in daemon.
[jenirok] / src / common / connectionmanager.cpp
index dfee7d6..4f0d99e 100644 (file)
@@ -29,9 +29,9 @@
 bool ConnectionManager::connected_ = false;
 
 ConnectionManager::ConnectionManager(QObject* parent): QObject(parent),
-blocking_(true), stateReady_(false), connectionReady_(false), scanReady_(false),
+stateReady_(false), connectionReady_(false), scanReady_(false),
 timeout_(false), numberOfConnections_(0),
-scannedConnections_(0), timer_(0), error_(NO_ERROR), connections_(0)
+scannedConnections_(0), timer_(0), searchType_(NO_TYPE), error_(NO_ERROR), connections_(0)
 {
     QDBusConnection systemBus = QDBusConnection::systemBus();
 
@@ -70,24 +70,14 @@ ConnectionManager::~ConnectionManager()
                          this, SLOT(scanResult(const QDBusMessage&)));
 }
 
-void ConnectionManager::setBlocking(bool value)
-{
-    blocking_ = value;
-}
-
 bool ConnectionManager::connect()
 {
     connectionReady_ = false;
     unsigned int flags = static_cast<unsigned int>(ICD_CONNECTION_FLAG_USER_EVENT);
     icd2interface_->call(ICD_DBUS_API_CONNECT_REQ, QVariant(flags));
 
-    if(blocking_)
-    {
-        waitSignal(&connectionReady_);
-        return connected_;
-    }
-
-    return true;
+    waitSignal(&connectionReady_);
+    return connected_;
 }
 
 bool ConnectionManager::connect(ConnectionManager::Connection const& connection)
@@ -136,10 +126,6 @@ bool ConnectionManager::connect(QString const& id)
 
 bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType type)
 {
-    bool blockingValue = blocking_;
-
-    blocking_ = true;
-
     QList<Connection> connections;
 
     if(!scanConnections(connections))
@@ -148,8 +134,6 @@ bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType
         return false;
     }
 
-    blocking_ = blockingValue;
-
     if(connections.size() == 0)
     {
         error_ = NO_AVAILABLE_CONNECTIONS;
@@ -163,27 +147,27 @@ bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType
 
     for(int i = 0; i < connections.size(); i++)
     {
-       switch(connections.at(i).type)
-       {
-       case WLAN:
-           if(type != GPRS && connections.at(i).strength > biggestWlan)
-           {
-               biggestWlan = connections.at(i).strength;
-               bestWlan = i;
-           }
-           break;
-
-       case GPRS:
-           if(type != WLAN && connections.at(i).strength > biggestGprs)
-           {
-               biggestGprs = connections.at(i).strength;
-               bestGprs = i;
-           }
-           break;
-
-       default:
-           qDebug() << "Unknown connection type";
-       }
+        switch(connections.at(i).type)
+        {
+        case WLAN:
+            if(type != GPRS && connections.at(i).strength > biggestWlan)
+            {
+                biggestWlan = connections.at(i).strength;
+                bestWlan = i;
+            }
+            break;
+
+        case GPRS:
+            if(type != WLAN && connections.at(i).strength > biggestGprs)
+            {
+                biggestGprs = connections.at(i).strength;
+                bestGprs = i;
+            }
+            break;
+
+        default:
+            qDebug() << "Unknown connection type";
+        }
     }
 
     if(bestWlan >= 0)
@@ -253,17 +237,11 @@ bool ConnectionManager::isConnected()
 
     if(numOfReplies == 0)
     {
-        emit isConnectedReply(false);
         return false;
     }
 
-    if(blocking_)
-    {
-        waitSignal(&stateReady_);
-        return connected_;
-    }
-
-    return true;
+    waitSignal(&stateReady_);
+    return connected_;
 }
 
 bool ConnectionManager::scanConnections(QList<ConnectionManager::Connection>& connections,
@@ -273,42 +251,24 @@ bool ConnectionManager::scanConnections(QList<ConnectionManager::Connection>& co
     scanReady_ = false;
     scannedConnections_ = 0;
     connections_ = &connections;
-
-    QStringList networks;
-
-    switch(type)
-    {
-    case WLAN:
-        networks << "WLAN_INFRA" << "WLAN_ADHOC";
-        break;
-    case GPRS:
-        networks << "GPRS";
-        break;
-    default:
-        break;
-    }
+    searchType_ = type;
 
     QDBusMessage rep = icd2interface_->call(ICD_DBUS_API_SCAN_REQ,
-                                            QVariant(flags),
-                                            QVariant(networks));
+                                            QVariant(flags));
 
     numberOfConnections_ = rep.arguments().value(0).toList().size();
 
+    // For some reason, during call icd2 doesn't return any connections
+    // it is going to scan. However, it still scans them so use default value
+    // of 2.
     if(numberOfConnections_ == 0)
     {
-        connections_ = 0;
-        qDebug() << "No connections";
-        return false;
-    }
-
-    if(blocking_)
-    {
-        bool ret = waitSignal(&scanReady_);
-        connections_ = 0;
-        return ret;
+        numberOfConnections_ = 2;
     }
 
-    return true;
+    bool ret = waitSignal(&scanReady_);
+    connections_ = 0;
+    return ret;
 }
 
 ConnectionManager::Error ConnectionManager::error() const
@@ -353,11 +313,6 @@ void ConnectionManager::stateChange(const QDBusMessage& rep)
         break;
     }
 
-    if(stateReady_)
-    {
-        emit isConnectedReply(connected_);
-    }
-
 }
 
 void ConnectionManager::connectionChange(const QDBusMessage& rep)
@@ -383,10 +338,6 @@ void ConnectionManager::connectionChange(const QDBusMessage& rep)
         break;
     }
 
-    if(connectionReady_)
-    {
-        emit connectReply(connected_);
-    }
 }
 
 void ConnectionManager::scanResult(const QDBusMessage& rep)
@@ -409,7 +360,6 @@ void ConnectionManager::scanResult(const QDBusMessage& rep)
     {
         scanReady_ = true;
         connections_ = 0;
-        emit scanReady();
         return;
     }
 
@@ -419,18 +369,25 @@ void ConnectionManager::scanResult(const QDBusMessage& rep)
     }
 
     Connection connection;
-    connection.id = QString(args.value(10).toByteArray());
-    connection.name = args.value(8).toString();
-    connection.strength = args.value(11).toInt();
 
     QString type = args.value(7).toString();
 
     if(type == "GPRS")
     {
+        if(searchType_ == WLAN)
+        {
+            return;
+        }
+
         connection.type = GPRS;
     }
     else if(type == "WLAN_INFRA" || type == "WLAN_ADHOC")
     {
+        if(searchType_ == GPRS)
+        {
+            return;
+        }
+
         connection.type = WLAN;
     }
     else
@@ -439,7 +396,9 @@ void ConnectionManager::scanResult(const QDBusMessage& rep)
         return;
     }
 
-    emit newConnection(connection);
+    connection.id = QString(args.value(10).toByteArray());
+    connection.name = args.value(8).toString();
+    connection.strength = args.value(11).toInt();
 
     connections_->push_back(connection);
 }