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#include <qohosmapkitcommon.h>
10
12
13namespace {
14
15QStringList parsePlaceSearchSuggestionReply(const QJsonDocument &responseBodyJsonDoc)
16{
17 QStringList suggestions;
18
19 const QJsonObject responseBodyJsonObj = responseBodyJsonDoc.object();
20 if (responseBodyJsonObj.contains(QStringLiteral("sites"))) {
21 const auto sites = responseBodyJsonObj.value(QStringLiteral("sites")).toArray();
22 for (const auto &value : sites) {
23 if (value.isObject()) {
24 auto siteObj = value.toObject();
25 auto siteName = siteObj.value(QStringLiteral("name")).toString();
26 auto formatAddress = siteObj.value(QStringLiteral("formatAddress")).toString();
27 suggestions.append(QString("%1, %2").arg(siteName, formatAddress));
28 }
29 }
30 }
31
32 return suggestions;
33}
34
36{
37public:
38 QPlaceSearchSuggestionReplyOhosMapKit(QNetworkReply *reply, QPlaceManagerEngine *parent);
39
40private:
41 void onReplyFinished();
42 void onNetworkError(QNetworkReply::NetworkError error);
43};
44
46 QNetworkReply *reply, QPlaceManagerEngine *parent)
48{
49 Q_ASSERT(parent);
50 if (!reply) {
51 setError(QPlaceReply::UnknownError, QStringLiteral("Null reply"));
52 return;
53 }
54
55 connect(reply, &QNetworkReply::finished, this, &QPlaceSearchSuggestionReplyOhosMapKit::onReplyFinished);
56 connect(reply, &QNetworkReply::errorOccurred, this, &QPlaceSearchSuggestionReplyOhosMapKit::onNetworkError);
57
58 connect(this, &QPlaceReply::aborted, reply, &QNetworkReply::abort);
59 connect(this, &QObject::destroyed, reply, &QObject::deleteLater);
60}
61
62void QPlaceSearchSuggestionReplyOhosMapKit::onReplyFinished()
63{
64 auto *reply = static_cast<QNetworkReply *>(sender());
65 reply->deleteLater();
66
67 auto setErrorEmitAndFinish = [&](QPlaceReply::Error errorCode, const QString &errorString) {
68 setError(errorCode, errorString);
69 Q_EMIT errorOccurred(errorCode, errorString);
70
71 setFinished(true);
72 Q_EMIT finished();
73 };
74
75 if (reply->error() != QNetworkReply::NoError) {
76 setErrorEmitAndFinish(
77 QPlaceReply::CommunicationError,
78 OhosMapKit::msgReplyError(reply->errorString()));
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)