6 #ifndef QXMPPPUBSUBMANAGER_H 7 #define QXMPPPUBSUBMANAGER_H 9 #include "QXmppAsync_p.h" 10 #include "QXmppClient.h" 11 #include "QXmppClientExtension.h" 12 #include "QXmppMessage.h" 13 #include "QXmppPubSubIq_p.h" 14 #include "QXmppPubSubPublishOptions.h" 15 #include "QXmppResultSet.h" 17 class QXmppPubSubPublishOptions;
18 class QXmppPubSubSubscribeOptions;
49 std::optional<QXmppResultSetReply> continuation;
52 using Result = std::variant<QXmpp::Success, QXmppError>;
65 using OptionsResult = std::variant<QXmppPubSubSubscribeOptions, QXmppError>;
73 auto createNode(
const QString &jid,
const QString &nodeName) ->
QXmppTask<Result>;
74 auto createNode(
const QString &jid,
const QString &nodeName,
const QXmppPubSubNodeConfig &config) ->
QXmppTask<Result>;
77 auto deleteNode(
const QString &jid,
const QString &nodeName) ->
QXmppTask<Result>;
79 template<
typename T = QXmppPubSubBaseItem>
81 template<
typename T = QXmppPubSubBaseItem>
83 template<
typename T = QXmppPubSubBaseItem>
85 template<
typename T = QXmppPubSubBaseItem>
90 QXmppTask<PublishItemResult> publishItem(
const QString &jid,
const QString &nodeName,
const T &item,
const QXmppPubSubPublishOptions &publishOptions);
94 QXmppTask<PublishItemsResult> publishItems(
const QString &jid,
const QString &nodeName,
const QVector<T> &items,
const QXmppPubSubPublishOptions &publishOptions);
95 auto retractItem(
const QString &jid,
const QString &nodeName,
const QString &itemId,
bool notify =
false) ->
QXmppTask<Result>;
97 auto purgeItems(
const QString &jid,
const QString &nodeName) ->
QXmppTask<Result>;
104 QXmppTask<OptionsResult> requestSubscribeOptions(
const QString &service,
const QString &nodeName,
const QString &subscriberJid);
105 QXmppTask<Result> setSubscribeOptions(
const QString &service,
const QString &nodeName,
const QXmppPubSubSubscribeOptions &options);
106 QXmppTask<Result> setSubscribeOptions(
const QString &service,
const QString &nodeName,
const QXmppPubSubSubscribeOptions &options,
const QString &subscriberJid);
108 QXmppTask<Result> configureNode(
const QString &service,
const QString &nodeName,
const QXmppPubSubNodeConfig &config);
109 QXmppTask<Result> cancelNodeConfiguration(
const QString &service,
const QString &nodeName);
110 QXmppTask<Result> subscribeToNode(
const QString &serviceJid,
const QString &nodeName,
const QString &subscriberJid);
111 QXmppTask<Result> unsubscribeFromNode(
const QString &serviceJid,
const QString &nodeName,
const QString &subscriberJid);
118 template<
typename T = QXmppPubSubBaseItem>
120 template<
typename T = QXmppPubSubBaseItem>
122 template<
typename T = QXmppPubSubBaseItem>
126 QXmppTask<PublishItemResult> publishOwnPepItem(
const QString &nodeName,
const T &item,
const QXmppPubSubPublishOptions &publishOptions);
130 QXmppTask<PublishItemsResult> publishOwnPepItems(
const QString &nodeName,
const QVector<T> &items,
const QXmppPubSubPublishOptions &publishOptions);
140 static QString standardItemIdToString(StandardItemId itemId);
149 friend class tst_QXmppPubSubManager;
150 friend class QXmppOmemoManagerPrivate;
157 static QXmpp::Private::PubSubIq<> requestItemsIq(
const QString &jid,
const QString &nodeName,
const QStringList &itemIds);
171 const QString &nodeName,
172 const QString &itemId)
175 co_return parseIq<PubSubIq<T>>(co_await
client()->
sendIq(requestItemsIq(jid, nodeName, { itemId })), [](PubSubIq<T> &&iq) ->
ItemResult<T> {
176 if (!iq.items().isEmpty()) {
177 return iq.items().constFirst();
179 return QXmppError { QStringLiteral(
"No such item has been found."), {} };
194 const QString &nodeName,
210 const QString &nodeName)
212 return requestItems<T>(jid, nodeName, {});
227 const QString &nodeName,
228 const QStringList &itemIds)
231 co_return parseIq<PubSubIq<T>>(
232 co_await
client()->
sendIq(requestItemsIq(jid, nodeName, itemIds)),
234 return Items<T> { iq.items(), iq.itemsContinuation() };
251 const QString &nodeName,
254 QXmpp::Private::PubSubIq<T> request;
256 request.setItems({ item });
257 request.setQueryNode(nodeName);
275 const QString &nodeName,
277 const QXmppPubSubPublishOptions &publishOptions)
279 QXmpp::Private::PubSubIq<T> request;
281 request.setItems({ item });
282 request.setQueryNode(nodeName);
283 request.setDataForm(publishOptions.toDataForm());
297 const QString &nodeName,
298 const QVector<T> &items)
300 QXmpp::Private::PubSubIq<T> request;
302 request.setItems(items);
303 request.setQueryNode(nodeName);
318 const QString &nodeName,
319 const QVector<T> &items,
320 const QXmppPubSubPublishOptions &publishOptions)
322 QXmpp::Private::PubSubIq<T> request;
324 request.setItems(items);
325 request.setQueryNode(nodeName);
326 request.setDataForm(publishOptions.toDataForm());
341 return publishItem(
client()->configuration().jidBare(), nodeName, item, publishOptions);
369 return publishItems(
client()->configuration().jidBare(), nodeName, items, publishOptions);
385 #endif // QXMPPPUBSUBMANAGER_H QXmppTask< ItemResult< T > > requestOwnPepItem(const QString &nodeName, const QString &itemId)
Definition: QXmppPubSubManager.h:119
QXmppTask< Result > cancelOwnPepNodeConfiguration(const QString &nodeName)
Definition: QXmppPubSubManager.h:138
QXmppTask< IqResult > sendIq(QXmppIq &&, const std::optional< QXmppSendStanzaParams > &={})
Definition: QXmppClient.cpp:584
std::variant< QVector< QXmppPubSubSubscription >, QXmppError > SubscriptionsResult
Definition: QXmppPubSubManager.h:63
virtual bool handleStanza(const QDomElement &stanza)
You need to implement this method to process incoming XMPP stanzas.
Definition: client/compat/removed_api.cpp:45
QXmppTask< NodesResult > requestOwnPepNodes()
Definition: QXmppPubSubManager.h:114
QXmppTask< Result > createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config)
Definition: QXmppPubSubManager.h:116
QXmppTask< PublishItemResult > publishOwnPepItem(const QString &nodeName, const T &item, const QXmppPubSubPublishOptions &publishOptions)
Definition: QXmppPubSubManager.h:339
std::variant< QString, QXmppError > PublishItemResult
Definition: QXmppPubSubManager.h:61
Definition: QXmppError.h:17
StandardItemId
Definition: QXmppPubSubManager.h:37
QString jidBare() const
Definition: QXmppConfiguration.cpp:319
std::variant< QVector< QString >, QXmppError > ItemIdsResult
Definition: QXmppPubSubManager.h:60
ServiceType
Definition: QXmppPubSubManager.h:28
QXmppTask< ItemIdsResult > requestOwnPepItemIds(const QString &nodeName)
Definition: QXmppPubSubManager.h:124
QXmppTask< Result > retractOwnPepItem(const QString &nodeName, StandardItemId itemId, bool notify=false)
Definition: QXmppPubSubManager.h:134
Definition: QXmppTask.h:67
PubSub service or PEP service.
Definition: QXmppPubSubManager.h:29
QXmppTask< PublishItemResult > publishItem(const QString &jid, const QString &nodeName, const T &item)
Definition: QXmppPubSubManager.h:250
PubSub service only.
Definition: QXmppPubSubManager.h:30
std::variant< QVector< QString >, QXmppError > PublishItemsResult
Definition: QXmppPubSubManager.h:62
Definition: QXmppPubSubManager.h:44
QXmppTask< Result > retractOwnPepItem(const QString &nodeName, const QString &itemId, bool notify=false)
Definition: QXmppPubSubManager.h:133
QXmppTask< PublishItemsResult > publishOwnPepItems(const QString &nodeName, const QVector< T > &items, const QXmppPubSubPublishOptions &publishOptions)
Definition: QXmppPubSubManager.h:367
std::variant< QVector< QString >, InvalidServiceType, QXmppError > FeaturesResult
Definition: QXmppPubSubManager.h:53
QXmppTask< ItemsResult< T > > requestItems(const QString &jid, const QString &nodeName)
Definition: QXmppPubSubManager.h:209
static QString standardItemIdToString(StandardItemId itemId)
Definition: QXmppPubSubManager.cpp:957
QXmppConfiguration & configuration()
Returns a modifiable reference to the current configuration of QXmppClient.
Definition: QXmppClient.cpp:442
QXmppTask< Result > createOwnPepNode(const QString &nodeName)
Definition: QXmppPubSubManager.h:115
QXmppTask< PublishItemsResult > publishItems(const QString &jid, const QString &nodeName, const QVector< T > &items)
Definition: QXmppPubSubManager.h:296
std::variant< Items< T >, QXmppError > ItemsResult
Definition: QXmppPubSubManager.h:59
std::variant< QXmpp::Success, QXmppError > Result
Definition: QXmppPubSubManager.h:52
std::variant< QVector< QXmppPubSubAffiliation >, QXmppError > AffiliationsResult
Definition: QXmppPubSubManager.h:64
std::variant< QString, QXmppError > InstantNodeResult
Definition: QXmppPubSubManager.h:55
QXmppTask< Result > configureOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config)
Definition: QXmppPubSubManager.h:137
virtual QStringList discoveryFeatures() const
Definition: QXmppClientExtension.cpp:22
std::variant< QVector< QString >, QXmppError > NodesResult
Definition: QXmppPubSubManager.h:54
std::variant< QXmppPubSubSubscribeOptions, QXmppError > OptionsResult
Definition: QXmppPubSubManager.h:65
Definition: Algorithms.h:14
QXmppClient * client() const
Definition: QXmppClientExtension.cpp:57
QXmppTask< ItemResult< T > > requestOwnPepItem(const QString &nodeName, StandardItemId itemId)
Definition: QXmppPubSubManager.h:121
QXmppTask< Result > deleteOwnPepNode(const QString &nodeName)
Definition: QXmppPubSubManager.h:117
The QXmppPubSubManager aims to provide publish-subscribe functionality as specified in XEP-0060: Publ...
Definition: QXmppPubSubManager.h:20
QXmppTask< Result > purgeOwnPepItems(const QString &nodeName)
Definition: QXmppPubSubManager.h:135
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:31
QXmppTask< ItemsResult< T > > requestOwnPepItems(const QString &nodeName)
Definition: QXmppPubSubManager.h:123
QXmppTask< ItemResult< T > > requestItem(const QString &jid, const QString &nodeName, const QString &itemId)
Definition: QXmppPubSubManager.h:170
std::variant< T, QXmppError > ItemResult
Definition: QXmppPubSubManager.h:57
QXmppTask< NodeConfigResult > requestOwnPepNodeConfiguration(const QString &nodeName)
Definition: QXmppPubSubManager.h:136
std::variant< QXmppPubSubNodeConfig, QXmppError > NodeConfigResult
Definition: QXmppPubSubManager.h:66