aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-09-14 00:06:51 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-14 00:38:06 +0200
commit2a856cc4a2edc2496eed674f7c2912619738522a (patch)
tree525b779d26b2b631513db2e38c237e0ef00cc5f0 /src/base
parentf672197ba23de12ca6639dccce339c0205a87be5 (diff)
downloadqxmpp-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.cpp17
-rw-r--r--src/base/QXmppFileShare.h5
-rw-r--r--src/base/QXmppHttpFileSource.cpp64
-rw-r--r--src/base/QXmppHttpFileSource.h35
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