10#include "QXmppPubSubBaseItem.h"
15#include <QSharedDataPointer>
22namespace QXmpp::Private {
26class QXMPP_EXPORT PubSubIqBase :
public QXmppIq
30 enum QueryType : uint8_t {
51 PubSubIqBase(
const PubSubIqBase &other);
54 PubSubIqBase &operator=(
const PubSubIqBase &other);
56 QueryType queryType()
const;
57 void setQueryType(QueryType queryType);
59 QString queryJid()
const;
60 void setQueryJid(
const QString &queryJid);
62 QString queryNode()
const;
63 void setQueryNode(
const QString &queryNode);
65 QString subscriptionId()
const;
66 void setSubscriptionId(
const QString &subscriptionId);
68 QVector<QXmppPubSubSubscription> subscriptions()
const;
69 void setSubscriptions(
const QVector<QXmppPubSubSubscription> &);
71 std::optional<QXmppPubSubSubscription> subscription()
const;
72 void setSubscription(
const std::optional<QXmppPubSubSubscription> &);
74 QVector<QXmppPubSubAffiliation> affiliations()
const;
75 void setAffiliations(
const QVector<QXmppPubSubAffiliation> &);
77 std::optional<uint32_t> maxItems()
const;
78 void setMaxItems(std::optional<uint32_t>);
80 bool retractNotify()
const;
81 void setRetractNotify(
bool);
83 std::optional<QXmppDataForm> dataForm()
const;
84 void setDataForm(
const std::optional<QXmppDataForm> &);
86 std::optional<QXmppResultSetReply> itemsContinuation()
const;
87 void setItemsContinuation(
const std::optional<QXmppResultSetReply> &itemsContinuation);
90 static bool isPubSubIq(
const QDomElement &element);
93 static bool isPubSubIq(
const QDomElement &element,
94 bool (*isItemValid)(
const QDomElement &));
96 void parseElementFromChild(
const QDomElement &)
override;
97 void toXmlElementFromChild(QXmlStreamWriter *writer)
const override;
99 virtual void parseItems(
const QDomElement &queryElement) = 0;
100 virtual void serializeItems(QXmlStreamWriter *writer)
const = 0;
104 static std::optional<QueryType> queryTypeFromDomElement(
const QDomElement &element);
105 static bool queryTypeIsOwnerIq(QueryType type);
107 QSharedDataPointer<PubSubIqPrivate> d;
110template<
typename T = QXmppPubSubBaseItem>
111class PubSubIq :
public PubSubIqBase
114 QVector<T> items()
const;
115 void setItems(
const QVector<T> &items);
117 static bool isPubSubIq(
const QDomElement &element);
121 void parseItems(
const QDomElement &queryElement)
override;
122 void serializeItems(QXmlStreamWriter *writer)
const override;
130QVector<T> PubSubIq<T>::items()
const
136void PubSubIq<T>::setItems(
const QVector<T> &items)
142bool PubSubIq<T>::isPubSubIq(
const QDomElement &element)
144 return PubSubIqBase::isPubSubIq(element, [](
const QDomElement &item) ->
bool {
145 return T::isItem(item);
151void PubSubIq<T>::parseItems(
const QDomElement &queryElement)
153 for (
auto childElement = queryElement.firstChildElement(QStringLiteral(
"item"));
154 !childElement.isNull();
155 childElement = childElement.nextSiblingElement(QStringLiteral(
"item"))) {
157 item.parse(childElement);
158 m_items.push_back(std::move(item));
163void PubSubIq<T>::serializeItems(QXmlStreamWriter *writer)
const
165 for (
const auto &item : std::as_const(m_items)) {
The QXmppIq class is the base class for all IQs.
Definition QXmppIq.h:23
Definition QXmppPubSubAffiliation.h:18
Definition QXmppPubSubSubscription.h:19
The QXmppResultSetReply class represents a set element in a reply as defined by XEP-0059: Result Set ...
Definition QXmppResultSet.h:53