From 1916eca1a982b22c10c1c737fcbcb86bee0ec5cc Mon Sep 17 00:00:00 2001 From: Jonah BrĂ¼chert Date: Wed, 28 Sep 2022 13:38:25 +0200 Subject: Allow adding multiple oob urls and a description --- src/base/QXmppOutOfBandUrl.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/base/QXmppOutOfBandUrl.cpp (limited to 'src/base/QXmppOutOfBandUrl.cpp') diff --git a/src/base/QXmppOutOfBandUrl.cpp b/src/base/QXmppOutOfBandUrl.cpp new file mode 100644 index 00000000..d986ae11 --- /dev/null +++ b/src/base/QXmppOutOfBandUrl.cpp @@ -0,0 +1,88 @@ +// SPDX-FileCopyrightText: 2022 Jonah BrĂ¼chert +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "QXmppOutOfBandUrl.h" + +#include "QXmppConstants_p.h" + +#include +#include + +class QXmppOutOfBandUrlPrivate : public QSharedData +{ +public: + QString url; + std::optional description; +}; + +/// +/// \class QXmppOutOfBandUrl +/// +/// A URL and a description of its contents, from \xep{0066}: Out of Band Data +/// +/// \since QXmpp 1.5 +/// + +QXmppOutOfBandUrl::QXmppOutOfBandUrl() + : d(new QXmppOutOfBandUrlPrivate()) +{ +} + +QXMPP_PRIVATE_DEFINE_RULE_OF_SIX(QXmppOutOfBandUrl); + +/// +/// Returns the attached URL +/// +const QString &QXmppOutOfBandUrl::url() const +{ + return d->url; +} + +/// +/// Sets the attached URL +/// +void QXmppOutOfBandUrl::setUrl(const QString &url) +{ + d->url = url; +} + +/// +/// Returns the description of the URL +/// +const std::optional &QXmppOutOfBandUrl::description() const +{ + return d->description; +} + +/// +/// Set the description of the URL +/// +void QXmppOutOfBandUrl::setDescription(const std::optional &description) +{ + d->description = description; +} + +/// \cond +bool QXmppOutOfBandUrl::parse(const QDomElement &el) +{ + d->url = el.firstChildElement(QStringLiteral("url")).text(); + auto childEl = el.firstChildElement(QStringLiteral("desc")); + if (!childEl.isNull()) { + d->description = childEl.text(); + } + + return true; +} + +void QXmppOutOfBandUrl::toXml(QXmlStreamWriter *writer) const +{ + writer->writeStartElement(QStringLiteral("x")); + writer->writeDefaultNamespace(ns_oob); + writer->writeTextElement(QStringLiteral("url"), d->url); + if (d->description) { + writer->writeTextElement(QStringLiteral("desc"), *d->description); + } + writer->writeEndElement(); +} +/// \endcond -- cgit v1.2.3