From d2628aeb6ed1ab30d1a825122dc80cfebb5093d2 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 19 Feb 2014 14:52:07 +1000 Subject: Parse Nokia route response in helper thread. Complex and really long routes can take multiple seconds to parse. Use a helper thread to parse route responses to prevent blocking the main thread. Change-Id: I4130510ff15752427f31b429e53d2ab87fa1b84a Reviewed-by: Alex Blasche --- src/plugins/geoservices/nokia/qgeoroutexmlparser.h | 34 +++++++++++++--------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/plugins/geoservices/nokia/qgeoroutexmlparser.h') diff --git a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h index 466bca5e..7e6307e7 100644 --- a/src/plugins/geoservices/nokia/qgeoroutexmlparser.h +++ b/src/plugins/geoservices/nokia/qgeoroutexmlparser.h @@ -49,16 +49,17 @@ #ifndef QROUTEXMLPARSER_H #define QROUTEXMLPARSER_H -#include -#include -#include +#include +#include +#include +#include -#include -#include -#include +#include +#include +#include QT_BEGIN_NAMESPACE -class QIODevice; + class QXmlStreamReader; class QGeoRoute; class QGeoCoordinate; @@ -92,15 +93,20 @@ public: int baseTime; }; -class QGeoRouteXmlParser +class QGeoRouteXmlParser : public QObject, public QRunnable { + Q_OBJECT + public: QGeoRouteXmlParser(const QGeoRouteRequest &request); ~QGeoRouteXmlParser(); - bool parse(QIODevice *source); - QList results() const; - QString errorString() const; + void parse(const QByteArray &data); + void run(); + +signals: + void results(const QList &routes); + void error(const QString &errorString); private: bool parseRootElement(); @@ -119,12 +125,14 @@ private: bool parseDynamicSpeedInfo(QGeoDynamicSpeedInfoContainer &speedInfo); QGeoRouteRequest m_request; - QScopedPointer m_reader; + QByteArray m_data; + QXmlStreamReader *m_reader; + QList m_results; - QString m_errorString; QList m_maneuvers; QList m_segments; }; QT_END_NAMESPACE + #endif -- cgit v1.2.1