1 | // Copyright (C) 2023 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
3 | |
4 | #include <QtGrpcQuick/private/qqmlgrpcchanneloptions_p.h> |
5 | #include <QtGrpcQuick/private/qqmlgrpcmetadata_p.h> |
6 | |
7 | #include <QtGrpc/qgrpcserializationformat.h> |
8 | |
9 | #include <QtCore/private/qobject_p.h> |
10 | |
11 | #include <chrono> |
12 | |
13 | using namespace std::chrono_literals; |
14 | |
15 | QT_BEGIN_NAMESPACE |
16 | |
17 | class QQmlGrpcChannelOptionsPrivate : public QObjectPrivate |
18 | { |
19 | Q_DECLARE_PUBLIC(QQmlGrpcChannelOptions) |
20 | |
21 | public: |
22 | QQmlGrpcChannelOptionsPrivate(); |
23 | |
24 | QGrpcChannelOptions options; |
25 | QtGrpc::SerializationFormat format = QtGrpc::SerializationFormat::Default; |
26 | QQmlGrpcMetadata *metadata = nullptr; |
27 | #if QT_CONFIG(ssl) |
28 | QQmlSslConfiguration configuration; |
29 | #endif // QT_CONFIG(ssl) |
30 | QMetaObject::Connection metadataUpdateConnection; |
31 | }; |
32 | |
33 | QQmlGrpcChannelOptionsPrivate::QQmlGrpcChannelOptionsPrivate() : QObjectPrivate() |
34 | { |
35 | } |
36 | |
37 | QQmlGrpcChannelOptions::QQmlGrpcChannelOptions(QObject *parent) |
38 | : QObject(*(new QQmlGrpcChannelOptionsPrivate()), parent) |
39 | { |
40 | } |
41 | |
42 | QQmlGrpcChannelOptions::~QQmlGrpcChannelOptions() = default; |
43 | |
44 | qint64 QQmlGrpcChannelOptions::deadlineTimeout() const |
45 | { |
46 | std::chrono::milliseconds ms = d_func()->options.deadlineTimeout().value_or(u: 0ms); |
47 | return ms.count(); |
48 | } |
49 | |
50 | void QQmlGrpcChannelOptions::setDeadlineTimeout(qint64 value) |
51 | { |
52 | Q_D(QQmlGrpcChannelOptions); |
53 | std::chrono::milliseconds ms(value); |
54 | d->options.setDeadlineTimeout(ms); |
55 | emit deadlineTimeoutChanged(); |
56 | } |
57 | |
58 | const QGrpcChannelOptions &QQmlGrpcChannelOptions::options() const & noexcept |
59 | { |
60 | return d_func()->options; |
61 | } |
62 | |
63 | QQmlGrpcMetadata *QQmlGrpcChannelOptions::metadata() const |
64 | { |
65 | return d_func()->metadata; |
66 | } |
67 | |
68 | void QQmlGrpcChannelOptions::setMetadata(QQmlGrpcMetadata *value) |
69 | { |
70 | Q_D(QQmlGrpcChannelOptions); |
71 | if (d->metadata != value) { |
72 | if (d->metadataUpdateConnection) { |
73 | disconnect(d->metadataUpdateConnection); |
74 | d->metadataUpdateConnection = {}; |
75 | } |
76 | |
77 | d->metadata = value; |
78 | if (d->metadata) { |
79 | const auto updateMetadata = [this]() { |
80 | Q_D(QQmlGrpcChannelOptions); |
81 | d->options.setMetadata(d->metadata->metadata()); |
82 | emit metadataChanged(); |
83 | }; |
84 | d->metadataUpdateConnection = connect(sender: d->metadata, signal: &QQmlGrpcMetadata::dataChanged, context: this, |
85 | slot: updateMetadata); |
86 | updateMetadata(); |
87 | } |
88 | } |
89 | } |
90 | |
91 | QtGrpc::SerializationFormat QQmlGrpcChannelOptions::serializationFormat() const |
92 | { |
93 | return d_func()->format; |
94 | } |
95 | |
96 | void QQmlGrpcChannelOptions::setSerializationFormat(QtGrpc::SerializationFormat format) |
97 | { |
98 | Q_D(QQmlGrpcChannelOptions); |
99 | if (d->format != format) { |
100 | d->format = format; |
101 | d->options.setSerializationFormat(format); |
102 | emit serializationFormatChanged(); |
103 | } |
104 | } |
105 | |
106 | #if QT_CONFIG(ssl) |
107 | QQmlSslConfiguration QQmlGrpcChannelOptions::sslConfiguration() const |
108 | { |
109 | return d_func()->configuration; |
110 | } |
111 | |
112 | void QQmlGrpcChannelOptions::setSslConfiguration(const QQmlSslConfiguration &config) |
113 | { |
114 | Q_D(QQmlGrpcChannelOptions); |
115 | if (d->configuration != config) { |
116 | d->configuration = config; |
117 | d->options.setSslConfiguration(d->configuration.configuration()); |
118 | emit sslConfigurationChanged(); |
119 | } |
120 | } |
121 | #endif // QT_CONFIG(ssl) |
122 | |
123 | QT_END_NAMESPACE |
124 | |
125 | #include "moc_qqmlgrpcchanneloptions_p.cpp" |
126 | |