diff options
Diffstat (limited to 'src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp')
-rw-r--r-- | src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp | 129 |
1 files changed, 76 insertions, 53 deletions
diff --git a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp index 94a087e8..41f1c73e 100644 --- a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp +++ b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp @@ -57,6 +57,7 @@ #include <QtCore/QJsonArray> #include <QtLocation/QPlaceIcon> #include <QtLocation/QPlaceResult> +#include <QtLocation/QProposedSearchResult> #include <QtCore/QDebug> @@ -123,85 +124,107 @@ void QPlaceSearchReplyImpl::replyFinished() QJsonObject object = document.object(); //QJsonObject searchObject = object.value(QLatin1String("search")).toObject(); - QJsonArray items; - if (request().recommendationId().isEmpty()) { - QJsonObject resultsObject = object.value(QLatin1String("results")).toObject(); - items = resultsObject.value(QLatin1String("items")).toArray(); - } else { - items = object.value(QLatin1String("items")).toArray(); - } + + QJsonObject resultsObject = object.value(QLatin1String("results")).toObject(); + QJsonArray items = resultsObject.value(QLatin1String("items")).toArray(); QList<QPlaceSearchResult> results; for (int i = 0; i < items.count(); ++i) { QJsonObject item = items.at(i).toObject(); - QPlaceResult result; + const QString type = item.value(QLatin1String("type")).toString(); + if (type == QStringLiteral("urn:nlp-types:place")) + results.append(parsePlaceResult(item)); + else if (type == QStringLiteral("urn:nlp-types:search")) + results.append(parseSearchResult(item)); + } - if (item.contains(QLatin1String("distance"))) - result.setDistance(item.value(QLatin1String("distance")).toDouble()); + setResults(results); - QPlace place; + m_reply->deleteLater(); + m_reply = 0; - QGeoLocation location; + setFinished(true); + emit finished(); +} - location.setCoordinate(parseCoordinate(item.value(QLatin1String("position")).toArray())); +QPlaceResult QPlaceSearchReplyImpl::parsePlaceResult(const QJsonObject &item) const +{ + QPlaceResult result; - const QString vicinity = item.value(QLatin1String("vicinity")).toString(); - QGeoAddress address; - address.setText(vicinity); - location.setAddress(address); + if (item.contains(QLatin1String("distance"))) + result.setDistance(item.value(QLatin1String("distance")).toDouble()); - if (item.contains(QLatin1String("bbox"))) { - QJsonArray bbox = item.value(QLatin1String("bbox")).toArray(); - QGeoRectangle box(QGeoCoordinate(bbox.at(3).toDouble(), bbox.at(0).toDouble()), - QGeoCoordinate(bbox.at(1).toDouble(), bbox.at(2).toDouble())); - location.setBoundingBox(box); - } + QPlace place; - place.setLocation(location); + QGeoLocation location; - QPlaceRatings ratings; - ratings.setAverage(item.value(QLatin1String("averageRating")).toDouble()); - ratings.setMaximum(5.0); - place.setRatings(ratings); + location.setCoordinate(parseCoordinate(item.value(QLatin1String("position")).toArray())); - const QString title = item.value(QLatin1String("title")).toString(); - place.setName(title); - result.setTitle(title); + const QString vicinity = item.value(QLatin1String("vicinity")).toString(); + QGeoAddress address; + address.setText(vicinity); + location.setAddress(address); - QPlaceIcon icon = m_engine->icon(item.value(QLatin1String("icon")).toString()); - place.setIcon(icon); - result.setIcon(icon); + if (item.contains(QLatin1String("bbox"))) { + QJsonArray bbox = item.value(QLatin1String("bbox")).toArray(); + QGeoRectangle box(QGeoCoordinate(bbox.at(3).toDouble(), bbox.at(0).toDouble()), + QGeoCoordinate(bbox.at(1).toDouble(), bbox.at(2).toDouble())); + location.setBoundingBox(box); + } - place.setCategory(parseCategory(item.value(QLatin1String("category")).toObject(), - m_engine)); + place.setLocation(location); - //QJsonArray having = item.value(QLatin1String("having")).toArray(); + QPlaceRatings ratings; + ratings.setAverage(item.value(QLatin1String("averageRating")).toDouble()); + ratings.setMaximum(5.0); + place.setRatings(ratings); - result.setSponsored(item.value(QLatin1String("sponsored")).toBool()); + const QString title = item.value(QLatin1String("title")).toString(); + place.setName(title); + result.setTitle(title); - QUrl href = item.value(QLatin1String("href")).toString(); - //QUrl type = item.value(QLatin1String("type")).toString(); + QPlaceIcon icon = m_engine->icon(item.value(QLatin1String("icon")).toString()); + place.setIcon(icon); + result.setIcon(icon); - place.setPlaceId(href.path().mid(18, 41)); + place.setCategory(parseCategory(item.value(QLatin1String("category")).toObject(), + m_engine)); - QPlaceAttribute provider; - provider.setText(QLatin1String("nokia")); - place.setExtendedAttribute(QPlaceAttribute::Provider, provider); - place.setVisibility(QLocation::PublicVisibility); + //QJsonArray having = item.value(QLatin1String("having")).toArray(); - result.setPlace(place); + result.setSponsored(item.value(QLatin1String("sponsored")).toBool()); - results.append(result); - } + QUrl href = item.value(QLatin1String("href")).toString(); + //QUrl type = item.value(QLatin1String("type")).toString(); - setResults(results); + place.setPlaceId(href.path().mid(18, 41)); - m_reply->deleteLater(); - m_reply = 0; + QPlaceAttribute provider; + provider.setText(QLatin1String("nokia")); + place.setExtendedAttribute(QPlaceAttribute::Provider, provider); + place.setVisibility(QLocation::PublicVisibility); - setFinished(true); - emit finished(); + result.setPlace(place); + + return result; +} + +QProposedSearchResult QPlaceSearchReplyImpl::parseSearchResult(const QJsonObject &item) const +{ + QProposedSearchResult result; + + result.setTitle(item.value(QLatin1String("title")).toString()); + + QPlaceIcon icon = m_engine->icon(item.value(QStringLiteral("icon")).toString()); + result.setIcon(icon); + + QPlaceSearchRequest request; + request.setSearchContext(QUrl(item.value("href").toString())); + + result.setSearchRequest(request); + + return result; } QT_END_NAMESPACE |