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
qgeocodereplyohosmapkit.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 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
4#include <QtCore/qlist.h>
5#include <QtCore/qjsonarray.h>
6#include <QtCore/qjsondocument.h>
7#include <QtCore/qjsonobject.h>
8#include <QtPositioning/qgeolocation.h>
9#include <qgeocodereplyohosmapkit.h>
10#include <qohosmapkitcommon.h>
11
13
14namespace {
15
16QList<QGeoLocation> parseGeocodeResponse(const QJsonObject &responseBodyJsonObj)
17{
18 QList<QGeoLocation> results;
19
20 if (responseBodyJsonObj.contains(QStringLiteral("sites"))) {
21 const auto sites = responseBodyJsonObj.value(QStringLiteral("sites")).toArray();
22 for (const auto &siteValue : sites)
23 if (siteValue.isObject())
24 results.append(OhosMapKit::SiteJson::tryConvertToQGeoLocation(siteValue.toObject()));
25 }
26
27 return results;
28}
29
31{
32public:
33 explicit QGeoCodeReplyOhosMapKit(QNetworkReply *reply, QObject *parent);
34
35private:
36 void onNetworkReplyFinished();
37 void onNetworkReplyError(QNetworkReply::NetworkError error);
38};
39
40QGeoCodeReplyOhosMapKit::QGeoCodeReplyOhosMapKit(QNetworkReply *reply, QObject *parent)
42{
43 if (reply == nullptr) {
44 setError(QGeoCodeReply::UnknownError, tr("Null reply"));
45 return;
46 }
47
48 connect(reply, &QNetworkReply::finished, this, &QGeoCodeReplyOhosMapKit::onNetworkReplyFinished);
49 connect(reply, &QNetworkReply::errorOccurred, this, &QGeoCodeReplyOhosMapKit::onNetworkReplyError);
50 connect(this, &QGeoCodeReply::aborted, reply, &QNetworkReply::abort);
51 connect(this, &QObject::destroyed, reply, &QObject::deleteLater);
52}
53
54void QGeoCodeReplyOhosMapKit::onNetworkReplyFinished()
55{
56 auto *reply = static_cast<QNetworkReply *>(sender());
57 reply->deleteLater();
58
59 if (reply->error() != QNetworkReply::NoError) {
60 setError(
61 QGeoCodeReply::CommunicationError,
62 tr("Network reply error: %1").arg(reply->errorString()));
63 return;
64 }
65
66 auto responseBodyJsonDoc = QJsonDocument::fromJson(reply->readAll());
67 if (!responseBodyJsonDoc.isObject()) {
68 setError(QGeoCodeReply::ParseError, tr("Response parse error"));
69 return;
70 }
71
72 setLocations(parseGeocodeResponse(responseBodyJsonDoc.object()));
73
74 setFinished(true);
75}
76
77void QGeoCodeReplyOhosMapKit::onNetworkReplyError(QNetworkReply::NetworkError error)
78{
79 Q_UNUSED(error)
80
81 auto *reply = static_cast<QNetworkReply *>(sender());
82 reply->deleteLater();
83 setError(QGeoCodeReply::CommunicationError, reply->errorString());
84}
85
86}
87
88QGeoCodeReply *makeQGeoCodeReplyOhosMapKit(QNetworkReply *reply, QObject *parent)
89{
90 return new QGeoCodeReplyOhosMapKit(reply, parent);
91}
92
93QT_END_NAMESPACE
QGeoCodeReplyOhosMapKit(QNetworkReply *reply, QObject *parent)
Combined button and popup list for selecting options.
QList< QGeoLocation > parseGeocodeResponse(const QJsonObject &responseBodyJsonObj)
QGeoCodeReply * makeQGeoCodeReplyOhosMapKit(QNetworkReply *reply, QObject *parent)