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
qplacesearchsuggestionreplyohosmapkit.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/qjsonarray.h>
5#include <QtCore/qjsondocument.h>
6#include <QtCore/qjsonobject.h>
7#include <QtCore/qmetaobject.h>
8#include <qplacesearchsuggestionreplyohosmapkit.h>
9
11
12namespace {
13
14QStringList parsePlaceSearchSuggestionReply(const QJsonDocument &responseBodyJsonDoc)
15{
16 QStringList suggestions;
17
18 const QJsonObject responseBodyJsonObj = responseBodyJsonDoc.object();
19 if (responseBodyJsonObj.contains(QStringLiteral("sites"))) {
20 const auto sites = responseBodyJsonObj.value(QStringLiteral("sites")).toArray();
21 for (const auto &value : sites) {
22 if (value.isObject()) {
23 auto siteObj = value.toObject();
24 auto siteName = siteObj.value(QStringLiteral("name")).toString();
25 auto formatAddress = siteObj.value(QStringLiteral("formatAddress")).toString();
26 suggestions.append(QString("%1, %2").arg(siteName, formatAddress));
27 }
28 }
29 }
30
31 return suggestions;
32}
33
35{
36public:
37 QPlaceSearchSuggestionReplyOhosMapKit(QNetworkReply *reply, QPlaceManagerEngine *parent);
38
39private:
40 void onReplyFinished();
41 void onNetworkError(QNetworkReply::NetworkError error);
42};
43
45 QNetworkReply *reply, QPlaceManagerEngine *parent)
47{
48 Q_ASSERT(parent);
49 if (!reply) {
50 setError(QPlaceReply::UnknownError, QStringLiteral("Null reply"));
51 return;
52 }
53
54 connect(reply, &QNetworkReply::finished, this, &QPlaceSearchSuggestionReplyOhosMapKit::onReplyFinished);
55 connect(reply, &QNetworkReply::errorOccurred, this, &QPlaceSearchSuggestionReplyOhosMapKit::onNetworkError);
56
57 connect(this, &QPlaceReply::aborted, reply, &QNetworkReply::abort);
58 connect(this, &QObject::destroyed, reply, &QObject::deleteLater);
59}
60
61void QPlaceSearchSuggestionReplyOhosMapKit::onReplyFinished()
62{
63 auto *reply = static_cast<QNetworkReply *>(sender());
64 reply->deleteLater();
65
66 auto setErrorEmitAndFinish = [&](QPlaceReply::Error errorCode, const QString &errorString) {
67 setError(errorCode, errorString);
68 Q_EMIT errorOccurred(errorCode, errorString);
69
70 setFinished(true);
71 Q_EMIT finished();
72 };
73
74 if (reply->error() != QNetworkReply::NoError) {
75 setErrorEmitAndFinish(
76 QPlaceReply::CommunicationError,
77 tr("Network reply error: %1")
78 .arg(QMetaEnum::fromType<QNetworkReply::NetworkError>().valueToKey(reply->error())));
79 return;
80 }
81
82 const auto responseBodyJsonDoc = QJsonDocument::fromJson(reply->readAll());
83 if (!responseBodyJsonDoc.isObject()) {
84 setErrorEmitAndFinish(QPlaceReply::ParseError, tr("Response parse error"));
85 return;
86 }
87
88 setSuggestions(parsePlaceSearchSuggestionReply(responseBodyJsonDoc));
89
90 setFinished(true);
91 Q_EMIT finished();
92}
93
94void QPlaceSearchSuggestionReplyOhosMapKit::onNetworkError(QNetworkReply::NetworkError error)
95{
96 Q_UNUSED(error)
97 auto *reply = static_cast<QNetworkReply *>(sender());
98 reply->deleteLater();
99 setError(QPlaceReply::CommunicationError, reply->errorString());
100}
101
102}
103
105 QNetworkReply *reply, QPlaceManagerEngine *parent)
106{
107 return new QPlaceSearchSuggestionReplyOhosMapKit(reply, parent);
108}
109
110QT_END_NAMESPACE
QPlaceSearchSuggestionReplyOhosMapKit(QNetworkReply *reply, QPlaceManagerEngine *parent)
Combined button and popup list for selecting options.
QStringList parsePlaceSearchSuggestionReply(const QJsonDocument &responseBodyJsonDoc)
QPlaceSearchSuggestionReply * makeQPlaceSearchSuggestionReplyOhosMapKit(QNetworkReply *reply, QPlaceManagerEngine *parent)