QPlace QPlaceManagerEngineJsonDb::compatiblePlace(const QPlace &original) const { QPlace place; place.setName(original.name()); QGeoLocation location = original.location(); QGeoCoordinate coord = original.location().coordinate(); coord.setAltitude(qQNaN()); location.setCoordinate(coord); location.setBoundingBox(QGeoRectangle()); place.setLocation(location); QList<QPlaceContactDetail> details; foreach (const QString &contactType, original.contactTypes()) place.setContactDetails(contactType, original.contactDetails(contactType)); place.setVisibility(QLocation::UnspecifiedVisibility); QStringList attributeTypes = original.extendedAttributeTypes(); foreach (const QString &attributeType, attributeTypes) place.setExtendedAttribute(attributeType, original.extendedAttribute(attributeType)); QString provider = original.extendedAttribute(QLatin1String("x_provider")).text(); if (!provider.isEmpty()) { QPlaceAttribute alternativeId; alternativeId.setText(original.placeId()); place.setExtendedAttribute(QString::fromLatin1("x_id_") + provider, alternativeId); if (provider == QLatin1String("nokia") || provider == QLatin1String("nokia_mos")) { QStringList nokiaCategoryIds; foreach (const QPlaceCategory &cat, original.categories()) { if (!cat.categoryId().isEmpty()) nokiaCategoryIds.append(cat.categoryId()); } if (!nokiaCategoryIds.isEmpty()) { QPlaceAttribute nokiaCatIds; nokiaCatIds.setText(nokiaCategoryIds.join(QLatin1String(","))); place.setExtendedAttribute(QString::fromLatin1("x_nokia_category_ids"), nokiaCatIds); } }
void QPlaceDetailsReplyImpl::replyFinished() { if (m_reply->error() != QNetworkReply::NoError) { switch (m_reply->error()) { case QNetworkReply::OperationCanceledError: setError(CancelError, "Request canceled."); break; case QNetworkReply::ContentNotFoundError: setError(PlaceDoesNotExistError, QString::fromLatin1("The id, %1, does not reference an existing place") .arg(m_placeId)); break; default: setError(CommunicationError, "Network error."); } return; } QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll()); if (!document.isObject()) { setError(ParseError, QCoreApplication::translate(NOKIA_PLUGIN_CONTEXT_NAME, PARSE_ERROR)); return; } QJsonObject object = document.object(); QPlace place; place.setPlaceId(object.value(QLatin1String("placeId")).toString()); //const QUrl view = object.value(QLatin1String("view")).toString(); place.setName(object.value(QLatin1String("name")).toString()); //if (object.contains(QLatin1String("distance"))) // double distance = object.value(QLatin1String("distance")).toDouble(); //if (object.contains(QLatin1String("alternativeNames"))) { // QJsonArray alternativeNames = object.value(QLatin1String("alternativeNames")).toArray(); //} QGeoLocation location; QJsonObject locationObject = object.value(QLatin1String("location")).toObject(); //if (locationObject.contains(QLatin1String("locationId"))) // const QString locationId = locationObject.value(QLatin1String("locationId")).toString(); QJsonArray position = locationObject.value(QLatin1String("position")).toArray(); location.setCoordinate(QGeoCoordinate(position.at(0).toDouble(), position.at(1).toDouble())); QGeoAddress address; QJsonObject addressObject = locationObject.value(QLatin1String("address")).toObject(); address.setText(addressObject.value(QLatin1String("text")).toString()); address.setCountry(addressObject.value(QLatin1String("country")).toString()); address.setCountryCode(addressObject.value(QLatin1String("countryCode")).toString()); QString house; QString street; if (addressObject.contains(QLatin1String("house"))) house = addressObject.value(QLatin1String("house")).toString(); if (addressObject.contains(QLatin1String("street"))) street = addressObject.value(QLatin1String("street")).toString(); if (countryTableContains(address.countryCode())) { if (!house.isEmpty() && !street.startsWith(house)) street = house + QLatin1Char(' ') + street; } else { if (!house.isEmpty() && !street.endsWith(house)) street += QLatin1Char(' ') + house; } address.setStreet(street); if (addressObject.contains(QLatin1String("city"))) address.setCity(addressObject.value(QLatin1String("city")).toString()); if (addressObject.contains(QLatin1String("district"))) address.setDistrict(addressObject.value(QLatin1String("district")).toString()); if (addressObject.contains(QLatin1String("state"))) address.setState(addressObject.value(QLatin1String("state")).toString()); if (addressObject.contains(QLatin1String("county"))) address.setCounty(addressObject.value(QLatin1String("county")).toString()); if (addressObject.contains(QLatin1String("postalCode"))) address.setPostalCode(addressObject.value(QLatin1String("postalCode")).toString()); location.setAddress(address); if (locationObject.contains(QLatin1String("bbox"))) { QJsonArray bbox = locationObject.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.setLocation(location); place.setCategories(parseCategories(object.value(QLatin1String("categories")).toArray(), m_engine)); place.setIcon(m_engine->icon(object.value(QLatin1String("icon")).toString(), place.categories())); if (object.contains(QLatin1String("contacts"))) { QJsonObject contactsObject = object.value(QLatin1String("contacts")).toObject(); if (contactsObject.contains(QLatin1String("phone"))) { place.setContactDetails(QPlaceContactDetail::Phone, parseContactDetails(contactsObject.value(QLatin1String("phone")).toArray())); } if (contactsObject.contains(QLatin1String("fax"))) { place.setContactDetails(QPlaceContactDetail::Fax, parseContactDetails(contactsObject.value(QLatin1String("fax")).toArray())); } if (contactsObject.contains(QLatin1String("website"))) { place.setContactDetails(QPlaceContactDetail::Website, parseContactDetails(contactsObject.value(QLatin1String("website")).toArray())); } if (contactsObject.contains(QLatin1String("email"))) { place.setContactDetails(QPlaceContactDetail::Email, parseContactDetails(contactsObject.value(QLatin1String("email")).toArray())); } } //if (object.contains(QLatin1String("verifiedByOwner"))) // bool verifiedByOwner = object.value(QLatin1String("verifiedByOwner")).toBool(); if (object.contains(QLatin1String("attribution"))) place.setAttribution(object.value(QLatin1String("attribution")).toString()); if (object.contains(QLatin1String("supplier"))) { place.setSupplier(parseSupplier(object.value(QLatin1String("supplier")).toObject(), m_engine)); } if (object.contains(QLatin1String("ratings"))) { QJsonObject ratingsObject = object.value(QLatin1String("ratings")).toObject(); QPlaceRatings ratings; ratings.setAverage(ratingsObject.value(QLatin1String("average")).toDouble()); ratings.setCount(ratingsObject.value(QLatin1String("count")).toDouble()); ratings.setMaximum(5.0); place.setRatings(ratings); } if (object.contains(QLatin1String("extended"))) { QJsonObject extendedObject = object.value(QLatin1String("extended")).toObject(); foreach (const QString &key, extendedObject.keys()) { QJsonObject attributeObject = extendedObject.value(key).toObject(); QPlaceAttribute attribute; attribute.setLabel(attributeObject.value(QLatin1String("label")).toString()); attribute.setText(attributeObject.value(QLatin1String("text")).toString()); if (key == QLatin1String("payment")) place.setExtendedAttribute(QPlaceAttribute::Payment, attribute); else if (key == QLatin1String("openingHours")) place.setExtendedAttribute(QPlaceAttribute::OpeningHours, attribute); else place.setExtendedAttribute(key, attribute); } }
/*! \qmlproperty QPlace Place::place For details on how to use this property to interface between C++ and QML see "\l {location-cpp-qml.html#place} {Interfaces between C++ and QML Code}". */ void QDeclarativePlace::setPlace(const QPlace &src) { QPlace previous = m_src; m_src = src; if (previous.categories() != m_src.categories()) { synchronizeCategories(); emit categoriesChanged(); } if (m_location && m_location->parent() == this) { m_location->setLocation(m_src.location()); } else if (!m_location || m_location->parent() != this) { m_location = new QDeclarativeGeoLocation(m_src.location(), this); emit locationChanged(); } if (m_ratings && m_ratings->parent() == this) { m_ratings->setRatings(m_src.ratings()); } else if (!m_ratings || m_ratings->parent() != this) { m_ratings = new QDeclarativeRatings(m_src.ratings(), this); emit ratingsChanged(); } if (m_supplier && m_supplier->parent() == this) { m_supplier->setSupplier(m_src.supplier(), m_plugin); } else if (!m_supplier || m_supplier->parent() != this) { m_supplier = new QDeclarativeSupplier(m_src.supplier(), m_plugin, this); emit supplierChanged(); } if (m_icon && m_icon->parent() == this) { m_icon->setPlugin(m_plugin); m_icon->setIcon(m_src.icon()); } else if (!m_icon || m_icon->parent() != this) { m_icon = new QDeclarativePlaceIcon(m_src.icon(), m_plugin, this); emit iconChanged(); } if (previous.name() != m_src.name()) { emit nameChanged(); } if (previous.placeId() != m_src.placeId()) { emit placeIdChanged(); } if (previous.attribution() != m_src.attribution()) { emit attributionChanged(); } if (previous.detailsFetched() != m_src.detailsFetched()) { emit detailsFetchedChanged(); } if (previous.primaryPhone() != m_src.primaryPhone()) { emit primaryPhoneChanged(); } if (previous.primaryFax() != m_src.primaryFax()) { emit primaryFaxChanged(); } if (previous.primaryEmail() != m_src.primaryEmail()) { emit primaryEmailChanged(); } if (previous.primaryWebsite() != m_src.primaryWebsite()) { emit primaryWebsiteChanged(); } if (m_reviewModel && m_src.totalContentCount(QPlaceContent::ReviewType) >= 0) { m_reviewModel->initializeCollection(m_src.totalContentCount(QPlaceContent::ReviewType), m_src.content(QPlaceContent::ReviewType)); } if (m_imageModel && m_src.totalContentCount(QPlaceContent::ImageType) >= 0) { m_imageModel->initializeCollection(m_src.totalContentCount(QPlaceContent::ImageType), m_src.content(QPlaceContent::ImageType)); } if (m_editorialModel && m_src.totalContentCount(QPlaceContent::EditorialType) >= 0) { m_editorialModel->initializeCollection(m_src.totalContentCount(QPlaceContent::EditorialType), m_src.content(QPlaceContent::EditorialType)); } synchronizeExtendedAttributes(); synchronizeContacts(); }