aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-04-07 18:54:54 +0200
committerLinus Jahn <lnj@kaidan.im>2022-04-09 22:27:12 +0200
commit94f4a045d5f7994fbe000f41a3fd2f6bf4431511 (patch)
treefe42800301a56f4109a11f1775fb7a37022b76b5
parenta42c11570b9bba3465fb79dc936de6cb3c7c48cb (diff)
downloadqxmpp-94f4a045d5f7994fbe000f41a3fd2f6bf4431511.tar.gz
PubSubManager: Add requestPepFeatures()
-rw-r--r--src/client/QXmppPubSubManager.cpp11
-rw-r--r--src/client/QXmppPubSubManager.h1
-rw-r--r--tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp20
3 files changed, 32 insertions, 0 deletions
diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp
index 00d537db..c27b5fcb 100644
--- a/src/client/QXmppPubSubManager.cpp
+++ b/src/client/QXmppPubSubManager.cpp
@@ -744,6 +744,17 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(cons
}
///
+/// \fn QXmppPubSubManager::requestPepFeatures()
+///
+/// Requests all features of the own PEP service via service discovery.
+///
+/// This is a convenience method equivalent to calling
+/// QXmppPubSubManager::requestFeatures on the current account's bare JID.
+///
+/// \warning THIS API IS NOT FINALIZED YET!
+///
+
+///
///
/// \fn QXmppPubSubManager::fetchPepNodes()
///
diff --git a/src/client/QXmppPubSubManager.h b/src/client/QXmppPubSubManager.h
index 8c7a014b..9a4e192e 100644
--- a/src/client/QXmppPubSubManager.h
+++ b/src/client/QXmppPubSubManager.h
@@ -118,6 +118,7 @@ public:
QFuture<Result> unsubscribeFromNode(const QString &serviceJid, const QString &nodeName, const QString &subscriberJid);
// PEP-specific (the PubSub service is the current account)
+ inline QFuture<FeaturesResult> requestPepFeatures() { return requestFeatures(client()->configuration().jidBare(), Pep); };
inline QFuture<NodesResult> fetchPepNodes() { return fetchNodes(client()->configuration().jidBare()); };
inline QFuture<Result> createPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); }
inline QFuture<Result> createPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); }
diff --git a/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp b/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp
index 11c41dd2..8eadc895 100644
--- a/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp
+++ b/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp
@@ -71,6 +71,7 @@ class tst_QXmppPubSubManager : public QObject
private:
Q_SLOT void testDiscoFeatures();
Q_SLOT void testRequestFeatures();
+ Q_SLOT void testRequestPepFeatures();
Q_SLOT void testFetchNodes();
Q_SLOT void testFetchPepNodes();
Q_SLOT void testCreateNodes_data();
@@ -218,6 +219,25 @@ void tst_QXmppPubSubManager::testRequestFeatures()
QCOMPARE(features, (QVector<QString> { ns_pubsub, ns_pubsub_auto_create }));
}
+void tst_QXmppPubSubManager::testRequestPepFeatures()
+{
+ auto [test, psManager] = Client();
+
+ auto future = psManager->requestPepFeatures();
+ test.expect(QStringLiteral("<iq id='qxmpp1' type='get'>"
+ "<query xmlns='http://jabber.org/protocol/disco#info'/>"
+ "</iq>"));
+ test.inject(QStringLiteral("<iq type='result' from='juliet@capulet.lit' to='juliet@capulet.lit/balcony' id='qxmpp1'>"
+ "<query xmlns='http://jabber.org/protocol/disco#info'>"
+ "<identity category='pubsub' type='pep'/>"
+ "<feature var='http://jabber.org/protocol/pubsub'/>"
+ "<feature var='http://jabber.org/protocol/pubsub#auto-create'/>"
+ "</query></iq>"));
+
+ auto features = expectFutureVariant<QVector<QString>>(future);
+ QCOMPARE(features, (QVector<QString> { ns_pubsub, ns_pubsub_auto_create }));
+}
+
void tst_QXmppPubSubManager::testFetchNodes()
{
auto [test, psManager] = Client();