diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-04-07 17:35:08 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-04-09 22:27:06 +0200 |
| commit | 70a64f0d897413466777ef58e4bc9c93fceda0e6 (patch) | |
| tree | 94e41cbab4ca7498c33fd0f9ac5a600f6f921d40 /src | |
| parent | 0c74602895d6f55fc73aee199a1009b3226d0949 (diff) | |
| download | qxmpp-70a64f0d897413466777ef58e4bc9c93fceda0e6.tar.gz | |
PubSubManager: requestItem: Add StandardItemId enum for 'current'
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/QXmppPubSubManager.cpp | 43 | ||||
| -rw-r--r-- | src/client/QXmppPubSubManager.h | 36 |
2 files changed, 75 insertions, 4 deletions
diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp index f00f9d20..fe265061 100644 --- a/src/client/QXmppPubSubManager.cpp +++ b/src/client/QXmppPubSubManager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2020 Linus Jahn <lnj@kaidan.im> // SPDX-FileCopyrightText: 2020 Germán Márquez Mejía <mancho@olomono.de> +// SPDX-FileCopyrightText: 2022 Melvin Keskin <melvo@olomono.de> // // SPDX-License-Identifier: LGPL-2.1-or-later @@ -323,6 +324,21 @@ auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName } /// +/// Deletes an item from a pubsub node. +/// +/// The default value of itemId is used for singleton nodes (i.e., the node's +/// single item is deleted). +/// +/// \param jid Jabber ID of the entity hosting the pubsub service +/// \param nodeName the name of the node to delete the item from +/// \param itemId the ID of the item to delete +/// +auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId) -> QFuture<Result> +{ + return retractItem(jid, nodeName, standardItemIdToString(itemId)); +} + +/// /// Purges all items from a node. /// /// \param jid Jabber ID of the entity hosting the pubsub service @@ -636,7 +652,7 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::cancelNodeConfiguration( /// /// -/// \fn QXmppPubSubManager::retractPepItem +/// \fn QXmppPubSubManager::retractPepItem(const QString &nodeName, const QString &itemId) /// /// Deletes an item from a PEP node. /// @@ -645,7 +661,21 @@ QFuture<QXmppPubSubManager::Result> QXmppPubSubManager::cancelNodeConfiguration( /// /// \param nodeName the name of the PEP node to delete the item from /// \param itemId the ID of the item to delete -/// \return +/// + +/// +/// \fn QXmppPubSubManager::retractPepItem(const QString &nodeName, StandardItemId itemId) +/// +/// Deletes an item from a PEP node. +/// +/// The default value of itemId is used for singleton nodes (i.e., the node's +/// single item is deleted). +/// +/// This is a convenience method equivalent to calling +/// QXmppPubSubManager::retractItem on the current account's bare JID. +/// +/// \param nodeName the name of the PEP node to delete the item from +/// \param itemId the ID of the item to delete /// /// @@ -755,6 +785,15 @@ QXmppPubSubIq<> QXmppPubSubManager::requestItemsIq(const QString &jid, const QSt return request; } +QString QXmppPubSubManager::standardItemIdToString(StandardItemId itemId) +{ + switch (itemId) { + case Current: + return QStringLiteral("current"); + } + return {}; +} + auto QXmppPubSubManager::publishItem(QXmppPubSubIqBase &&request) -> QFuture<PublishItemResult> { request.setType(QXmppIq::Set); diff --git a/src/client/QXmppPubSubManager.h b/src/client/QXmppPubSubManager.h index c00064b4..d817c30c 100644 --- a/src/client/QXmppPubSubManager.h +++ b/src/client/QXmppPubSubManager.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2020 Linus Jahn <lnj@kaidan.im> +// SPDX-FileCopyrightText: 2022 Melvin Keskin <melvo@olomono.de> // // SPDX-License-Identifier: LGPL-2.1-or-later @@ -24,6 +25,13 @@ class QXMPP_EXPORT QXmppPubSubManager : public QXmppClientExtension Q_OBJECT public: + /// + /// Pre-defined ID of a PubSub item + /// + enum StandardItemId { + Current ///< Item of a singleton node + }; + template<typename T> struct Items { @@ -58,6 +66,8 @@ public: template<typename T = QXmppPubSubItem> QFuture<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); template<typename T = QXmppPubSubItem> + QFuture<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); + template<typename T = QXmppPubSubItem> QFuture<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName); template<typename T = QXmppPubSubItem> QFuture<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); @@ -70,6 +80,7 @@ public: template<typename T> QFuture<PublishItemsResult> publishItems(const QString &jid, const QString &nodeName, const QVector<T> &items, const QXmppPubSubPublishOptions &publishOptions); QFuture<Result> retractItem(const QString &jid, const QString &nodeName, const QString &itemId); + QFuture<Result> retractItem(const QString &jid, const QString &nodeName, StandardItemId itemId); QFuture<Result> purgeItems(const QString &jid, const QString &nodeName); QFuture<SubscriptionsResult> requestSubscriptions(const QString &jid); QFuture<SubscriptionsResult> requestSubscriptions(const QString &jid, const QString &nodeName); @@ -97,6 +108,7 @@ public: template<typename T> QFuture<PublishItemsResult> publishPepItems(const QString &nodeName, const QVector<T> &items); inline QFuture<Result> retractPepItem(const QString &nodeName, const QString &itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } + inline QFuture<Result> retractPepItem(const QString &nodeName, StandardItemId itemId) { return retractItem(client()->configuration().jidBare(), nodeName, itemId); } inline QFuture<Result> purgePepItems(const QString &nodeName) { return purgeItems(client()->configuration().jidBare(), nodeName); } inline QFuture<NodeConfigResult> requestPepNodeConfiguration(const QString &nodeName) { return requestNodeConfiguration(client()->configuration().jidBare(), nodeName); } inline QFuture<Result> configurePepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return configureNode(client()->configuration().jidBare(), nodeName, config); } @@ -108,11 +120,11 @@ public: /// \endcond private: - /// \cond QFuture<PublishItemResult> publishItem(QXmppPubSubIqBase &&iq); QFuture<PublishItemsResult> publishItems(QXmppPubSubIqBase &&iq); static QXmppPubSubIq<> requestItemsIq(const QString &jid, const QString &nodeName, const QStringList &itemIds); - /// \endcond + + static QString standardItemIdToString(StandardItemId itemId); // We may need a d-ptr in the future. void *d = nullptr; @@ -144,6 +156,26 @@ QFuture<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const } /// +/// Requests a specific item of an entity's node. +/// +/// The default value of itemId is used for singleton nodes (i.e., the node's +/// single item is requested). +/// +/// \param jid Jabber ID of the entity hosting the pubsub service. For PEP this +/// should be an account's bare JID +/// \param nodeName the name of the node to query +/// \param itemId the ID of the item to retrieve +/// \return +/// +template<typename T> +QFuture<QXmppPubSubManager::ItemResult<T>> QXmppPubSubManager::requestItem(const QString &jid, + const QString &nodeName, + StandardItemId itemId) +{ + return requestItem(jid, nodeName, standardItemIdToString(itemId)); +} + +/// /// Requests all items of an entity's node. /// /// \param jid Jabber ID of the entity hosting the pubsub service. For PEP this |
