QXmpp  Version: 1.15.1
QXmppUploadRequestManager.h
1 // SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
2 //
3 // SPDX-License-Identifier: LGPL-2.1-or-later
4 
5 #ifndef QXMPPUPLOADREQUESTMANAGER_H
6 #define QXMPPUPLOADREQUESTMANAGER_H
7 
8 #include "QXmppClientExtension.h"
9 #include "QXmppError.h"
10 
11 #include <variant>
12 
13 #include <QSharedDataPointer>
14 
15 class QFileInfo;
16 template<typename T>
17 class QXmppTask;
18 class QMimeType;
21 class QXmppUploadServicePrivate;
22 class QXmppUploadRequestManagerPrivate;
23 
29 class QXMPP_EXPORT QXmppUploadService
30 {
31 public:
35 
36  QXmppUploadService &operator=(const QXmppUploadService &);
37 
38  QString jid() const;
39  void setJid(const QString &jid);
40 
41  qint64 sizeLimit() const;
42  void setSizeLimit(qint64 sizeLimit);
43 
44 private:
45  QSharedDataPointer<QXmppUploadServicePrivate> d;
46 };
47 
84 {
85  Q_OBJECT
86 
87 public:
90 
91  QString requestUploadSlot(const QFileInfo &file,
92  const QString &uploadService = QString());
93  QString requestUploadSlot(const QFileInfo &file,
94  const QString &customFileName,
95  const QString &uploadService = QString());
96  QString requestUploadSlot(const QString &fileName,
97  qint64 fileSize,
98  const QMimeType &mimeType,
99  const QString &uploadService = QString());
100 
101  using SlotResult = std::variant<QXmppHttpUploadSlotIq, QXmppError>;
102  auto requestSlot(const QFileInfo &file, const QString &uploadService = {}) -> QXmppTask<SlotResult>;
103  auto requestSlot(const QFileInfo &file, const QString &customFileName, const QString &uploadService = {}) -> QXmppTask<SlotResult>;
104  auto requestSlot(const QString &fileName, qint64 fileSize, const QMimeType &mimeType, const QString &uploadService = {}) -> QXmppTask<SlotResult>;
105 
106  bool serviceFound() const;
107 
108  QVector<QXmppUploadService> uploadServices() const;
109 
110  bool handleStanza(const QDomElement &stanza) override;
111 
113  Q_SIGNAL void slotReceived(const QXmppHttpUploadSlotIq &slot);
114 
118  Q_SIGNAL void requestFailed(const QXmppHttpUploadRequestIq &request);
119 
121  Q_SIGNAL void serviceFoundChanged();
122 
123 protected:
124  void onRegistered(QXmppClient *client) override;
125  void onUnregistered(QXmppClient *client) override;
126 
127 private:
128  void handleDiscoInfo(const QXmppDiscoveryIq &iq);
129 
130  const std::unique_ptr<QXmppUploadRequestManagerPrivate> d;
131 };
132 
133 #endif // QXMPPUPLOADREQUESTMANAGER_H
virtual void onRegistered(QXmppClient *client)
Definition: QXmppClientExtension.cpp:85
QXmppUploadService represents an HTTP File Upload service.
Definition: QXmppUploadRequestManager.h:29
std::variant< QXmppHttpUploadSlotIq, QXmppError > SlotResult
Definition: QXmppUploadRequestManager.h:101
The QXmppUploadRequestManager implements the core of XEP-0363: HTTP File Upload.
Definition: QXmppUploadRequestManager.h:83
virtual void onUnregistered(QXmppClient *client)
Definition: QXmppClientExtension.cpp:95
virtual bool handleStanza(const QDomElement &stanza)
You need to implement this method to process incoming XMPP stanzas.
Definition: client/compat/removed_api.cpp:45
Represents an HTTP File Upload IQ for requesting an upload slot as defined by XEP-0363: HTTP File Upl...
Definition: QXmppHttpUploadIq.h:26
Represents an HTTP File Upload IQ result for receiving an upload slot as defined by XEP-0363: HTTP Fi...
Definition: QXmppHttpUploadIq.h:68
Definition: QXmppTask.h:67
Definition: QXmppDiscoveryIq.h:199
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:31
Main class for starting and managing connections to XMPP servers.
Definition: QXmppClient.h:61