diff options
author | Vladimir Bezkorovainyi <vladimir.bezkorovainyi@nokia.com> | 2012-05-24 19:02:47 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-04 13:52:43 +0200 |
commit | 8b5dee29df22155b3dedf32861053db299112094 (patch) | |
tree | 5680a21d52e5d29664439caef8c1807493c481d6 /src | |
parent | 81ee36a1a88c0430ce54318b8ef82987158038f7 (diff) | |
download | qtlocation-8b5dee29df22155b3dedf32861053db299112094.tar.gz |
Populate error information if required parameters (app_id and token) are absent.
Change-Id: Ia110416b1cd64425abcb3ebcf79209b635050b0b
Reviewed-by: Jean Gressmann <jean.gressmann@nokia.com>
Diffstat (limited to 'src')
3 files changed, 50 insertions, 76 deletions
diff --git a/src/imports/location/qdeclarativegeocodemodel.cpp b/src/imports/location/qdeclarativegeocodemodel.cpp index 1b783bae..4e8ece13 100644 --- a/src/imports/location/qdeclarativegeocodemodel.cpp +++ b/src/imports/location/qdeclarativegeocodemodel.cpp @@ -41,8 +41,8 @@ #include "qdeclarativegeocodemodel_p.h" #include "error_messages.h" - #include "qdeclarativegeolocation_p.h" + #include <QtQml/qqmlinfo.h> #include <qgeoserviceprovider.h> diff --git a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp b/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp index 1b8920b4..1f68b69e 100644 --- a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp +++ b/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.cpp @@ -54,53 +54,72 @@ #include "qplacemanagerengine_nokiav1.h" #include "qplacemanagerengine_nokiav2.h" #include "qgeointrinsicnetworkaccessmanager.h" +#include "qgeoerror_messages.h" #include <QtPlugin> #include <QNetworkProxy> +#include <QCoreApplication> QT_BEGIN_NAMESPACE -static bool isValidParameter(const QString ¶m) +namespace { - if (param.isEmpty()) - return false; - - if (param.length() > 512) - return false; + bool isValidParameter(const QString ¶m) + { + if (param.isEmpty()) + return false; - foreach (QChar c, param) { - if (!c.isLetterOrNumber() && c.toLatin1() != '%' && c.toLatin1() != '-' && - c.toLatin1() != '+' && c.toLatin1() != '_') { + if (param.length() > 512) return false; + + foreach (QChar c, param) { + if (!c.isLetterOrNumber() && c.toLatin1() != '%' && c.toLatin1() != '-' && + c.toLatin1() != '+' && c.toLatin1() != '_') { + return false; + } } + return true; } - return true; -} + QGeoNetworkAccessManager *tryGetNetworkAccessManager(const QVariantMap ¶meters) + { + return static_cast<QGeoNetworkAccessManager *>(qvariant_cast<void *>(parameters.value(QStringLiteral("nam")))); + } -static QGeoNetworkAccessManager *tryGetNetworkAccessManager(const QVariantMap ¶meters) -{ - return static_cast<QGeoNetworkAccessManager *>(qvariant_cast<void *>(parameters.value(QStringLiteral("nam")))); -} + void checkUsageTerms(const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) + { + const QString appId = parameters.value(QLatin1String("app_id")).toString(); + const QString token = parameters.value(QLatin1String("token")).toString(); -QGeoServiceProviderFactoryNokia::QGeoServiceProviderFactoryNokia() - : m_informedAboutUsageTerms(false) -{} + if (!isValidParameter(appId) || !isValidParameter(token)) { -QGeoServiceProviderFactoryNokia::~QGeoServiceProviderFactoryNokia() {} + *error = QGeoServiceProvider::MissingRequiredParameterError; + *errorString = QCoreApplication::translate(NOKIA_PLUGIN_CONTEXT_NAME, MISSED_CREDENTIALS); + } + } + + template<class TInstance> + TInstance * CreateInstanceOf(const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) + { + checkUsageTerms(parameters, error, errorString); + + if (*error != QGeoServiceProvider::NoError) + return 0; + + QGeoNetworkAccessManager *networkManager = tryGetNetworkAccessManager(parameters); + if (!networkManager) + networkManager = new QGeoIntrinsicNetworkAccessManager(parameters); + + return new TInstance(networkManager, parameters, error, errorString); + } +} QGeocodingManagerEngine *QGeoServiceProviderFactoryNokia::createGeocodingManagerEngine( const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const { - informOnceAboutUsageTermsIfNecessary(parameters); - - QGeoNetworkAccessManager *networkManager = tryGetNetworkAccessManager(parameters); - if (!networkManager) - networkManager = new QGeoIntrinsicNetworkAccessManager(parameters); - - return new QGeocodingManagerEngineNokia(networkManager, parameters, error, errorString); + return CreateInstanceOf<QGeocodingManagerEngineNokia>(parameters, error, errorString); } QGeoMappingManagerEngine *QGeoServiceProviderFactoryNokia::createMappingManagerEngine( @@ -108,13 +127,7 @@ QGeoMappingManagerEngine *QGeoServiceProviderFactoryNokia::createMappingManagerE QGeoServiceProvider::Error *error, QString *errorString) const { - informOnceAboutUsageTermsIfNecessary(parameters); - - QGeoNetworkAccessManager *networkManager = tryGetNetworkAccessManager(parameters); - if (!networkManager) - networkManager = new QGeoIntrinsicNetworkAccessManager(parameters, QStringLiteral("mapping.proxy")); - - return new QGeoTiledMappingManagerEngineNokia(networkManager, parameters, error, errorString); + return CreateInstanceOf<QGeoTiledMappingManagerEngineNokia>(parameters, error, errorString); } QGeoRoutingManagerEngine *QGeoServiceProviderFactoryNokia::createRoutingManagerEngine( @@ -122,13 +135,7 @@ QGeoRoutingManagerEngine *QGeoServiceProviderFactoryNokia::createRoutingManagerE QGeoServiceProvider::Error *error, QString *errorString) const { - informOnceAboutUsageTermsIfNecessary(parameters); - - QGeoNetworkAccessManager *networkManager = tryGetNetworkAccessManager(parameters); - if (!networkManager) - networkManager = new QGeoIntrinsicNetworkAccessManager(parameters, QStringLiteral("routing.proxy")); - - return new QGeoRoutingManagerEngineNokia(networkManager, parameters, error, errorString); + return CreateInstanceOf<QGeoRoutingManagerEngineNokia>(parameters, error, errorString); } QPlaceManagerEngine *QGeoServiceProviderFactoryNokia::createPlaceManagerEngine( @@ -136,38 +143,13 @@ QPlaceManagerEngine *QGeoServiceProviderFactoryNokia::createPlaceManagerEngine( QGeoServiceProvider::Error *error, QString *errorString) const { - informOnceAboutUsageTermsIfNecessary(parameters); - - QGeoNetworkAccessManager *networkManager = tryGetNetworkAccessManager(parameters); - if (!networkManager) - networkManager = new QGeoIntrinsicNetworkAccessManager(parameters, QStringLiteral("places.proxy")); - switch (parameters.value(QLatin1String("places.api_version"), 2).toUInt()) { case 1: - return new QPlaceManagerEngineNokiaV1(networkManager, parameters, error, errorString); + return CreateInstanceOf<QPlaceManagerEngineNokiaV1>(parameters, error, errorString); case 2: - return new QPlaceManagerEngineNokiaV2(networkManager, parameters, error, errorString); + return CreateInstanceOf<QPlaceManagerEngineNokiaV2>(parameters, error, errorString); } - return 0; } -void QGeoServiceProviderFactoryNokia::informOnceAboutUsageTermsIfNecessary( - const QVariantMap ¶meters) const -{ - if (m_informedAboutUsageTerms) - return; - - const QString appId = parameters.value(QLatin1String("app_id")).toString(); - const QString token = parameters.value(QLatin1String("token")).toString(); - - if (!isValidParameter(appId) || !isValidParameter(token)) { - m_informedAboutUsageTerms = true; - qWarning() << "****************************************************************************"; - qWarning() << "* Qt Location requires usage of app_id and token parameters obtained from: *"; - qWarning() << "* https://api.developer.nokia.com/ *"; - qWarning() << "****************************************************************************"; - } -} - QT_END_NAMESPACE diff --git a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.h b/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.h index 4af3bcb4..38d43b02 100644 --- a/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.h +++ b/src/plugins/geoservices/nokia/qgeoserviceproviderplugin_nokia.h @@ -64,9 +64,6 @@ class QGeoServiceProviderFactoryNokia : public QObject, public QGeoServiceProvid FILE "nokia_plugin.json") public: - QGeoServiceProviderFactoryNokia(); - ~QGeoServiceProviderFactoryNokia(); - QGeocodingManagerEngine *createGeocodingManagerEngine(const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const; @@ -79,11 +76,6 @@ public: QPlaceManagerEngine *createPlaceManagerEngine(const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString) const; -private: - void informOnceAboutUsageTermsIfNecessary(const QVariantMap ¶meters) const; - -private: - mutable bool m_informedAboutUsageTerms; }; QT_END_NAMESPACE |