From 847de2ddc00057049de6d7f507711906e7dfd3a8 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Mon, 26 Dec 2022 20:10:19 +0100 Subject: Make PubSubIq header private Users should only need to use the PubSubManager. The PubSubIq does not need to have a stable API this way and this gives us more flexibility. Closes #509. --- src/base/QXmppPubSubIq.cpp | 3 +- src/base/QXmppPubSubIq.h | 165 --------------------------------------------- src/base/QXmppPubSubIq_p.h | 165 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 167 deletions(-) delete mode 100644 src/base/QXmppPubSubIq.h create mode 100644 src/base/QXmppPubSubIq_p.h (limited to 'src/base') diff --git a/src/base/QXmppPubSubIq.cpp b/src/base/QXmppPubSubIq.cpp index 83efdd93..ca703c33 100644 --- a/src/base/QXmppPubSubIq.cpp +++ b/src/base/QXmppPubSubIq.cpp @@ -3,11 +3,10 @@ // // SPDX-License-Identifier: LGPL-2.1-or-later -#include "QXmppPubSubIq.h" - #include "QXmppConstants_p.h" #include "QXmppDataForm.h" #include "QXmppPubSubAffiliation.h" +#include "QXmppPubSubIq_p.h" #include "QXmppPubSubSubscription.h" #include "QXmppResultSet.h" #include "QXmppUtils.h" diff --git a/src/base/QXmppPubSubIq.h b/src/base/QXmppPubSubIq.h deleted file mode 100644 index ac33766a..00000000 --- a/src/base/QXmppPubSubIq.h +++ /dev/null @@ -1,165 +0,0 @@ -// SPDX-FileCopyrightText: 2019 Linus Jahn -// SPDX-FileCopyrightText: 2010 Jeremy Lainé -// -// SPDX-License-Identifier: LGPL-2.1-or-later - -#ifndef QXMPPPUBSUBIQ_H -#define QXMPPPUBSUBIQ_H - -#include "QXmppIq.h" - -#include - -#include -#include - -class QXmppDataForm; -class QXmppPubSubIqPrivate; -class QXmppPubSubItem; -class QXmppPubSubSubscription; -class QXmppPubSubAffiliation; -class QXmppResultSetReply; - -class QXMPP_EXPORT QXmppPubSubIqBase : public QXmppIq -{ -public: - /// This enum is used to describe a publish-subscribe query type. - enum QueryType : uint8_t { - Affiliations, - OwnerAffiliations, - Configure, - Create, - Default, - OwnerDefault, - Delete, - Items, - Options, - Publish, - Purge, - Retract, - Subscribe, - Subscription, - Subscriptions, - OwnerSubscriptions, - Unsubscribe, - }; - - QXmppPubSubIqBase(); - QXmppPubSubIqBase(const QXmppPubSubIqBase &other); - ~QXmppPubSubIqBase(); - - QXmppPubSubIqBase &operator=(const QXmppPubSubIqBase &other); - - QueryType queryType() const; - void setQueryType(QueryType queryType); - - QString queryJid() const; - void setQueryJid(const QString &queryJid); - - QString queryNode() const; - void setQueryNode(const QString &queryNode); - - QString subscriptionId() const; - void setSubscriptionId(const QString &subscriptionId); - - QVector subscriptions() const; - void setSubscriptions(const QVector &); - - std::optional subscription() const; - void setSubscription(const std::optional &); - - QVector affiliations() const; - void setAffiliations(const QVector &); - - std::optional maxItems() const; - void setMaxItems(std::optional); - - std::optional dataForm() const; - void setDataForm(const std::optional &); - - std::optional itemsContinuation() const; - void setItemsContinuation(const std::optional &itemsContinuation); - - /// \cond - static bool isPubSubIq(const QDomElement &element); - -protected: - static bool isPubSubIq(const QDomElement &element, - bool (*isItemValid)(const QDomElement &)); - - void parseElementFromChild(const QDomElement &) override; - void toXmlElementFromChild(QXmlStreamWriter *writer) const override; - - virtual void parseItems(const QDomElement &queryElement) = 0; - virtual void serializeItems(QXmlStreamWriter *writer) const = 0; - /// \endcond - -private: - static std::optional queryTypeFromDomElement(const QDomElement &element); - static bool queryTypeIsOwnerIq(QueryType type); - - QSharedDataPointer d; -}; - -template -class QXmppPubSubIq : public QXmppPubSubIqBase -{ -public: - QVector items() const; - void setItems(const QVector &items); - - static bool isPubSubIq(const QDomElement &element); - -protected: - /// \cond - void parseItems(const QDomElement &queryElement) override; - void serializeItems(QXmlStreamWriter *writer) const override; - /// \endcond - -private: - QVector m_items; -}; - -template -QVector QXmppPubSubIq::items() const -{ - return m_items; -} - -template -void QXmppPubSubIq::setItems(const QVector &items) -{ - m_items = items; -} - -template -bool QXmppPubSubIq::isPubSubIq(const QDomElement &element) -{ - return QXmppPubSubIqBase::isPubSubIq(element, [](const QDomElement &item) -> bool { - return T::isItem(item); - }); -} - -/// \cond -template -void QXmppPubSubIq::parseItems(const QDomElement &queryElement) -{ - for (auto childElement = queryElement.firstChildElement(QStringLiteral("item")); - !childElement.isNull(); - childElement = childElement.nextSiblingElement(QStringLiteral("item"))) { - T item; - item.parse(childElement); - m_items << std::move(item); - } -} - -template -void QXmppPubSubIq::serializeItems(QXmlStreamWriter *writer) const -{ - for (const auto &item : std::as_const(m_items)) { - item.toXml(writer); - } -} -/// \endcond - -#endif // QXMPPPUBSUBIQ_H diff --git a/src/base/QXmppPubSubIq_p.h b/src/base/QXmppPubSubIq_p.h new file mode 100644 index 00000000..ac33766a --- /dev/null +++ b/src/base/QXmppPubSubIq_p.h @@ -0,0 +1,165 @@ +// SPDX-FileCopyrightText: 2019 Linus Jahn +// SPDX-FileCopyrightText: 2010 Jeremy Lainé +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#ifndef QXMPPPUBSUBIQ_H +#define QXMPPPUBSUBIQ_H + +#include "QXmppIq.h" + +#include + +#include +#include + +class QXmppDataForm; +class QXmppPubSubIqPrivate; +class QXmppPubSubItem; +class QXmppPubSubSubscription; +class QXmppPubSubAffiliation; +class QXmppResultSetReply; + +class QXMPP_EXPORT QXmppPubSubIqBase : public QXmppIq +{ +public: + /// This enum is used to describe a publish-subscribe query type. + enum QueryType : uint8_t { + Affiliations, + OwnerAffiliations, + Configure, + Create, + Default, + OwnerDefault, + Delete, + Items, + Options, + Publish, + Purge, + Retract, + Subscribe, + Subscription, + Subscriptions, + OwnerSubscriptions, + Unsubscribe, + }; + + QXmppPubSubIqBase(); + QXmppPubSubIqBase(const QXmppPubSubIqBase &other); + ~QXmppPubSubIqBase(); + + QXmppPubSubIqBase &operator=(const QXmppPubSubIqBase &other); + + QueryType queryType() const; + void setQueryType(QueryType queryType); + + QString queryJid() const; + void setQueryJid(const QString &queryJid); + + QString queryNode() const; + void setQueryNode(const QString &queryNode); + + QString subscriptionId() const; + void setSubscriptionId(const QString &subscriptionId); + + QVector subscriptions() const; + void setSubscriptions(const QVector &); + + std::optional subscription() const; + void setSubscription(const std::optional &); + + QVector affiliations() const; + void setAffiliations(const QVector &); + + std::optional maxItems() const; + void setMaxItems(std::optional); + + std::optional dataForm() const; + void setDataForm(const std::optional &); + + std::optional itemsContinuation() const; + void setItemsContinuation(const std::optional &itemsContinuation); + + /// \cond + static bool isPubSubIq(const QDomElement &element); + +protected: + static bool isPubSubIq(const QDomElement &element, + bool (*isItemValid)(const QDomElement &)); + + void parseElementFromChild(const QDomElement &) override; + void toXmlElementFromChild(QXmlStreamWriter *writer) const override; + + virtual void parseItems(const QDomElement &queryElement) = 0; + virtual void serializeItems(QXmlStreamWriter *writer) const = 0; + /// \endcond + +private: + static std::optional queryTypeFromDomElement(const QDomElement &element); + static bool queryTypeIsOwnerIq(QueryType type); + + QSharedDataPointer d; +}; + +template +class QXmppPubSubIq : public QXmppPubSubIqBase +{ +public: + QVector items() const; + void setItems(const QVector &items); + + static bool isPubSubIq(const QDomElement &element); + +protected: + /// \cond + void parseItems(const QDomElement &queryElement) override; + void serializeItems(QXmlStreamWriter *writer) const override; + /// \endcond + +private: + QVector m_items; +}; + +template +QVector QXmppPubSubIq::items() const +{ + return m_items; +} + +template +void QXmppPubSubIq::setItems(const QVector &items) +{ + m_items = items; +} + +template +bool QXmppPubSubIq::isPubSubIq(const QDomElement &element) +{ + return QXmppPubSubIqBase::isPubSubIq(element, [](const QDomElement &item) -> bool { + return T::isItem(item); + }); +} + +/// \cond +template +void QXmppPubSubIq::parseItems(const QDomElement &queryElement) +{ + for (auto childElement = queryElement.firstChildElement(QStringLiteral("item")); + !childElement.isNull(); + childElement = childElement.nextSiblingElement(QStringLiteral("item"))) { + T item; + item.parse(childElement); + m_items << std::move(item); + } +} + +template +void QXmppPubSubIq::serializeItems(QXmlStreamWriter *writer) const +{ + for (const auto &item : std::as_const(m_items)) { + item.toXml(writer); + } +} +/// \endcond + +#endif // QXMPPPUBSUBIQ_H -- cgit v1.2.3