diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-09-14 00:06:51 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-09-14 00:38:06 +0200 |
| commit | 2a856cc4a2edc2496eed674f7c2912619738522a (patch) | |
| tree | 525b779d26b2b631513db2e38c237e0ef00cc5f0 /src/base | |
| parent | f672197ba23de12ca6639dccce339c0205a87be5 (diff) | |
| download | qxmpp-2a856cc4a2edc2496eed674f7c2912619738522a.tar.gz | |
Add extra class for HttpFileSource instead of using QUrl
Before just QUrl was used, which was okay. This should make it better
recognizable and it makes clear it is only used for HTTP urls.
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFileShare.cpp | 17 | ||||
| -rw-r--r-- | src/base/QXmppFileShare.h | 5 | ||||
| -rw-r--r-- | src/base/QXmppHttpFileSource.cpp | 64 | ||||
| -rw-r--r-- | src/base/QXmppHttpFileSource.h | 35 |
4 files changed, 110 insertions, 11 deletions
diff --git a/src/base/QXmppFileShare.cpp b/src/base/QXmppFileShare.cpp index 8d73dbe5..c8975ba1 100644 --- a/src/base/QXmppFileShare.cpp +++ b/src/base/QXmppFileShare.cpp @@ -6,6 +6,7 @@ #include "QXmppConstants_p.h" #include "QXmppFileMetadata.h" +#include "QXmppHttpFileSource.h" #include <optional> @@ -42,7 +43,7 @@ class QXmppFileSharePrivate : public QSharedData { public: QXmppFileMetadata metadata; - QVector<QUrl> httpSources; + QVector<QXmppHttpFileSource> httpSources; QXmppFileShare::Disposition disposition = Disposition::Inline; }; /// \endcond @@ -92,12 +93,12 @@ void QXmppFileShare::setMetadata(const QXmppFileMetadata &metadata) d->metadata = metadata; } -const QVector<QUrl> &QXmppFileShare::httpSources() const +const QVector<QXmppHttpFileSource> &QXmppFileShare::httpSources() const { return d->httpSources; } -void QXmppFileShare::setHttpSources(const QVector<QUrl> &newHttpSources) +void QXmppFileShare::setHttpSources(const QVector<QXmppHttpFileSource> &newHttpSources) { d->httpSources = newHttpSources; } @@ -123,8 +124,9 @@ bool QXmppFileShare::parse(const QDomElement &el) for (auto urlEl = sources.firstChildElement("url-data"); !urlEl.isNull(); urlEl = urlEl.nextSiblingElement("url-data")) { - if (urlEl.namespaceURI() == "http://jabber.org/protocol/url-data") { - d->httpSources.append(QUrl(urlEl.attribute("target"))); + QXmppHttpFileSource source; + if (source.parse(urlEl)) { + d->httpSources.push_back(std::move(source)); } } return true; @@ -140,10 +142,7 @@ void QXmppFileShare::toXml(QXmlStreamWriter *writer) const d->metadata.toXml(writer); writer->writeStartElement("sources"); for (const auto &source : d->httpSources) { - writer->writeStartElement("url-data"); - writer->writeDefaultNamespace(ns_url_data); - writer->writeAttribute("target", source.toString()); - writer->writeEndElement(); + source.toXml(writer); } writer->writeEndElement(); writer->writeEndElement(); diff --git a/src/base/QXmppFileShare.h b/src/base/QXmppFileShare.h index 7d38df23..f2055576 100644 --- a/src/base/QXmppFileShare.h +++ b/src/base/QXmppFileShare.h @@ -14,6 +14,7 @@ class QUrl; class QXmlStreamWriter; class QXmppFileSharePrivate; class QXmppFileMetadata; +class QXmppHttpFileSource; class QXMPP_EXPORT QXmppFileShare { @@ -37,8 +38,8 @@ public: const QXmppFileMetadata &metadata() const; void setMetadata(const QXmppFileMetadata &); - const QVector<QUrl> &httpSources() const; - void setHttpSources(const QVector<QUrl> &newHttpSources); + const QVector<QXmppHttpFileSource> &httpSources() const; + void setHttpSources(const QVector<QXmppHttpFileSource> &newHttpSources); /// \cond bool parse(const QDomElement &el); diff --git a/src/base/QXmppHttpFileSource.cpp b/src/base/QXmppHttpFileSource.cpp new file mode 100644 index 00000000..77870160 --- /dev/null +++ b/src/base/QXmppHttpFileSource.cpp @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im> +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "QXmppHttpFileSource.h" + +#include "QXmppConstants_p.h" + +#include <QDomElement> +#include <QXmlStreamWriter> + +/// +/// \class QXmppHttpFileSource +/// +/// Represents an HTTP File source for file sharing. +/// +/// \since QXmpp 1.5 +/// + +/// Default constructor. +QXmppHttpFileSource::QXmppHttpFileSource() = default; + +/// Default constructor. +QXmppHttpFileSource::QXmppHttpFileSource(QUrl url) + : m_url(std::move(url)) +{ +} + +QXMPP_PRIVATE_DEFINE_RULE_OF_SIX(QXmppHttpFileSource) + +/// +/// Returns the HTTP url. +/// +const QUrl &QXmppHttpFileSource::url() const +{ + return m_url; +} + +/// +/// Sets the HTTP url. +/// +void QXmppHttpFileSource::setUrl(QUrl url) +{ + m_url = std::move(url); +} + +/// \cond +bool QXmppHttpFileSource::parse(const QDomElement &el) +{ + if (el.tagName() == "url-data" && el.namespaceURI() == ns_url_data) { + m_url = QUrl(el.attribute("target")); + return true; + } + return false; +} + +void QXmppHttpFileSource::toXml(QXmlStreamWriter *writer) const +{ + writer->writeStartElement("url-data"); + writer->writeDefaultNamespace(ns_url_data); + writer->writeAttribute("target", m_url.toString()); + writer->writeEndElement(); +} +/// \endcond diff --git a/src/base/QXmppHttpFileSource.h b/src/base/QXmppHttpFileSource.h new file mode 100644 index 00000000..af914fb2 --- /dev/null +++ b/src/base/QXmppHttpFileSource.h @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im> +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#ifndef QXMPPHTTPFILESOURCE_H +#define QXMPPHTTPFILESOURCE_H + +#include "QXmppGlobal.h" + +#include <QUrl> + +class QDomElement; +class QXmlStreamWriter; + +class QXMPP_EXPORT QXmppHttpFileSource +{ +public: + QXmppHttpFileSource(); + QXmppHttpFileSource(QUrl url); + QXMPP_PRIVATE_DECLARE_RULE_OF_SIX(QXmppHttpFileSource) + + const QUrl &url() const; + void setUrl(QUrl url); + + /// \cond + bool parse(const QDomElement &el); + void toXml(QXmlStreamWriter *writer) const; + /// \endcond + +private: + static_assert(sizeof(QUrl) == sizeof(void *)); + QUrl m_url; +}; + +#endif // QXMPPHTTPFILESOURCE_H |
