QXmpp  Version: 1.5.3
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 
85 {
86  Q_OBJECT
87 
88 public:
91 
92  QString requestUploadSlot(const QFileInfo &file,
93  const QString &uploadService = QString());
94  QString requestUploadSlot(const QFileInfo &file,
95  const QString &customFileName,
96  const QString &uploadService = QString());
97  QString requestUploadSlot(const QString &fileName,
98  qint64 fileSize,
99  const QMimeType &mimeType,
100  const QString &uploadService = QString());
101 
102  using SlotResult = std::variant<QXmppHttpUploadSlotIq, QXmppError>;
103  QXmppTask<SlotResult> requestSlot(const QFileInfo &file,
104  const QString &uploadService = {});
105  QXmppTask<SlotResult> requestSlot(const QFileInfo &file,
106  const QString &customFileName,
107  const QString &uploadService = {});
108  QXmppTask<SlotResult> requestSlot(const QString &fileName,
109  qint64 fileSize,
110  const QMimeType &mimeType,
111  const QString &uploadService = {});
112 
113  bool serviceFound() const;
114 
115  QVector<QXmppUploadService> uploadServices() const;
116 
117  bool handleStanza(const QDomElement &stanza) override;
118 
119 Q_SIGNALS:
121  void slotReceived(const QXmppHttpUploadSlotIq &slot);
122 
126  void requestFailed(const QXmppHttpUploadRequestIq &request);
127 
129  void serviceFoundChanged();
130 
131 protected:
132  void setClient(QXmppClient *client) override;
133 
134 private:
135  void handleDiscoInfo(const QXmppDiscoveryIq &iq);
136 
137  const std::unique_ptr<QXmppUploadRequestManagerPrivate> d;
138 };
139 
140 #endif // QXMPPUPLOADREQUESTMANAGER_H
QXmppUploadService represents an HTTP File Upload service.
Definition: QXmppUploadRequestManager.h:29
std::variant< QXmppHttpUploadSlotIq, QXmppError > SlotResult
Definition: QXmppUploadRequestManager.h:102
The QXmppUploadRequestManager implements the core of XEP-0369: HTTP File Upload.
Definition: QXmppUploadRequestManager.h:84
virtual bool handleStanza(const QDomElement &stanza)
You need to implement this method to process incoming XMPP stanzas.
Definition: QXmppClientExtension.cpp:51
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:66
Definition: QXmppStream.h:20
Definition: QXmppDiscoveryIq.h:17
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:32
virtual void setClient(QXmppClient *client)
Definition: QXmppClientExtension.cpp:88
The QXmppClient class is the main class for using QXmpp.
Definition: QXmppClient.h:83