From 26568947db794c95a2576679f618dc1759c0a446 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Tue, 6 Sep 2022 20:05:50 +0200 Subject: Add HttpUploadManager for requesting slots and uploading files --- src/client/QXmppHttpUploadManager.h | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/client/QXmppHttpUploadManager.h (limited to 'src/client/QXmppHttpUploadManager.h') 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 +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#ifndef QXMPPHTTPUPLOADMANAGER_H +#define QXMPPHTTPUPLOADMANAGER_H + +#include "QXmppClientExtension.h" +#include "QXmppError.h" + +#include + +#include + +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; + + ~QXmppHttpUpload(); + + float progress() const; + quint64 bytesSent() const; + quint64 bytesTotal() const; + + void cancel(); + bool isFinished() const; + std::optional result() const; + + Q_SIGNAL void progressChanged(); + Q_SIGNAL void finished(const QXmppHttpUpload::Result &result); + +private: + friend class QXmppHttpUploadManager; + + QXmppHttpUpload(); + + std::unique_ptr d; +}; + +Q_DECLARE_METATYPE(QXmppHttpUpload::Result); + +class QXMPP_EXPORT QXmppHttpUploadManager : public QXmppClientExtension +{ + Q_OBJECT +public: + QXmppHttpUploadManager(); + explicit QXmppHttpUploadManager(QNetworkAccessManager *netManager); + ~QXmppHttpUploadManager(); + + std::shared_ptr uploadFile(QIODevice *data, const QString &filename, const QMimeType &mimeType, qint64 fileSize = -1, const QString &uploadServiceJid = {}); + std::shared_ptr uploadFile(const QFileInfo &fileInfo, const QString &filename = {}, const QString &uploadServiceJid = {}); + +private: + std::unique_ptr d; +}; + +#endif // QXMPPHTTPUPLOADMANAGER_H -- cgit v1.2.3