Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
jsonparserhelpers.cpp
Go to the documentation of this file.
1// Copyright (C) 2015 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5#include "../qplacemanagerengine_nokiav2.h"
6
7#include <QtCore/QCoreApplication>
8#include <QtCore/QDateTime>
9#include <QtCore/QJsonObject>
10#include <QtCore/QJsonArray>
11#include <QtCore/QVariantMap>
12#include <QtPositioning/QGeoCoordinate>
13#include <QtLocation/QPlaceContentRequest>
14#include <QtLocation/QPlaceIcon>
15#include <QtLocation/QPlaceSupplier>
16#include <QtLocation/QPlaceContent>
17#include <QtLocation/QPlaceUser>
18#include <QtLocation/QPlaceContactDetail>
19#include <QtLocation/QPlaceCategory>
20
22
23QGeoCoordinate parseCoordinate(const QJsonArray &coordinateArray)
24{
25 return QGeoCoordinate(coordinateArray.at(0).toDouble(), coordinateArray.at(1).toDouble());
26}
27
28QPlaceSupplier parseSupplier(const QJsonObject &supplierObject,
29 const QPlaceManagerEngineNokiaV2 *engine)
30{
31 Q_ASSERT(engine);
32
33 QPlaceSupplier supplier;
34 supplier.setName(supplierObject.value(QStringLiteral("title")).toString());
35 supplier.setUrl(supplierObject.value(QStringLiteral("href")).toString());
36
37 supplier.setIcon(engine->icon(supplierObject.value(QStringLiteral("icon")).toString()));
38
39 return supplier;
40}
41
42QPlaceCategory parseCategory(const QJsonObject &categoryObject,
43 const QPlaceManagerEngineNokiaV2 *engine)
44{
45 Q_ASSERT(engine);
46
47 QPlaceCategory category;
48
49 category.setName(categoryObject.value(QStringLiteral("title")).toString());
50
51 const QUrl href(categoryObject.value(QStringLiteral("href")).toString());
52 const QString hrefPath(href.path());
53 category.setCategoryId(hrefPath.mid(hrefPath.lastIndexOf(QLatin1Char('/')) + 1));
54
55
56 category.setIcon(engine->icon(categoryObject.value(QStringLiteral("icon")).toString()));
57 return category;
58}
59
60QList<QPlaceCategory> parseCategories(const QJsonArray &categoryArray,
61 const QPlaceManagerEngineNokiaV2 *engine)
62{
63 Q_ASSERT(engine);
64
65 QList<QPlaceCategory> categoryList;
66 for (int i = 0; i < categoryArray.count(); ++i)
67 categoryList.append(parseCategory(categoryArray.at(i).toObject(),
68 engine));
69
70 return categoryList;
71}
72
73QList<QPlaceContactDetail> parseContactDetails(const QJsonArray &contacts)
74{
75 QList<QPlaceContactDetail> contactDetails;
76
77 for (int i = 0; i < contacts.count(); ++i) {
78 QJsonObject contact = contacts.at(i).toObject();
79
80 QPlaceContactDetail detail;
81 detail.setLabel(contact.value(QStringLiteral("label")).toString());
82 detail.setValue(contact.value(QStringLiteral("value")).toString());
83
84 contactDetails.append(detail);
85 }
86
87 return contactDetails;
88}
89
90QPlaceContent parseImage(const QJsonObject &imageObject,
91 const QPlaceManagerEngineNokiaV2 *engine)
92{
93 Q_ASSERT(engine);
94
95 QPlaceContent image(QPlaceContent::ImageType);
96
97 image.setValue(QPlaceContent::ContentAttribution, imageObject.value(
98 QStringLiteral("attribution")).toString());
99 image.setValue(QPlaceContent::ImageUrl, imageObject.value(
100 QStringLiteral("src")).toString());
101 image.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
102 imageObject.value(QStringLiteral("supplier")).toObject(), engine)));
103
104 return image;
105}
106
107QPlaceContent parseReview(const QJsonObject &reviewObject,
108 const QPlaceManagerEngineNokiaV2 *engine)
109{
110 Q_ASSERT(engine);
111
112 QPlaceContent review(QPlaceContent::ReviewType);
113
114 review.setValue(QPlaceContent::ReviewDateTime, QDateTime::fromString(
115 reviewObject.value(QStringLiteral("date")).toString()));
116
117 if (reviewObject.contains(QStringLiteral("title"))) {
118 review.setValue(QPlaceContent::ReviewTitle, reviewObject.value(
119 QStringLiteral("title")).toString());
120 }
121
122 if (reviewObject.contains(QStringLiteral("rating"))) {
123 review.setValue(QPlaceContent::ReviewRating, reviewObject.value(
124 QStringLiteral("rating")).toDouble());
125 }
126
127 review.setValue(QPlaceContent::ReviewText, reviewObject.value(
128 QStringLiteral("description")).toString());
129
130 QJsonObject userObject = reviewObject.value(QStringLiteral("user")).toObject();
131
132 QPlaceUser user;
133 user.setUserId(userObject.value(QStringLiteral("id")).toString());
134 user.setName(userObject.value(QStringLiteral("title")).toString());
135 review.setValue(QPlaceContent::ContentUser, QVariant::fromValue(user));
136
137 review.setValue(QPlaceContent::ContentAttribution, reviewObject.value(
138 QStringLiteral("attribution")).toString());
139
140 review.setValue(QPlaceContent::ReviewLanguage, reviewObject.value(
141 QStringLiteral("language")).toString());
142
143 review.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
144 reviewObject.value(QStringLiteral("supplier")).toObject(), engine)));
145
146 //if (reviewObject.contains(QStringLiteral("via"))) {
147 // QJsonObject viaObject = reviewObject.value(QStringLiteral("via")).toObject();
148 //}
149
150 return review;
151}
152
153QPlaceContent parseEditorial(const QJsonObject &editorialObject,
154 const QPlaceManagerEngineNokiaV2 *engine)
155{
156 Q_ASSERT(engine);
157
158 QPlaceContent editorial(QPlaceContent::EditorialType);
159
160 editorial.setValue(QPlaceContent::ContentAttribution, editorialObject.value(QStringLiteral("attribution")).toString());
161
162 //if (editorialObject.contains(QStringLiteral("via"))) {
163 // QJsonObject viaObject = editorialObject.value(QStringLiteral("via")).toObject();
164 //}
165
166 editorial.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
167 editorialObject.value(QStringLiteral("supplier")).toObject(), engine)));
168 editorial.setValue(QPlaceContent::EditorialLanguage, editorialObject.value(
169 QStringLiteral("language")).toString());
170 editorial.setValue(QPlaceContent::EditorialText, editorialObject.value(
171 QStringLiteral("description")).toString());
172
173 return editorial;
174}
175
176void parseCollection(QPlaceContent::Type type, const QJsonObject &object,
177 QPlaceContent::Collection *collection, int *totalCount,
178 QPlaceContentRequest *previous, QPlaceContentRequest *next,
179 const QPlaceManagerEngineNokiaV2 *engine)
180{
181 Q_ASSERT(engine);
182
183 if (totalCount)
184 *totalCount = object.value(QStringLiteral("available")).toDouble();
185
186 int offset = 0;
187 if (object.contains(QStringLiteral("offset")))
188 offset = object.value(QStringLiteral("offset")).toDouble();
189
190 if (previous && object.contains(QStringLiteral("previous"))) {
191 previous->setContentType(type);
192 previous->setContentContext(QUrl(object.value(QStringLiteral("previous")).toString()));
193 }
194
195 if (next && object.contains(QStringLiteral("next"))) {
196 next->setContentType(type);
197 next->setContentContext(QUrl(object.value(QStringLiteral("next")).toString()));
198 }
199
200 if (collection) {
201 QJsonArray items = object.value(QStringLiteral("items")).toArray();
202 for (int i = 0; i < items.count(); ++i) {
203 QJsonObject itemObject = items.at(i).toObject();
204
205 switch (type) {
206 case QPlaceContent::ImageType:
207 collection->insert(offset + i, parseImage(itemObject, engine));
208 break;
209 case QPlaceContent::ReviewType:
210 collection->insert(offset + i, parseReview(itemObject, engine));
211 break;
212 case QPlaceContent::EditorialType:
213 collection->insert(offset + i, parseEditorial(itemObject, engine));
214 break;
215 case QPlaceContent::NoType:
216 default:
217 break;
218 }
219 }
220 }
221}
222
223QT_END_NAMESPACE
QList< QPlaceContactDetail > parseContactDetails(const QJsonArray &contacts)
QList< QPlaceCategory > parseCategories(const QJsonArray &categoryArray, const QPlaceManagerEngineNokiaV2 *engine)
QT_BEGIN_NAMESPACE QGeoCoordinate parseCoordinate(const QJsonArray &coordinateArray)
QPlaceSupplier parseSupplier(const QJsonObject &supplierObject, const QPlaceManagerEngineNokiaV2 *engine)
QPlaceContent parseReview(const QJsonObject &reviewObject, const QPlaceManagerEngineNokiaV2 *engine)
QPlaceCategory parseCategory(const QJsonObject &categoryObject, const QPlaceManagerEngineNokiaV2 *engine)
void parseCollection(QPlaceContent::Type type, const QJsonObject &object, QPlaceContent::Collection *collection, int *totalCount, QPlaceContentRequest *previous, QPlaceContentRequest *next, const QPlaceManagerEngineNokiaV2 *engine)
QPlaceContent parseImage(const QJsonObject &imageObject, const QPlaceManagerEngineNokiaV2 *engine)
QPlaceContent parseEditorial(const QJsonObject &editorialObject, const QPlaceManagerEngineNokiaV2 *engine)