+bool ConnectionManager::getBestConnection(Connection& connection)
+{
+ bool blockingValue = blocking_;
+
+ blocking_ = true;
+
+ QList<Connection> connections;
+
+ if(!scanConnections(connections))
+ {
+ return false;
+ }
+
+ blocking_ = blockingValue;
+
+ if(connections.size() == 0)
+ {
+ qDebug() << "No connections";
+ error_ = NO_AVAILABLE_CONNECTIONS;
+ return false;
+ }
+
+ int biggestWlan = -1;
+ int biggestGprs = -1;
+ int bestWlan = -1;
+ int bestGprs = -1;
+
+ for(int i = 0; i < connections.size(); i++)
+ {
+ switch(connections.at(i).type)
+ {
+ case WLAN:
+ if(connections.at(i).strength > biggestWlan)
+ {
+ biggestWlan = connections.at(i).strength;
+ bestWlan = i;
+ }
+ break;
+
+ case GPRS:
+ if(connections.at(i).strength > biggestGprs)
+ {
+ biggestGprs = connections.at(i).strength;
+ bestGprs = i;
+ }
+ break;
+
+ default:
+ qDebug() << "Unknown connection type";
+ }
+ }
+
+ if(bestWlan >= 0)
+ {
+ connection = connections.at(bestWlan);
+ return true;
+ }
+ else if(bestGprs >= 0)
+ {
+ connection = connections.at(bestGprs);
+ return true;
+ }
+ else
+ {
+ error_ = NO_AVAILABLE_CONNECTIONS;
+ return false;
+ }
+
+}
+
+bool ConnectionManager::autoConnect()
+{
+ Connection best;
+
+ if(!getBestConnection(best))
+ {
+ return false;
+ }
+
+ qDebug() << "Best connection: " << best.name;
+
+ return connect(best.id);
+
+}
+