From 9ec2fa87650607337f1692b7bc52e16cc3f74860 Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Wed, 28 Nov 2018 14:15:31 +0100 Subject: Allow QGeoCodeReplyPrivate to be subclassed and carry extra data Stored in form of a variant map. Currently used for debugging purposes. Change-Id: I49fa4b51da0d5947e3b292b6cde96cb496cef9e6 Reviewed-by: Alex Blasche --- .../declarativemaps/qdeclarativegeocodemodel.cpp | 2 ++ src/location/doc/src/plugins/osm.qdoc | 2 ++ src/location/maps/qgeocodereply.cpp | 22 ++++++++++++++++++++++ src/location/maps/qgeocodereply.h | 2 ++ src/location/maps/qgeocodereply_p.h | 10 ++++++++-- src/plugins/geoservices/osm/qgeocodereplyosm.cpp | 19 ++++++++++++++++++- src/plugins/geoservices/osm/qgeocodereplyosm.h | 12 ++++++++++++ .../geoservices/osm/qgeocodingmanagerengineosm.cpp | 16 +++++++++++++++- .../geoservices/osm/qgeocodingmanagerengineosm.h | 1 + 9 files changed, 82 insertions(+), 4 deletions(-) diff --git a/src/location/declarativemaps/qdeclarativegeocodemodel.cpp b/src/location/declarativemaps/qdeclarativegeocodemodel.cpp index 43ce95a9..a73f9341 100644 --- a/src/location/declarativemaps/qdeclarativegeocodemodel.cpp +++ b/src/location/declarativemaps/qdeclarativegeocodemodel.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include QT_BEGIN_NAMESPACE @@ -389,6 +390,7 @@ void QDeclarativeGeocodeModel::geocodeFinished(QGeoCodeReply *reply) reply->deleteLater(); reply_ = 0; int oldCount = declarativeLocations_.count(); + // const QVariantMap &extraData = QGeoCodeReplyPrivate::get(*reply)->extraData(); setLocations(reply->locations()); setError(NoError, QString()); setStatus(QDeclarativeGeocodeModel::Ready); diff --git a/src/location/doc/src/plugins/osm.qdoc b/src/location/doc/src/plugins/osm.qdoc index 649d3bed..9e0a9842 100644 --- a/src/location/doc/src/plugins/osm.qdoc +++ b/src/location/doc/src/plugins/osm.qdoc @@ -69,6 +69,8 @@ a prefix. \li Url string set when making network requests to the geocoding server. This parameter should be set to a valid server url with the correct osm API. If not specified the default \l {http://nominatim.openstreetmap.org/}{url} will be used. \note The API documentation is available at \l {https://wiki.openstreetmap.org/wiki/Nominatim}{Project OSM Nominatim}. + \li osm.geocoding.debug_query + \li Instructs the plugin to inject the query url to nominatim into the geocode reply, for debugging purposes. \row \li osm.mapping.cache.directory \li Absolute path to map tile cache directory used as network disk cache. diff --git a/src/location/maps/qgeocodereply.cpp b/src/location/maps/qgeocodereply.cpp index 5fefb6fe..9fbede9c 100644 --- a/src/location/maps/qgeocodereply.cpp +++ b/src/location/maps/qgeocodereply.cpp @@ -97,6 +97,13 @@ QGeoCodeReply::QGeoCodeReply(QObject *parent) : QObject(parent), d_ptr(new QGeoCodeReplyPrivate()) {} +QGeoCodeReply::QGeoCodeReply(QGeoCodeReplyPrivate &dd, QObject *parent) + : QObject(parent), + d_ptr(&dd) +{ + +} + /*! Constructs a geocode reply with a given \a error and \a errorString and the specified \a parent. */ @@ -335,4 +342,19 @@ QGeoCodeReplyPrivate::QGeoCodeReplyPrivate(QGeoCodeReply::Error error, const QSt QGeoCodeReplyPrivate::~QGeoCodeReplyPrivate() {} +QVariantMap QGeoCodeReplyPrivate::extraData() const +{ + return QVariantMap(); +} + +const QGeoCodeReplyPrivate *QGeoCodeReplyPrivate::get(const QGeoCodeReply &reply) +{ + return reply.d_ptr; +} + +QGeoCodeReplyPrivate *QGeoCodeReplyPrivate::get(QGeoCodeReply &reply) +{ + return reply.d_ptr; +} + QT_END_NAMESPACE diff --git a/src/location/maps/qgeocodereply.h b/src/location/maps/qgeocodereply.h index c41e740d..c2395f10 100644 --- a/src/location/maps/qgeocodereply.h +++ b/src/location/maps/qgeocodereply.h @@ -85,6 +85,7 @@ Q_SIGNALS: protected: explicit QGeoCodeReply(QObject *parent = nullptr); + explicit QGeoCodeReply(QGeoCodeReplyPrivate &dd, QObject *parent = nullptr); void setError(Error error, const QString &errorString); void setFinished(bool finished); @@ -99,6 +100,7 @@ protected: private: QGeoCodeReplyPrivate *d_ptr; Q_DISABLE_COPY(QGeoCodeReply) + friend class QGeoCodeReplyPrivate; }; QT_END_NAMESPACE diff --git a/src/location/maps/qgeocodereply_p.h b/src/location/maps/qgeocodereply_p.h index fefe7883..3f77497b 100644 --- a/src/location/maps/qgeocodereply_p.h +++ b/src/location/maps/qgeocodereply_p.h @@ -48,22 +48,28 @@ // We mean it. // +#include #include "qgeocodereply.h" #include "qgeoshape.h" #include +#include QT_BEGIN_NAMESPACE class QGeoLocation; -class QGeoCodeReplyPrivate +class Q_LOCATION_PRIVATE_EXPORT QGeoCodeReplyPrivate { public: QGeoCodeReplyPrivate(); QGeoCodeReplyPrivate(QGeoCodeReply::Error error, const QString &errorString); - ~QGeoCodeReplyPrivate(); + virtual ~QGeoCodeReplyPrivate(); + + virtual QVariantMap extraData() const; + static const QGeoCodeReplyPrivate *get(const QGeoCodeReply &reply); + static QGeoCodeReplyPrivate *get(QGeoCodeReply &reply); QGeoCodeReply::Error error; QString errorString; diff --git a/src/plugins/geoservices/osm/qgeocodereplyosm.cpp b/src/plugins/geoservices/osm/qgeocodereplyosm.cpp index a30601d0..11bdaa6c 100644 --- a/src/plugins/geoservices/osm/qgeocodereplyosm.cpp +++ b/src/plugins/geoservices/osm/qgeocodereplyosm.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE QGeoCodeReplyOsm::QGeoCodeReplyOsm(QNetworkReply *reply, QObject *parent) -: QGeoCodeReply(parent) +: QGeoCodeReply(*new QGeoCodeReplyOsmPrivate, parent) { if (!reply) { setError(UnknownError, QStringLiteral("Null reply")); @@ -171,4 +171,21 @@ void QGeoCodeReplyOsm::networkReplyError(QNetworkReply::NetworkError error) setError(QGeoCodeReply::CommunicationError, reply->errorString()); } +QGeoCodeReplyOsmPrivate::QGeoCodeReplyOsmPrivate() +{ + +} + +QGeoCodeReplyOsmPrivate::~QGeoCodeReplyOsmPrivate() +{ + +} + +QVariantMap QGeoCodeReplyOsmPrivate::extraData() const +{ + return m_extraData; +} + QT_END_NAMESPACE + + diff --git a/src/plugins/geoservices/osm/qgeocodereplyosm.h b/src/plugins/geoservices/osm/qgeocodereplyosm.h index 0847f58c..b81b8b84 100644 --- a/src/plugins/geoservices/osm/qgeocodereplyosm.h +++ b/src/plugins/geoservices/osm/qgeocodereplyosm.h @@ -42,6 +42,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -58,6 +59,17 @@ private Q_SLOTS: void networkReplyError(QNetworkReply::NetworkError error); }; +class QGeoCodeReplyOsmPrivate : public QGeoCodeReplyPrivate +{ +public: + QGeoCodeReplyOsmPrivate(); + ~QGeoCodeReplyOsmPrivate(); + QVariantMap extraData() const override; + + bool m_includeGeometry = false; + QVariantMap m_extraData; +}; + QT_END_NAMESPACE #endif // QGEOCODEREPLYOSM_H diff --git a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp index d7751287..9403cfa8 100644 --- a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp +++ b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qgeocodingmanagerengineosm.h" -#include "qgeocodereplyosm.h" #include #include @@ -50,6 +49,8 @@ #include #include #include +#include "qgeocodereplyosm.h" + QT_BEGIN_NAMESPACE @@ -85,6 +86,9 @@ QGeoCodingManagerEngineOsm::QGeoCodingManagerEngineOsm(const QVariantMap ¶me else m_urlPrefix = QStringLiteral("https://nominatim.openstreetmap.org"); + if (parameters.contains(QStringLiteral("osm.geocoding.debug_query"))) + m_debugQuery = parameters.value(QStringLiteral("osm.geocoding.debug_query")).toBool(); + *error = QGeoServiceProvider::NoError; errorString->clear(); } @@ -126,6 +130,11 @@ QGeoCodeReply *QGeoCodingManagerEngineOsm::geocode(const QString &address, int l QNetworkReply *reply = m_networkManager->get(request); QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, this); + if (m_debugQuery) { + QGeoCodeReplyOsmPrivate *replyPrivate + = static_cast(QGeoCodeReplyPrivate::get(*geocodeReply)); + replyPrivate->m_extraData["request_url"] = url; + } connect(geocodeReply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(geocodeReply, SIGNAL(error(QGeoCodeReply::Error,QString)), @@ -157,6 +166,11 @@ QGeoCodeReply *QGeoCodingManagerEngineOsm::reverseGeocode(const QGeoCoordinate & QNetworkReply *reply = m_networkManager->get(request); QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, this); + if (m_debugQuery) { + QGeoCodeReplyOsmPrivate *replyPrivate + = static_cast(QGeoCodeReplyPrivate::get(*geocodeReply)); + replyPrivate->m_extraData["request_url"] = url; + } connect(geocodeReply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(geocodeReply, SIGNAL(error(QGeoCodeReply::Error,QString)), diff --git a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h index 0fec49de..2bc15715 100644 --- a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h +++ b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h @@ -71,6 +71,7 @@ private: QNetworkAccessManager *m_networkManager; QByteArray m_userAgent; QString m_urlPrefix; + bool m_debugQuery = false; }; QT_END_NAMESPACE -- cgit v1.2.1