aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-04-28 18:26:21 +0200
committerLinus Jahn <lnj@kaidan.im>2021-06-27 20:17:18 +0200
commitc02b2a1d93b75e5210a2024b398df83c121ae7e7 (patch)
tree6d810590cf3f5acb3af7692c0723d7253dd6abfc /src
parent9c9377f609d87578051ab6521544d1f3d80b8011 (diff)
downloadqxmpp-c02b2a1d93b75e5210a2024b398df83c121ae7e7.tar.gz
DiscoveryManager: Add QFuture-based requests
Diffstat (limited to 'src')
-rw-r--r--src/client/QXmppDiscoveryManager.cpp67
-rw-r--r--src/client/QXmppDiscoveryManager.h9
2 files changed, 76 insertions, 0 deletions
diff --git a/src/client/QXmppDiscoveryManager.cpp b/src/client/QXmppDiscoveryManager.cpp
index 0cb34831..6f7d3654 100644
--- a/src/client/QXmppDiscoveryManager.cpp
+++ b/src/client/QXmppDiscoveryManager.cpp
@@ -29,6 +29,7 @@
#include "QXmppDataForm.h"
#include "QXmppDiscoveryIq.h"
#include "QXmppGlobal.h"
+#include "QXmppGlobal_p.h"
#include "QXmppStream.h"
#include <QCoreApplication>
@@ -44,6 +45,24 @@ public:
QXmppDataForm clientInfoForm;
};
+///
+/// \typedef QXmppDiscoveryManager::InfoResult
+///
+/// Contains the discovery information result in the form of an QXmppDiscoveryIq
+/// or (in case the request did not succeed) a QXmppStanza::Error.
+///
+/// \since QXmpp 1.5
+///
+
+///
+/// \typedef QXmppDiscoveryManager::ItemsResult
+///
+/// Contains a list of service discovery items or (in case the request did not
+/// succeed) a QXmppStanza::Error.
+///
+/// \since QXmpp 1.5
+///
+
QXmppDiscoveryManager::QXmppDiscoveryManager()
: d(new QXmppDiscoveryManagerPrivate)
{
@@ -104,6 +123,54 @@ QString QXmppDiscoveryManager::requestItems(const QString& jid, const QString& n
}
///
+/// Requests information from the specified XMPP entity.
+///
+/// \param jid The target entity's JID.
+/// \param node The target node (optional).
+///
+/// \warning THIS API IS NOT FINALIZED YET!
+///
+/// \since QXmpp 1.5
+///
+QFuture<QXmppDiscoveryManager::InfoResult> QXmppDiscoveryManager::requestDiscoInfo(const QString &jid, const QString &node)
+{
+ QXmppDiscoveryIq request;
+ request.setType(QXmppIq::Get);
+ request.setQueryType(QXmppDiscoveryIq::InfoQuery);
+ request.setTo(jid);
+ if (!node.isEmpty()) {
+ request.setQueryNode(node);
+ }
+
+ return chainIq<InfoResult, QXmppDiscoveryIq>(client()->sendIq(request), this);
+}
+
+///
+/// Requests items from the specified XMPP entity.
+///
+/// \param jid The target entity's JID.
+/// \param node The target node (optional).
+///
+/// \warning THIS API IS NOT FINALIZED YET!
+///
+/// \since QXmpp 1.5
+///
+QFuture<QXmppDiscoveryManager::ItemsResult> QXmppDiscoveryManager::requestDiscoItems(const QString &jid, const QString &node)
+{
+ QXmppDiscoveryIq request;
+ request.setType(QXmppIq::Get);
+ request.setQueryType(QXmppDiscoveryIq::ItemsQuery);
+ request.setTo(jid);
+ if (!node.isEmpty()) {
+ request.setQueryNode(node);
+ }
+
+ return chainIq<ItemsResult, QXmppDiscoveryIq>(client()->sendIq(request), this, [](QXmppDiscoveryIq &&iq) {
+ return iq.items();
+ });
+}
+
+///
/// Returns the client's full capabilities.
///
QXmppDiscoveryIq QXmppDiscoveryManager::capabilities()
diff --git a/src/client/QXmppDiscoveryManager.h b/src/client/QXmppDiscoveryManager.h
index 81500b69..727d876a 100644
--- a/src/client/QXmppDiscoveryManager.h
+++ b/src/client/QXmppDiscoveryManager.h
@@ -26,6 +26,10 @@
#include "QXmppClientExtension.h"
+#include <variant>
+
+template<typename T>
+class QFuture;
class QXmppDataForm;
class QXmppDiscoveryIq;
class QXmppDiscoveryManagerPrivate;
@@ -48,6 +52,11 @@ public:
QString requestInfo(const QString& jid, const QString& node = QString());
QString requestItems(const QString& jid, const QString& node = QString());
+ using InfoResult = std::variant<QXmppDiscoveryIq, QXmppStanza::Error>;
+ using ItemsResult = std::variant<QList<QXmppDiscoveryIq::Item>, QXmppStanza::Error>;
+ QFuture<InfoResult> requestDiscoInfo(const QString &jid, const QString &node = {});
+ QFuture<ItemsResult> requestDiscoItems(const QString &jid, const QString &node = {});
+
QString clientCapabilitiesNode() const;
void setClientCapabilitiesNode(const QString&);