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
13using namespace std::chrono_literals;
14
15QT_BEGIN_NAMESPACE
16
17class QQmlGrpcChannelOptionsPrivate : public QObjectPrivate
18{
19 Q_DECLARE_PUBLIC(QQmlGrpcChannelOptions)
20
21public:
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
33QQmlGrpcChannelOptionsPrivate::QQmlGrpcChannelOptionsPrivate() : QObjectPrivate()
34{
35}
36
37QQmlGrpcChannelOptions::QQmlGrpcChannelOptions(QObject *parent)
38 : QObject(*(new QQmlGrpcChannelOptionsPrivate()), parent)
39{
40}
41
42QQmlGrpcChannelOptions::~QQmlGrpcChannelOptions() = default;
43
44qint64 QQmlGrpcChannelOptions::deadlineTimeout() const
45{
46 std::chrono::milliseconds ms = d_func()->options.deadlineTimeout().value_or(u: 0ms);
47 return ms.count();
48}
49
50void 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
58const QGrpcChannelOptions &QQmlGrpcChannelOptions::options() const & noexcept
59{
60 return d_func()->options;
61}
62
63QQmlGrpcMetadata *QQmlGrpcChannelOptions::metadata() const
64{
65 return d_func()->metadata;
66}
67
68void 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
91QtGrpc::SerializationFormat QQmlGrpcChannelOptions::serializationFormat() const
92{
93 return d_func()->format;
94}
95
96void 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)
107QQmlSslConfiguration QQmlGrpcChannelOptions::sslConfiguration() const
108{
109 return d_func()->configuration;
110}
111
112void 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
123QT_END_NAMESPACE
124
125#include "moc_qqmlgrpcchanneloptions_p.cpp"
126

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qtgrpc/src/grpcquick/qqmlgrpcchanneloptions.cpp