From 1b5c7c466d0ca2df80cdec5009cac541afa735c7 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Thu, 29 Dec 2022 21:39:25 +0100 Subject: Stanza: Make error optional Closes #512. --- src/base/QXmppStanza.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) (limited to 'src/base/QXmppStanza.cpp') diff --git a/src/base/QXmppStanza.cpp b/src/base/QXmppStanza.cpp index fa170740..2d851f09 100644 --- a/src/base/QXmppStanza.cpp +++ b/src/base/QXmppStanza.cpp @@ -354,6 +354,13 @@ QXmppStanza::Error::Error(const QString &type, const QString &cond, d->condition = conditionFromString(cond); } +/// \cond +QXmppStanza::Error::Error(QSharedDataPointer d) + : d(std::move(d)) +{ +} +/// \endcond + /// Default destructor QXmppStanza::Error::~Error() = default; /// Copy operator @@ -850,7 +857,7 @@ public: QString from; QString id; QString lang; - QXmppStanza::Error error; + QSharedDataPointer error; QXmppElementList extensions; QList extendedAddresses; QSharedDataPointer e2eeMetadata; @@ -955,9 +962,24 @@ void QXmppStanza::setLang(const QString &lang) /// /// Returns the stanza's error. /// +/// If the stanza has no error a default constructed QXmppStanza::Error is returned. +/// QXmppStanza::Error QXmppStanza::error() const { - return d->error; + return d->error ? Error { d->error } : Error(); +} + +/// +/// Returns the stanza's error. +/// +/// \since QXmpp 1.5 +/// +std::optional QXmppStanza::errorOptional() const +{ + if (d->error) { + return Error { d->error }; + } + return {}; } /// @@ -967,7 +989,23 @@ QXmppStanza::Error QXmppStanza::error() const /// void QXmppStanza::setError(const QXmppStanza::Error &error) { - d->error = error; + d->error = error.d; +} + +/// +/// Sets the stanza's error. +/// +/// If you set an empty optional, this will remove the error. +/// +/// \since QXmpp 1.5 +/// +void QXmppStanza::setError(const std::optional &error) +{ + if (error) { + d->error = error->d; + } else { + d->error = nullptr; + } } /// @@ -1052,7 +1090,9 @@ void QXmppStanza::parse(const QDomElement &element) QDomElement errorElement = element.firstChildElement("error"); if (!errorElement.isNull()) { - d->error.parse(errorElement); + Error error; + error.parse(errorElement); + d->error = error.d; } // XEP-0033: Extended Stanza Addressing -- cgit v1.2.3