Error message is shown and progress indicator is stopped when routing fails
authorSami Rämö <sami.ramo@ixonos.com>
Fri, 27 Aug 2010 07:06:07 +0000 (10:06 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Fri, 27 Aug 2010 07:06:07 +0000 (10:06 +0300)
src/engine/engine.cpp
src/error.h
src/routing/routingservice.cpp

index 4b7b821..0878053 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "application.h"
 #include "common.h"
-#include "error.h"
+#include "../error.h"
 #include "facebookservice/facebookauthentication.h"
 #include "gps/gpsposition.h"
 #include "map/mapengine.h"
@@ -289,13 +289,16 @@ void SituareEngine::error(const int context, const int error)
         m_ui->toggleProgressIndicator(false);
         m_ui->buildInformationBox(tr("Address server not responding"), true);
         break;
+    case SituareError::ERROR_ROUTING_FAILED:
+        m_ui->toggleProgressIndicator(false);
+        m_ui->buildInformationBox(tr("Routing failed"), true);
+        break;
     default:
         m_ui->toggleProgressIndicator(false);
         if(context == ErrorContext::NETWORK)
             qCritical() << __PRETTY_FUNCTION__ << "QNetworkReply::NetworkError: " << error;
         else
             qCritical() << __PRETTY_FUNCTION__ << "Unknown error: " << error;
-
         break;
     }
 }
@@ -729,6 +732,9 @@ void SituareEngine::signalsFromRoutingService()
 
     connect(m_routingService, SIGNAL(routeParsed(Route&)),
             m_ui, SIGNAL(routeParsed(Route&)));
+
+    connect(m_routingService, SIGNAL(error(int, int)),
+            this, SLOT(error(int, int)));
 }
 
 void SituareEngine::signalsFromSituareService()
index 33e0689..8317c92 100644 (file)
@@ -39,7 +39,8 @@ namespace SituareError {
         INVALID_JSON,               // JSON parsing failed i.e. invalid JSON string
         ERROR_GEOLOCATION_SERVER_UNAVAILABLE = 501, // reverseGeo server not responding
         ERROR_GEOLOCATION_REQUEST_FAIL,             // reverseGeo response failed
-        ERROR_GEOLOCATION_LONLAT_INVALID            // reverseGeo failed, invalid lon/lat
+        ERROR_GEOLOCATION_LONLAT_INVALID,           // reverseGeo failed, invalid lon/lat
+        ERROR_ROUTING_FAILED       // routing failed
     };
 }
 
index ed0842c..1da2b8a 100644 (file)
@@ -34,7 +34,7 @@
 #endif
 
 #include "coordinates/geocoordinate.h"
-#include "error.h"
+#include "../error.h"
 #include "location.h"
 #include "network/networkaccessmanager.h"
 #include "route.h"
@@ -76,44 +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() == 9) {
-                    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);
         }
+
+        emit routeParsed(route);
+    } else {
+        emit error(ErrorContext::SITUARE, SituareError::ERROR_ROUTING_FAILED);
+        qCritical() << __PRETTY_FUNCTION__ << "routing failed, json status_message:"
+                                           << result.value("status_message").toString();
     }
 }