summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/nokia/placesv2
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/geoservices/nokia/placesv2')
-rw-r--r--src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp129
-rw-r--r--src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.h5
2 files changed, 81 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
diff --git a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.h b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.h
index 887147d8..a7871653 100644
--- a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.h
+++ b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.h
@@ -55,6 +55,8 @@
QT_BEGIN_NAMESPACE
class QPlaceManagerEngineNokiaV2;
+class QPlaceResult;
+class QProposedSearchResult;
class QPlaceSearchReplyImpl : public QPlaceSearchReply
{
@@ -73,6 +75,9 @@ private slots:
void replyFinished();
private:
+ QPlaceResult parsePlaceResult(const QJsonObject &item) const;
+ QProposedSearchResult parseSearchResult(const QJsonObject &item) const;
+
QNetworkReply *m_reply;
QPlaceManagerEngineNokiaV2 *m_engine;
};