QXmpp Version: 1.15.1
Loading...
Searching...
No Matches
QXmppHttpUploadManager.h
1// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im>
2// SPDX-FileCopyrightText: 2025 Filipe Azevedo <pasnox@gmail.com>
3//
4// SPDX-License-Identifier: LGPL-2.1-or-later
5
6#ifndef QXMPPHTTPUPLOADMANAGER_H
7#define QXMPPHTTPUPLOADMANAGER_H
8
9#include "QXmppClientExtension.h"
10#include "QXmppError.h"
11
12#include <optional>
13#include <variant>
14
15#include <QUrl>
16
17class QFileInfo;
18class QNetworkAccessManager;
19class QXmppHttpUploadServicePrivate;
21template<typename T>
22class QXmppTask;
23struct QXmppHttpUploadPrivate;
24struct QXmppHttpUploadManagerPrivate;
25
26class QXMPP_EXPORT QXmppHttpUploadService
27{
28public:
30 QXMPP_PRIVATE_DECLARE_RULE_OF_SIX(QXmppHttpUploadService)
31
32 QString jid() const;
33 void setJid(const QString &jid);
34
35 std::optional<quint64> sizeLimit() const;
36 void setSizeLimit(std::optional<quint64> sizeLimit);
37
38private:
39 QSharedDataPointer<QXmppHttpUploadServicePrivate> d;
40};
41
42class QXMPP_EXPORT QXmppHttpUpload : public QObject
43{
44 Q_OBJECT
45 Q_PROPERTY(float progress READ progress NOTIFY progressChanged)
46 Q_PROPERTY(quint64 bytesSent READ bytesSent NOTIFY progressChanged)
47 Q_PROPERTY(quint64 bytesTotal READ bytesTotal NOTIFY progressChanged)
48
49public:
50 using Result = std::variant<QUrl, QXmpp::Cancelled, QXmppError>;
51
53
54 float progress() const;
55 quint64 bytesSent() const;
56 quint64 bytesTotal() const;
57
58 void cancel();
59 bool isFinished() const;
60 std::optional<Result> result() const;
61
62 Q_SIGNAL void progressChanged();
63 Q_SIGNAL void finished(const QXmppHttpUpload::Result &result);
64
65private:
66 friend class QXmppHttpUploadManager;
67
69
70 std::unique_ptr<QXmppHttpUploadPrivate> d;
71};
72
73Q_DECLARE_METATYPE(QXmppHttpUpload::Result);
74
76{
77 Q_OBJECT
78 Q_PROPERTY(QVector<QXmppHttpUploadService> services READ services NOTIFY servicesChanged)
79 Q_PROPERTY(QXmppHttpUploadManager::Support support READ support NOTIFY supportChanged)
80
81public:
82 enum class Support {
83 Unknown,
84 Unsupported,
85 Supported,
86 };
87 Q_ENUM(Support)
88
90 explicit QXmppHttpUploadManager(QNetworkAccessManager *netManager);
92
93 QVector<QXmppHttpUploadService> services() const;
94 Q_SIGNAL void servicesChanged();
95
96 Support support() const;
97 Q_SIGNAL void supportChanged();
98
99 std::shared_ptr<QXmppHttpUpload> uploadFile(std::unique_ptr<QIODevice> data, const QString &filename, const QMimeType &mimeType, qint64 fileSize = -1, const QString &uploadServiceJid = {});
100 std::shared_ptr<QXmppHttpUpload> uploadFile(const QFileInfo &fileInfo, const QString &filename = {}, const QString &uploadServiceJid = {});
101
102protected:
103 void onRegistered(QXmppClient *client) override;
104 void onUnregistered(QXmppClient *client) override;
105
106private:
107 using SlotResult = std::variant<QXmppHttpUploadSlotIq, QXmppError>;
108 QXmppTask<SlotResult> requestSlot(const QFileInfo &file,
109 const QString &uploadService = {});
110 QXmppTask<SlotResult> requestSlot(const QFileInfo &file,
111 const QString &customFileName,
112 const QString &uploadService = {});
113 QXmppTask<SlotResult> requestSlot(const QString &fileName,
114 qint64 fileSize,
115 const QMimeType &mimeType,
116 const QString &uploadService = {});
117
118 friend struct QXmppHttpUploadManagerPrivate;
119
120 std::unique_ptr<QXmppHttpUploadManagerPrivate> d;
121};
122
123#endif // QXMPPHTTPUPLOADMANAGER_H
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition QXmppClientExtension.h:32
Main class for starting and managing connections to XMPP servers.
Definition QXmppClient.h:62
Definition QXmppHttpUploadManager.h:76
Q_SIGNAL void supportChanged()
Emitted when support has changed.
Q_SIGNAL void servicesChanged()
Emitted when services have changed.
Support
Definition QXmppHttpUploadManager.h:82
QXmppHttpUploadService represents an HTTP File Upload service.
Definition QXmppHttpUploadManager.h:27
Represents an HTTP File Upload IQ result for receiving an upload slot as defined by XEP-0363: HTTP Fi...
Definition QXmppHttpUploadIq.h:69
Definition QXmppHttpUploadManager.h:43
std::variant< QUrl, QXmpp::Cancelled, QXmppError > Result
Definition QXmppHttpUploadManager.h:50
Definition QXmppTask.h:330
Definition Algorithms.h:14
Definition QXmppError.h:17