Fixed projects to build in Simulator
[situare] / src / routing / routingservice.cpp
index 2008490..7ef20d6 100644 (file)
    USA.
 */
 
+#include <qjson/parser.h>
+
+#include <QCryptographicHash>
 #include <QDebug>
-#include <QtGlobal>
-#include <QStringList>
 #include <QNetworkReply>
-#include <QCryptographicHash>
+#include <QStringList>
+#include <QtGlobal>
 
 #if defined(Q_WS_MAEMO_5) & defined(ARMEL)
 #include <QDBusInterface>
 #include <QDBusMessage>
 #endif
 
-#include "common.h"
 #include "coordinates/geocoordinate.h"
-#include "parser.h"
+#include "../error.h"
 #include "location.h"
 #include "network/networkaccessmanager.h"
 #include "route.h"
@@ -53,10 +54,6 @@ const int NO_ERROR = 0;
 const QString CLOUDMADE_AUTH_PART = "http://auth.cloudmade.com/token/";
 const QString CLOUDMADE_API_KEY = "0cea0072adbf42ce823f4c78b974f12d";
 
-// geocode
-const QString GEOCODE = "http://maps.google.com/maps/api/geocode/json?address=";
-
-
 RoutingService::RoutingService(QObject *parent)
         : QObject(parent)
 {
@@ -79,91 +76,45 @@ void RoutingService::parseRouteData(const QByteArray &jsonReply)
     bool ok;
     QVariantMap result = parser.parse (jsonReply, &ok).toMap();
     if (!ok) {
-        emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
+        emit error(ErrorContext::SITUARE, SituareError::ERROR_ROUTING_FAILED);
         return;
-    } else {
-        if(result.value("status").toInt() == NO_ERROR) {
-            QVariant routeSummary = result.value("route_summary");
-            QMap<QString, QVariant> routeSummaryMap = routeSummary.toMap();
-
-            Route route;
-            route.setEndPointName(routeSummaryMap["end_point"].toString());
-            route.setStartPointName(routeSummaryMap["start_point"].toString());
-            route.setTotalDistance(routeSummaryMap["total_distance"].toInt());
-            route.setTotalTime(routeSummaryMap["total_time"].toInt());
-
-            foreach(QVariant routeGeometry, result["route_geometry"].toList()) {
-                QStringList list = routeGeometry.toStringList();
-                route.appendGeometryPoint(GeoCoordinate(list.at(0).toDouble(),
-                                                        list.at(1).toDouble()));
-            }
+    } else if(result.value("status").toInt() == NO_ERROR) {
+        QVariant routeSummary = result.value("route_summary");
+        QMap<QString, QVariant> routeSummaryMap = routeSummary.toMap();
+
+        Route route;
+        route.setEndPointName(routeSummaryMap["end_point"].toString());
+        route.setStartPointName(routeSummaryMap["start_point"].toString());
+        route.setTotalDistance(routeSummaryMap["total_distance"].toInt());
+        route.setTotalTime(routeSummaryMap["total_time"].toInt());
+
+        foreach(QVariant routeGeometry, result["route_geometry"].toList()) {
+            QStringList list = routeGeometry.toStringList();
+            route.appendGeometryPoint(GeoCoordinate(list.at(0).toDouble(), list.at(1).toDouble()));
+        }
 
-            foreach(QVariant routeInstructions, result["route_instructions"].toList()) {
-                QStringList list = routeInstructions.toStringList();
-                RouteSegment segment;
-                segment.setInstruction(list.at(0));
-                segment.setLength(list.at(1).toDouble());
-                segment.setPositionIndex(list.at(2).toInt());
-                segment.setTime(list.at(3).toInt());
-                segment.setLengthCaption(list.at(4));
-                segment.setEarthDirection(list.at(5));
-                segment.setAzimuth(list.at(6).toDouble());
-                if (list.count() == 8) {
-                    segment.setTurnType(list.at(7));
-                    segment.setTurnAngle(list.at(8).toDouble());
-                }
-                route.appendSegment(segment);
+        foreach(QVariant routeInstructions, result["route_instructions"].toList()) {
+            QStringList list = routeInstructions.toStringList();
+            RouteSegment segment;
+            segment.setInstruction(list.at(0));
+            segment.setLength(list.at(1).toDouble());
+            segment.setPositionIndex(list.at(2).toInt());
+            segment.setTime(list.at(3).toInt());
+            segment.setLengthCaption(list.at(4));
+            segment.setEarthDirection(list.at(5));
+            segment.setAzimuth(list.at(6).toDouble());
+            if (list.count() == 9) {
+                segment.setTurnType(list.at(7));
+                segment.setTurnAngle(list.at(8).toDouble());
             }
-
-            emit routeParsed(route);
+            route.appendSegment(segment);
         }
-    }
-}
-
-void RoutingService::parseSearchResults(const QByteArray &jsonReply)
-{
-    qDebug() << __PRETTY_FUNCTION__;
-
-    const QString NO_DATA = "ZERO_RESULTS";
 
-    m_searchResults.clear();
-
-    QJson::Parser parser;
-    bool ok;
-    QVariantMap result = parser.parse (jsonReply, &ok).toMap();
-    if (!ok) {
-        emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
-        return;
+        emit routeParsed(route);
     } else {
-        if(result.value("status") != NO_DATA) {
-            foreach(QVariant hitVariant, result["results"].toList()) {
-                Location location;
-                QMap<QString, QVariant> hitMap = hitVariant.toMap();
-
-                location.setFormattedAddress(hitMap["formatted_address"].toString());
-
-                QVariant geometryVariant = hitMap["geometry"];
-                QMap<QString, QVariant> geometryMap = geometryVariant.toMap();
-                QVariant locationVariant = geometryMap["location"];
-                QMap<QString, QVariant> locationMap = locationVariant.toMap();
-                location.setCoordinates(locationMap["lat"].toDouble(),
-                                        locationMap["lng"].toDouble());
-
-                QVariant boundsVariant = geometryMap["viewport"];
-                QMap<QString, QVariant> boundsMap = boundsVariant.toMap();
-                QVariant swVariant = boundsMap["southwest"];
-                QMap<QString, QVariant> swMap = swVariant.toMap();
-                location.setSWBound(swMap["lat"].toDouble(),
-                                    swMap["lng"].toDouble());
-                QVariant neVariant = boundsMap["northeast"];
-                QMap<QString, QVariant> neMap = neVariant.toMap();
-                location.setNEBound(neMap["lat"].toDouble(),
-                                    neMap["lng"].toDouble());
-
-                m_searchResults.append(location);
-            }
-            emit locationDataParsed(m_searchResults);
-        }
+        emit error(ErrorContext::SITUARE, SituareError::ERROR_ROUTING_FAILED);
+        qCritical() << __PRETTY_FUNCTION__ << "routing failed, json status_message:"
+                                           << result.value("status_message").toString();
     }
 }
 
@@ -208,43 +159,23 @@ void RoutingService::requestFinished(QNetworkReply *reply)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_currentRequests.contains(reply)) {
-
-        QByteArray replyArray = reply->readAll();
-        qDebug() << "Reply from: " << reply->url() << "reply " << replyArray;
-
-        if (reply->error()) {
-            emit error(ErrorContext::NETWORK, reply->error());
-        } else if(reply->url().toString().contains(CLOUDMADE_AUTH_PART)) {
-            m_token = replyArray;
-            m_pendingRequest.append(m_token);
-            sendRequest(m_pendingRequest);
-            m_pendingRequest.clear();
-        } else if(reply->url().toString().contains(GEOCODE)) {
-            parseSearchResults(replyArray);
-        } else {
-            parseRouteData(replyArray);
-        }
+    QByteArray replyArray = reply->readAll();
 
-        m_currentRequests.removeAll(reply);
-        reply->deleteLater();
+    if (reply->error()) {
+        emit error(ErrorContext::NETWORK, reply->error());
+    } else if(reply->url().toString().contains(CLOUDMADE_AUTH_PART)) {
+        m_token = replyArray;
+        m_pendingRequest.append(m_token);
+        sendRequest(m_pendingRequest);
+        m_pendingRequest.clear();
+    } else {
+        parseRouteData(replyArray);
     }
-}
-
-void RoutingService::requestLocation(QString location)
-{
-    qDebug() << __PRETTY_FUNCTION__;
 
-    const QString urlEnd = "&sensor=false";
-
-    QString url = GEOCODE;
-    url.append(location);
-    url.append(urlEnd);
-
-    sendRequest(url);
+    reply->deleteLater();
 }
 
-void RoutingService::requestRoute(GeoCoordinate from, GeoCoordinate to)
+void RoutingService::requestRoute(const GeoCoordinate &from, const GeoCoordinate &to)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
@@ -274,7 +205,5 @@ void RoutingService::sendRequest(const QUrl &url)
     request.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false);
 
     QByteArray ba;
-    QNetworkReply *reply = m_networkManager->post(request, ba, false);
-
-    m_currentRequests.append(reply);
+    m_networkManager->post(request, ba, false);
 }