aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
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