summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp
diff options
context:
space:
mode:
authorErik Mattsson <erik.mattsson@appello.com>2013-11-07 13:48:51 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-11 10:51:22 +0100
commit57705a918ae25f6234c75c67ec9b934cbf3fca9a (patch)
tree62978dc0935dcbc40105eca546164f0462822a17 /src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp
parente63de105fe71a0d825f8c82c75f17f65614aeb03 (diff)
downloadqtlocation-57705a918ae25f6234c75c67ec9b934cbf3fca9a.tar.gz
Upgraded Nokia Route API from 6.2 to 7.2
Since the 7.2 API supports many more lanugages(23 compared to 4) and is the only version that supports China it was necessary to upgrade the nokia route plugin to 7.2. The major change is that 7.2 does not support multiple mode parameters which 6.2 did. Now if the user selects multiple route optimizations multiple requests will be made, one for each optimization. Nokia has also reduced the amount of different route modes, only fastest and shortest are supported now. In the response part noting has changed, so no parsing fixes were necessary. Task-number: QTBUG-24808 Change-Id: I256079f9a1e91e11c961849c95b95b712021ace0 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp')
-rw-r--r--src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp77
1 files changed, 42 insertions, 35 deletions
diff --git a/src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp b/src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp
index 663410ad..2245b208 100644
--- a/src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp
+++ b/src/plugins/geoservices/nokia/qgeoroutereply_nokia.cpp
@@ -53,42 +53,47 @@
QT_BEGIN_NAMESPACE
-QGeoRouteReplyNokia::QGeoRouteReplyNokia(const QGeoRouteRequest &request, QNetworkReply *reply, QObject *parent)
+QGeoRouteReplyNokia::QGeoRouteReplyNokia(const QGeoRouteRequest &request, const QList<QNetworkReply*> &replies, QObject *parent)
: QGeoRouteReply(request, parent),
- m_reply(reply)
+ m_replies(replies)
{
- connect(m_reply,
- SIGNAL(finished()),
- this,
- SLOT(networkFinished()));
-
- connect(m_reply,
- SIGNAL(error(QNetworkReply::NetworkError)),
- this,
- SLOT(networkError(QNetworkReply::NetworkError)));
+ foreach (QNetworkReply *reply, m_replies) {
+ connect(reply,
+ SIGNAL(finished()),
+ this,
+ SLOT(networkFinished()));
+
+ connect(reply,
+ SIGNAL(error(QNetworkReply::NetworkError)),
+ this,
+ SLOT(networkError(QNetworkReply::NetworkError)));
+ }
}
QGeoRouteReplyNokia::~QGeoRouteReplyNokia()
{
+ abort();
}
void QGeoRouteReplyNokia::abort()
{
- if (!m_reply)
+ if (m_replies.isEmpty())
return;
- m_reply->abort();
-
- m_reply->deleteLater();
- m_reply = 0;
+ foreach (QNetworkReply *reply, m_replies) {
+ reply->abort();
+ reply->deleteLater();
+ }
+ m_replies.clear();
}
void QGeoRouteReplyNokia::networkFinished()
{
- if (!m_reply)
+ QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+ if (!reply)
return;
- if (m_reply->error() != QNetworkReply::NoError) {
+ if (reply->error() != QNetworkReply::NoError) {
// Removed because this is already done in networkError, which previously caused _two_ errors to be raised for every error.
//setError(QGeoRouteReply::CommunicationError, m_reply->errorString());
//m_reply->deleteLater();
@@ -97,42 +102,44 @@ void QGeoRouteReplyNokia::networkFinished()
}
QGeoRouteXmlParser parser(request());
-
- if (parser.parse(m_reply)) {
- setRoutes(parser.results());
- setFinished(true);
+ if (parser.parse(reply)) {
+ addRoutes(parser.results());
+ reply->deleteLater();
+ m_replies.removeOne(reply);
+ if (m_replies.isEmpty())
+ setFinished(true);
} else {
// add a qWarning with the actual parser.errorString()
setError(QGeoRouteReply::ParseError, "The response from the service was not in a recognisable format.");
+ abort();
}
-
- m_reply->deleteLater();
- m_reply = 0;
}
void QGeoRouteReplyNokia::networkError(QNetworkReply::NetworkError error)
{
Q_UNUSED(error)
- if (!m_reply)
+ QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+ if (!reply)
return;
bool resolvedError = false;
-
if (QNetworkReply::UnknownContentError == error) {
QGeoRouteXmlParser parser(request());
- if (parser.parse(m_reply)) {
- setRoutes(parser.results());
- setFinished(true);
+ if (parser.parse(reply)) {
+ addRoutes(parser.results());
+ reply->deleteLater();
+ m_replies.removeOne(reply);
resolvedError = true;
+ if (m_replies.isEmpty())
+ setFinished(true);
}
}
- if (!resolvedError)
- setError(QGeoRouteReply::CommunicationError, m_reply->errorString());
-
- m_reply->deleteLater();
- m_reply = 0;
+ if (!resolvedError) {
+ setError(QGeoRouteReply::CommunicationError, reply->errorString());
+ abort();
+ }
}
QT_END_NAMESPACE