diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-01-27 15:50:07 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-04-09 22:27:11 +0200 |
| commit | d306ed08aa9d681a0b51ebbf2ec2a00b70b61018 (patch) | |
| tree | 1648841a121582bd68b9d1b70df1ac92fdc69af8 | |
| parent | 0db9b42c59864d771f5269c54884862fa897437e (diff) | |
| download | qxmpp-d306ed08aa9d681a0b51ebbf2ec2a00b70b61018.tar.gz | |
PubSubManager: Add PEP overloads for requestItem and similar
| -rw-r--r-- | src/client/QXmppPubSubManager.cpp | 50 | ||||
| -rw-r--r-- | src/client/QXmppPubSubManager.h | 7 | ||||
| -rw-r--r-- | tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp | 88 |
3 files changed, 145 insertions, 0 deletions
diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp index 52cb5de8..8e2a1b6f 100644 --- a/src/client/QXmppPubSubManager.cpp +++ b/src/client/QXmppPubSubManager.cpp @@ -741,6 +741,56 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::unsubscribeFromNode(cons /// /// +/// \fn QXmppPubSubManager::requestPepItem(const QString &nodeName, const QString &itemId) +/// +/// Requests a specific item of a PEP node. +/// +/// This is a convenience method equivalent to calling +/// QXmppPubSubManager::requestItem on the current account's bare JID. +/// +/// \param nodeName name of the PEP node whose item is requested +/// \param itemId ID of the requested item +/// + +/// +/// \fn QXmppPubSubManager::requestPepItem(const QString &nodeName, StandardItemId itemId) +/// +/// Requests a specific item of a PEP node. +/// +/// The default value of itemId is used for singleton nodes (i.e., the node's +/// single item is requested). +/// +/// This is a convenience method equivalent to calling +/// QXmppPubSubManager::requestItem on the current account's bare JID. +/// +/// \param nodeName name of the PEP node whose item is requested +/// \param itemId ID of the requested item +/// + +/// +/// \fn QXmppPubSubManager::requestPepItems(const QString &nodeName) +/// +/// Requests all items of a PEP node. +/// +/// This is a convenience method equivalent to calling +/// QXmppPubSubManager::requestItems on the current account's bare JID. +/// +/// \param nodeName name of the PEP node whose items are requested +/// + +/// +/// \fn QXmppPubSubManager::requestPepItemIds(const QString &nodeName) +/// +/// Requests the IDs of all items of a pubsub service node via service +/// discovery. +/// +/// This is a convenience method equivalent to calling +/// QXmppPubSubManager::requestItemIds on the current account's bare JID. +/// +/// \param nodeName name of the PEP node whose item IDs are requested +/// + +/// /// \fn QXmppPubSubManager::retractPepItem(const QString &nodeName, const QString &itemId) /// /// Deletes an item from a PEP node. diff --git a/src/client/QXmppPubSubManager.h b/src/client/QXmppPubSubManager.h index 63c14f22..8e02f801 100644 --- a/src/client/QXmppPubSubManager.h +++ b/src/client/QXmppPubSubManager.h @@ -104,6 +104,13 @@ public: 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); } inline QFuture<Result> deletePepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } + template<typename T = QXmppPubSubItem> + inline QFuture<ItemResult<T>> requestPepItem(const QString &nodeName, const QString &itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } + template<typename T = QXmppPubSubItem> + inline QFuture<ItemResult<T>> requestPepItem(const QString &nodeName, StandardItemId itemId = Current) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } + template<typename T = QXmppPubSubItem> + inline QFuture<ItemsResult<T>> requestPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } + inline QFuture<ItemIdsResult> requestPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } template<typename T> QFuture<PublishItemResult> publishPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions); template<typename T> diff --git a/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp b/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp index b3678f89..602e9c39 100644 --- a/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp +++ b/tests/qxmpppubsubmanager/tst_qxmpppubsubmanager.cpp @@ -85,9 +85,13 @@ private: Q_SLOT void testPurgeItems(); Q_SLOT void testPurgePepItems(); Q_SLOT void testRequestItemIds(); + Q_SLOT void testRequestPepItemIds(); Q_SLOT void testRequestCurrentItem(); Q_SLOT void testRequestItems_data(); Q_SLOT void testRequestItems(); + Q_SLOT void testRequestCurrentPepItem(); + Q_SLOT void testRequestPepItem(); + Q_SLOT void testRequestPepItems(); Q_SLOT void testRequestItemNotFound(); Q_SLOT void testRequestNodeAffiliations(); Q_SLOT void testRequestAffiliations(); @@ -564,6 +568,24 @@ void tst_QXmppPubSubManager::testRequestItemIds() QCOMPARE(itemIds, (QVector<QString> { QStringLiteral("368866411b877c30064a5f62b917cffe"), QStringLiteral("3300659945416e274474e469a1f0154c") })); } +void tst_QXmppPubSubManager::testRequestPepItemIds() +{ + auto [test, psManager] = Client(); + + auto future = psManager->requestPepItemIds(QStringLiteral("princely_musings")); + test.expect(QStringLiteral("<iq id='qxmpp1' type='get'>" + "<query xmlns='http://jabber.org/protocol/disco#items' node='princely_musings'/>" + "</iq>")); + test.inject(QStringLiteral("<iq id='qxmpp1' from='juliet@capulet.lit' to='juliet@capulet.lit/balcony' type='result'>" + "<query xmlns='http://jabber.org/protocol/disco#items' node='princely_musings'>" + "<item jid='juliet@capulet.lit' name='368866411b877c30064a5f62b917cffe'/>" + "<item jid='juliet@capulet.lit' name='3300659945416e274474e469a1f0154c'/>" + "</query></iq>")); + + auto itemIds = expectFutureVariant<QVector<QString>>(future); + QCOMPARE(itemIds, (QVector<QString> { QStringLiteral("368866411b877c30064a5f62b917cffe"), QStringLiteral("3300659945416e274474e469a1f0154c") })); +} + void tst_QXmppPubSubManager::testRequestCurrentItem() { auto [test, psManager] = Client(); @@ -719,6 +741,72 @@ void tst_QXmppPubSubManager::testRequestItems() QVERIFY2(itemsEqual, "The items returned from the manager don't match the item IDs from the XML response"); } +void tst_QXmppPubSubManager::testRequestCurrentPepItem() +{ + auto [test, psManager] = Client(); + + auto future = psManager->requestPepItem(QStringLiteral("princely_musings")); + test.expect(QStringLiteral("<iq id='qxmpp1' type='get'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'>" + "<item id='current'/>" + "</items>" + "</pubsub></iq>")); + test.inject(QStringLiteral("<iq id='qxmpp1' from='juliet@capulet.lit' to='juliet@capulet.lit/balcony' type='result'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'>" + "<item id='current'/>" + "</items>" + "</pubsub></iq>")); + + const auto item = expectFutureVariant<QXmppPubSubItem>(future); + QCOMPARE(item.id(), QStringLiteral("current")); +} + +void tst_QXmppPubSubManager::testRequestPepItem() +{ + auto [test, psManager] = Client(); + + auto future = psManager->requestPepItem(QStringLiteral("princely_musings"), QStringLiteral("ae890ac52d0df67ed7cfdf51b644e901")); + test.expect(QStringLiteral("<iq id='qxmpp1' type='get'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'>" + "<item id='ae890ac52d0df67ed7cfdf51b644e901'/>" + "</items>" + "</pubsub></iq>")); + test.inject(QStringLiteral("<iq id='qxmpp1' from='juliet@capulet.lit' to='juliet@capulet.lit/balcony' type='result'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'>" + "<item id='ae890ac52d0df67ed7cfdf51b644e901'/>" + "</items>" + "</pubsub></iq>")); + + const auto item = expectFutureVariant<QXmppPubSubItem>(future); + QCOMPARE(item.id(), QStringLiteral("ae890ac52d0df67ed7cfdf51b644e901")); +} + +void tst_QXmppPubSubManager::testRequestPepItems() +{ + auto [test, psManager] = Client(); + + auto future = psManager->requestPepItems(QStringLiteral("princely_musings")); + test.expect(QStringLiteral("<iq id='qxmpp1' type='get'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'/>" + "</pubsub></iq>")); + test.inject(QStringLiteral("<iq id='qxmpp1' from='juliet@capulet.lit' to='juliet@capulet.lit/balcony' type='result'>" + "<pubsub xmlns='http://jabber.org/protocol/pubsub'>" + "<items node='princely_musings'>" + "<item id='368866411b877c30064a5f62b917cffe'/>" + "<item id='3300659945416e274474e469a1f0154c'/>" + "</items>" + "</pubsub></iq>")); + + const auto items = expectFutureVariant<QXmppPubSubManager::Items<QXmppPubSubItem>>(future); + QCOMPARE(items.items.first().id(), QStringLiteral("368866411b877c30064a5f62b917cffe")); + QCOMPARE(items.items.last().id(), QStringLiteral("3300659945416e274474e469a1f0154c")); +} + void tst_QXmppPubSubManager::testRequestItemNotFound() { auto [test, psManager] = Client(); |
