From c35b05ea237cdd24e86bd9153163f0d379f387a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sami=20R=C3=A4m=C3=B6?= Date: Fri, 27 Aug 2010 10:06:07 +0300 Subject: [PATCH] Error message is shown and progress indicator is stopped when routing fails --- src/engine/engine.cpp | 10 ++++-- src/error.h | 3 +- src/routing/routingservice.cpp | 71 ++++++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 38 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 4b7b821..0878053 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -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() diff --git a/src/error.h b/src/error.h index 33e0689..8317c92 100644 --- a/src/error.h +++ b/src/error.h @@ -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 }; } diff --git a/src/routing/routingservice.cpp b/src/routing/routingservice.cpp index ed0842c..1da2b8a 100644 --- a/src/routing/routingservice.cpp +++ b/src/routing/routingservice.cpp @@ -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 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 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(); } } -- 1.7.9.5