aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-04-07 17:35:08 +0200
committerLinus Jahn <lnj@kaidan.im>2022-04-09 22:27:06 +0200
commit70a64f0d897413466777ef58e4bc9c93fceda0e6 (patch)
tree94e41cbab4ca7498c33fd0f9ac5a600f6f921d40 /src
parent0c74602895d6f55fc73aee199a1009b3226d0949 (diff)
downloadqxmpp-70a64f0d897413466777ef58e4bc9c93fceda0e6.tar.gz
PubSubManager: requestItem: Add StandardItemId enum for 'current'
Diffstat (limited to 'src')
-rw-r--r--src/client/QXmppPubSubManager.cpp43
-rw-r--r--src/client/QXmppPubSubManager.h36
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