Revision control
Copy as Markdown
// Copyright (C) 2015 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "jsonparserhelpers.h"
#include "../qplacemanagerengine_nokiav2.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonArray>
#include <QtCore/QVariantMap>
#include <QtPositioning/QGeoCoordinate>
#include <QtLocation/QPlaceContentRequest>
#include <QtLocation/QPlaceIcon>
#include <QtLocation/QPlaceSupplier>
#include <QtLocation/QPlaceContent>
#include <QtLocation/QPlaceUser>
#include <QtLocation/QPlaceContactDetail>
#include <QtLocation/QPlaceCategory>
QT_BEGIN_NAMESPACE
QGeoCoordinate parseCoordinate(const QJsonArray &coordinateArray)
{
return QGeoCoordinate(coordinateArray.at(0).toDouble(), coordinateArray.at(1).toDouble());
}
QPlaceSupplier parseSupplier(const QJsonObject &supplierObject,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QPlaceSupplier supplier;
supplier.setName(supplierObject.value(QStringLiteral("title")).toString());
supplier.setUrl(supplierObject.value(QStringLiteral("href")).toString());
supplier.setIcon(engine->icon(supplierObject.value(QStringLiteral("icon")).toString()));
return supplier;
}
QPlaceCategory parseCategory(const QJsonObject &categoryObject,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QPlaceCategory category;
category.setName(categoryObject.value(QStringLiteral("title")).toString());
const QUrl href(categoryObject.value(QStringLiteral("href")).toString());
const QString hrefPath(href.path());
category.setCategoryId(hrefPath.mid(hrefPath.lastIndexOf(QLatin1Char('/')) + 1));
category.setIcon(engine->icon(categoryObject.value(QStringLiteral("icon")).toString()));
return category;
}
QList<QPlaceCategory> parseCategories(const QJsonArray &categoryArray,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QList<QPlaceCategory> categoryList;
for (int i = 0; i < categoryArray.count(); ++i)
categoryList.append(parseCategory(categoryArray.at(i).toObject(),
engine));
return categoryList;
}
QList<QPlaceContactDetail> parseContactDetails(const QJsonArray &contacts)
{
QList<QPlaceContactDetail> contactDetails;
for (int i = 0; i < contacts.count(); ++i) {
QJsonObject contact = contacts.at(i).toObject();
QPlaceContactDetail detail;
detail.setLabel(contact.value(QStringLiteral("label")).toString());
detail.setValue(contact.value(QStringLiteral("value")).toString());
contactDetails.append(detail);
}
return contactDetails;
}
QPlaceContent parseImage(const QJsonObject &imageObject,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QPlaceContent image(QPlaceContent::ImageType);
image.setValue(QPlaceContent::ContentAttribution, imageObject.value(
QStringLiteral("attribution")).toString());
image.setValue(QPlaceContent::ImageUrl, imageObject.value(
QStringLiteral("src")).toString());
image.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
imageObject.value(QStringLiteral("supplier")).toObject(), engine)));
return image;
}
QPlaceContent parseReview(const QJsonObject &reviewObject,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QPlaceContent review(QPlaceContent::ReviewType);
review.setValue(QPlaceContent::ReviewDateTime, QDateTime::fromString(
reviewObject.value(QStringLiteral("date")).toString()));
if (reviewObject.contains(QStringLiteral("title"))) {
review.setValue(QPlaceContent::ReviewTitle, reviewObject.value(
QStringLiteral("title")).toString());
}
if (reviewObject.contains(QStringLiteral("rating"))) {
review.setValue(QPlaceContent::ReviewRating, reviewObject.value(
QStringLiteral("rating")).toDouble());
}
review.setValue(QPlaceContent::ReviewText, reviewObject.value(
QStringLiteral("description")).toString());
QJsonObject userObject = reviewObject.value(QStringLiteral("user")).toObject();
QPlaceUser user;
user.setUserId(userObject.value(QStringLiteral("id")).toString());
user.setName(userObject.value(QStringLiteral("title")).toString());
review.setValue(QPlaceContent::ContentUser, QVariant::fromValue(user));
review.setValue(QPlaceContent::ContentAttribution, reviewObject.value(
QStringLiteral("attribution")).toString());
review.setValue(QPlaceContent::ReviewLanguage, reviewObject.value(
QStringLiteral("language")).toString());
review.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
reviewObject.value(QStringLiteral("supplier")).toObject(), engine)));
//if (reviewObject.contains(QStringLiteral("via"))) {
// QJsonObject viaObject = reviewObject.value(QStringLiteral("via")).toObject();
//}
return review;
}
QPlaceContent parseEditorial(const QJsonObject &editorialObject,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
QPlaceContent editorial(QPlaceContent::EditorialType);
editorial.setValue(QPlaceContent::ContentAttribution, editorialObject.value(QStringLiteral("attribution")).toString());
//if (editorialObject.contains(QStringLiteral("via"))) {
// QJsonObject viaObject = editorialObject.value(QStringLiteral("via")).toObject();
//}
editorial.setValue(QPlaceContent::ContentSupplier, QVariant::fromValue(parseSupplier(
editorialObject.value(QStringLiteral("supplier")).toObject(), engine)));
editorial.setValue(QPlaceContent::EditorialLanguage, editorialObject.value(
QStringLiteral("language")).toString());
editorial.setValue(QPlaceContent::EditorialText, editorialObject.value(
QStringLiteral("description")).toString());
return editorial;
}
void parseCollection(QPlaceContent::Type type, const QJsonObject &object,
QPlaceContent::Collection *collection, int *totalCount,
QPlaceContentRequest *previous, QPlaceContentRequest *next,
const QPlaceManagerEngineNokiaV2 *engine)
{
Q_ASSERT(engine);
if (totalCount)
*totalCount = object.value(QStringLiteral("available")).toDouble();
int offset = 0;
if (object.contains(QStringLiteral("offset")))
offset = object.value(QStringLiteral("offset")).toDouble();
if (previous && object.contains(QStringLiteral("previous"))) {
previous->setContentType(type);
previous->setContentContext(QUrl(object.value(QStringLiteral("previous")).toString()));
}
if (next && object.contains(QStringLiteral("next"))) {
next->setContentType(type);
next->setContentContext(QUrl(object.value(QStringLiteral("next")).toString()));
}
if (collection) {
QJsonArray items = object.value(QStringLiteral("items")).toArray();
for (int i = 0; i < items.count(); ++i) {
QJsonObject itemObject = items.at(i).toObject();
switch (type) {
case QPlaceContent::ImageType:
collection->insert(offset + i, parseImage(itemObject, engine));
break;
case QPlaceContent::ReviewType:
collection->insert(offset + i, parseReview(itemObject, engine));
break;
case QPlaceContent::EditorialType:
collection->insert(offset + i, parseEditorial(itemObject, engine));
break;
case QPlaceContent::NoType:
default:
break;
}
}
}
}
QT_END_NAMESPACE