diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-09-06 20:05:50 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-09-09 22:49:06 +0200 |
| commit | 26568947db794c95a2576679f618dc1759c0a446 (patch) | |
| tree | bbd3c72bc60969673bf15d9ccbdb96fd092a8b93 /src/client/QXmppHttpUploadManager.h | |
| parent | b113ae300efe5dc17f148a06df09062546bf54ee (diff) | |
| download | qxmpp-26568947db794c95a2576679f618dc1759c0a446.tar.gz | |
Add HttpUploadManager for requesting slots and uploading files
Diffstat (limited to 'src/client/QXmppHttpUploadManager.h')
| -rw-r--r-- | src/client/QXmppHttpUploadManager.h | 72 |
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 |
