aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppFileShare.cpp
diff options
context:
space:
mode:
authorJonah BrĂ¼chert <jbb@kaidan.im>2022-09-09 23:15:10 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-29 23:46:36 +0200
commit68f167995e7ba71a6f2e556a7a0eab3d234e2d1a (patch)
treede645b606d96f01da7ea6db63e90224519a89de3 /src/base/QXmppFileShare.cpp
parent7b02df3ef42ccb2d8c40eea901c5c6dd4b140204 (diff)
downloadqxmpp-68f167995e7ba71a6f2e556a7a0eab3d234e2d1a.tar.gz
Implement XEP-0448: Stateless File Sharing
This adds a file sharing manager that is capable of using multiple back ends. Currently implemented are a normal HTTP File Upload backend and an encrypted HTTP File Upload. Jingle File Transfer could be implemented later. Co-authored-by: Linus Jahn <lnj@kaidan.im>
Diffstat (limited to 'src/base/QXmppFileShare.cpp')
-rw-r--r--src/base/QXmppFileShare.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/base/QXmppFileShare.cpp b/src/base/QXmppFileShare.cpp
index 9dd4b686..28276b0c 100644
--- a/src/base/QXmppFileShare.cpp
+++ b/src/base/QXmppFileShare.cpp
@@ -125,6 +125,29 @@ void QXmppFileShare::setEncryptedSourecs(const QVector<QXmppEncryptedFileSource>
}
/// \cond
+void QXmppFileShare::visitSources(std::function<bool(const std::any &)> &&visitor) const
+{
+ for (const auto &httpSource : d->httpSources) {
+ if (visitor(httpSource)) {
+ return;
+ }
+ }
+ for (const auto &encryptedSource : d->encryptedSources) {
+ if (visitor(encryptedSource)) {
+ return;
+ }
+ }
+}
+
+void QXmppFileShare::addSource(const std::any &source)
+{
+ if (source.type() == typeid(QXmppHttpFileSource)) {
+ d->httpSources.push_back(std::any_cast<QXmppHttpFileSource>(source));
+ } else if (source.type() == typeid(QXmppEncryptedFileSource)) {
+ d->encryptedSources.push_back(std::any_cast<QXmppEncryptedFileSource>(source));
+ }
+}
+
bool QXmppFileShare::parse(const QDomElement &el)
{
if (el.tagName() == "file-sharing" && el.namespaceURI() == ns_sfs) {