From 0655b3eb3e2d110434b0d6f4d1ddee7697f1c0b6 Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Thu, 7 Apr 2022 17:48:59 +0200 Subject: PubSubManager: Add requestItemIds() Uses a disco items request. --- src/client/QXmppPubSubManager.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/client/QXmppPubSubManager.cpp') diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp index fe265061..aba9f72f 100644 --- a/src/client/QXmppPubSubManager.cpp +++ b/src/client/QXmppPubSubManager.cpp @@ -104,6 +104,13 @@ using namespace QXmpp::Private; /// error (QXmppStanza::Error). /// +/// +/// \typedef QXmppPubSubManager::ItemIdsResult +/// +/// Contains all item IDs that have been found (QVector) or the +/// returned IQ error (QXmppStanza::Error). +/// + /// /// \typedef QXmppPubSubManager::PublishItemResult /// @@ -303,6 +310,36 @@ auto QXmppPubSubManager::deleteNode(const QString &jid, const QString &nodeName) return client()->sendGenericIq(std::move(request)); } +/// +/// Requests the IDs of all items of a pubsub service node via service +/// discovery. +/// +/// This uses a \xep{0030, Service Discovery} items request to get a list of +/// items. +/// +/// \param serviceJid JID of the entity hosting the pubsub service +/// \param nodeName the name of the node whose items are requested +/// \return +/// +QFuture QXmppPubSubManager::requestItemIds(const QString &serviceJid, const QString &nodeName) +{ + QXmppDiscoveryIq request; + request.setType(QXmppIq::Get); + request.setQueryType(QXmppDiscoveryIq::ItemsQuery); + request.setQueryNode(nodeName); + request.setTo(serviceJid); + + return chainIq(client()->sendIq(std::move(request)), this, [](QXmppDiscoveryIq &&iq) -> ItemIdsResult { + const auto queryItems = iq.items(); + QVector itemIds; + itemIds.reserve(queryItems.size()); + for (const auto &queryItem : queryItems) { + itemIds << queryItem.name(); + } + return itemIds; + }); +} + /// /// Deletes an item from a pubsub node. /// -- cgit v1.2.3