diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-05-13 22:10:21 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-05-13 23:20:58 +0200 |
| commit | 402bb6f33610f7aba9d8295d8c08be2e64324a5d (patch) | |
| tree | aada86d4eacc2a08c37c4e5f37c387320146f6b0 /src/base | |
| parent | 8a9bae9f60de9789e391291372df26ef93b7fd75 (diff) | |
| download | qxmpp-402bb6f33610f7aba9d8295d8c08be2e64324a5d.tar.gz | |
Stanza: Refactor storage of optional e2ee metadata
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppStanza.cpp | 38 | ||||
| -rw-r--r-- | src/base/QXmppStanza.h | 9 |
2 files changed, 20 insertions, 27 deletions
diff --git a/src/base/QXmppStanza.cpp b/src/base/QXmppStanza.cpp index d90d105b..d3284e2a 100644 --- a/src/base/QXmppStanza.cpp +++ b/src/base/QXmppStanza.cpp @@ -718,6 +718,13 @@ QXmppE2eeMetadata::QXmppE2eeMetadata() { } +/// \cond +QXmppE2eeMetadata::QXmppE2eeMetadata(QSharedDataPointer<QXmppE2eeMetadataPrivate> d) + : d(d) +{ +} +/// \endcond + /// /// Constructs a copy of \a other. /// @@ -727,24 +734,6 @@ QXmppE2eeMetadata::QXmppE2eeMetadata(const QXmppE2eeMetadata &other) = default; QXmppE2eeMetadata::~QXmppE2eeMetadata() = default; -/// \cond -QXmppE2eeMetadata::QXmppE2eeMetadata(const std::optional<QXmppE2eeMetadata> &other) - : d(nullptr) -{ - if (other) { - *this = *other; - } -} - -std::optional<QXmppE2eeMetadata> QXmppE2eeMetadata::toOptional() const -{ - if (d) { - return *this; - } - return {}; -} -/// \endcond - /// /// Assigns \a other to this end-to-end encryption metadata class. /// @@ -858,7 +847,7 @@ public: QXmppStanza::Error error; QXmppElementList extensions; QList<QXmppExtendedAddress> extendedAddresses; - QXmppE2eeMetadata e2eeMetadata = QXmppE2eeMetadata(std::nullopt); + QSharedDataPointer<QXmppE2eeMetadataPrivate> e2eeMetadata; }; /// @@ -1018,7 +1007,10 @@ void QXmppStanza::setExtendedAddresses(const QList<QXmppExtendedAddress> &addres /// std::optional<QXmppE2eeMetadata> QXmppStanza::e2eeMetadata() const { - return d->e2eeMetadata.toOptional(); + if (d->e2eeMetadata) { + return QXmppE2eeMetadata(d->e2eeMetadata); + } + return {}; } /// @@ -1028,7 +1020,11 @@ std::optional<QXmppE2eeMetadata> QXmppStanza::e2eeMetadata() const /// void QXmppStanza::setE2eeMetadata(const std::optional<QXmppE2eeMetadata> &e2eeMetadata) { - d->e2eeMetadata = QXmppE2eeMetadata(e2eeMetadata); + if (e2eeMetadata) { + d->e2eeMetadata = e2eeMetadata->d; + } else { + d->e2eeMetadata = nullptr; + } } /// \cond diff --git a/src/base/QXmppStanza.h b/src/base/QXmppStanza.h index d25e3653..05cee32c 100644 --- a/src/base/QXmppStanza.h +++ b/src/base/QXmppStanza.h @@ -72,6 +72,9 @@ class QXMPP_EXPORT QXmppE2eeMetadata { public: QXmppE2eeMetadata(); + /// \cond + QXmppE2eeMetadata(QSharedDataPointer<QXmppE2eeMetadataPrivate> d); + /// \endcond QXmppE2eeMetadata(const QXmppE2eeMetadata &other); ~QXmppE2eeMetadata(); @@ -89,12 +92,6 @@ public: private: friend class QXmppStanza; - friend class QXmppStanzaPrivate; - - /// \cond - explicit QXmppE2eeMetadata(const std::optional<QXmppE2eeMetadata> &other); - std::optional<QXmppE2eeMetadata> toOptional() const; - /// \endcond QSharedDataPointer<QXmppE2eeMetadataPrivate> d; }; |
