// 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 #include #include #include #include #include #include #include #include #include #include #include #include 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 parseCategories(const QJsonArray &categoryArray, const QPlaceManagerEngineNokiaV2 *engine) { Q_ASSERT(engine); QList categoryList; for (int i = 0; i < categoryArray.count(); ++i) categoryList.append(parseCategory(categoryArray.at(i).toObject(), engine)); return categoryList; } QList parseContactDetails(const QJsonArray &contacts) { QList 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