aboutsummaryrefslogtreecommitdiff
path: root/src/client/QXmppHttpUploadManager.h
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-09-06 20:05:50 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-09 22:49:06 +0200
commit26568947db794c95a2576679f618dc1759c0a446 (patch)
treebbd3c72bc60969673bf15d9ccbdb96fd092a8b93 /src/client/QXmppHttpUploadManager.h
parentb113ae300efe5dc17f148a06df09062546bf54ee (diff)
downloadqxmpp-26568947db794c95a2576679f618dc1759c0a446.tar.gz
Add HttpUploadManager for requesting slots and uploading files
Diffstat (limited to 'src/client/QXmppHttpUploadManager.h')
-rw-r--r--src/client/QXmppHttpUploadManager.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/client/QXmppHttpUploadManager.h b/src/client/QXmppHttpUploadManager.h
new file mode 100644
index 00000000..87a55446
--- /dev/null
+++ b/src/client/QXmppHttpUploadManager.h
@@ -0,0 +1,72 @@
+// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im>
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#ifndef QXMPPHTTPUPLOADMANAGER_H
+#define QXMPPHTTPUPLOADMANAGER_H
+
+#include "QXmppClientExtension.h"
+#include "QXmppError.h"
+
+#include <variant>
+
+#include <QUrl>
+
+class QFileInfo;
+class QNetworkAccessManager;
+struct QXmppHttpUploadPrivate;
+struct QXmppHttpUploadManagerPrivate;
+
+class QXMPP_EXPORT QXmppHttpUpload : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(float progress READ progress NOTIFY progressChanged)
+ Q_PROPERTY(quint64 bytesSent READ bytesSent NOTIFY progressChanged)
+ Q_PROPERTY(quint64 bytesTotal READ bytesTotal NOTIFY progressChanged)
+
+public:
+ struct Cancelled
+ {
+ };
+
+ using Result = std::variant<QUrl, Cancelled, QXmppError>;
+
+ ~QXmppHttpUpload();
+
+ float progress() const;
+ quint64 bytesSent() const;
+ quint64 bytesTotal() const;
+
+ void cancel();
+ bool isFinished() const;
+ std::optional<Result> result() const;
+
+ Q_SIGNAL void progressChanged();
+ Q_SIGNAL void finished(const QXmppHttpUpload::Result &result);
+
+private:
+ friend class QXmppHttpUploadManager;
+
+ QXmppHttpUpload();
+
+ std::unique_ptr<QXmppHttpUploadPrivate> d;
+};
+
+Q_DECLARE_METATYPE(QXmppHttpUpload::Result);
+
+class QXMPP_EXPORT QXmppHttpUploadManager : public QXmppClientExtension
+{
+ Q_OBJECT
+public:
+ QXmppHttpUploadManager();
+ explicit QXmppHttpUploadManager(QNetworkAccessManager *netManager);
+ ~QXmppHttpUploadManager();
+
+ std::shared_ptr<QXmppHttpUpload> uploadFile(QIODevice *data, const QString &filename, const QMimeType &mimeType, qint64 fileSize = -1, const QString &uploadServiceJid = {});
+ std::shared_ptr<QXmppHttpUpload> uploadFile(const QFileInfo &fileInfo, const QString &filename = {}, const QString &uploadServiceJid = {});
+
+private:
+ std::unique_ptr<QXmppHttpUploadManagerPrivate> d;
+};
+
+#endif // QXMPPHTTPUPLOADMANAGER_H