// SPDX-FileCopyrightText: 2020 Linus Jahn // // SPDX-License-Identifier: LGPL-2.1-or-later #ifndef QXMPPPUBSUBNODECONFIG_H #define QXMPPPUBSUBNODECONFIG_H #include "QXmppDataForm.h" #include "QXmppDataFormBase.h" #include class QXmppPubSubNodeConfigPrivate; class QXMPP_EXPORT QXmppPubSubNodeConfig : public QXmppExtensibleDataFormBase { public: struct Unset { }; struct Max { }; using ItemLimit = std::variant; enum AccessModel : uint8_t { Open, Presence, Roster, Authorize, Allowlist }; static std::optional accessModelFromString(const QString &); static QString accessModelToString(AccessModel); enum PublishModel : uint8_t { Publishers, Subscribers, Anyone }; static std::optional publishModelFromString(const QString &); static QString publishModelToString(PublishModel); enum class ChildAssociationPolicy : uint8_t { All, Owners, Whitelist }; static std::optional childAssociatationPolicyFromString(const QString &); static QString childAssociationPolicyToString(ChildAssociationPolicy); enum ItemPublisher : uint8_t { NodeOwner, Publisher }; static std::optional itemPublisherFromString(const QString &); static QString itemPublisherToString(ItemPublisher); enum NodeType : uint8_t { Leaf, Collection }; static std::optional nodeTypeFromString(const QString &); static QString nodeTypeToString(NodeType); enum NotificationType : uint8_t { Normal, Headline }; static std::optional notificationTypeFromString(const QString &); static QString notificationTypeToString(NotificationType); enum SendLastItemType : uint8_t { Never, OnSubscription, OnSubscriptionAndPresence }; static std::optional sendLastItemTypeFromString(const QString &); static QString sendLastItemTypeToString(SendLastItemType); static std::optional fromDataForm(const QXmppDataForm &form); QXmppPubSubNodeConfig(); QXmppPubSubNodeConfig(const QXmppPubSubNodeConfig &); QXmppPubSubNodeConfig(QXmppPubSubNodeConfig &&); ~QXmppPubSubNodeConfig(); QXmppPubSubNodeConfig &operator=(const QXmppPubSubNodeConfig &); QXmppPubSubNodeConfig &operator=(QXmppPubSubNodeConfig &&); std::optional accessModel() const; void setAccessModel(std::optional accessModel); QString bodyXslt() const; void setBodyXslt(const QString &bodyXslt); std::optional childAssociationPolicy() const; void setChildAssociationPolicy(std::optional childAssociationPolicy); QStringList childAssociationAllowlist() const; void setChildAssociationAllowlist(const QStringList &childAssociationWhitelist); QStringList childNodes() const; void setChildNodes(const QStringList &childNodes); std::optional childNodesMax() const; void setChildNodesMax(std::optional childNodesMax); QStringList collections() const; void setCollections(const QStringList &collections); QStringList contactJids() const; void setContactJids(const QStringList &contactJids); QString dataFormXslt() const; void setDataFormXslt(const QString &dataFormXslt); std::optional notificationsEnabled() const; void setNotificationsEnabled(std::optional notificationsEnabled); std::optional includePayloads() const; void setIncludePayloads(std::optional includePayloads); QString description() const; void setDescription(const QString &description); std::optional itemExpiry() const; void setItemExpiry(std::optional itemExpiry); std::optional notificationItemPublisher() const; void setNotificationItemPublisher(std::optional notificationItemPublisher); QString language() const; void setLanguage(const QString &language); ItemLimit maxItems() const; void setMaxItems(ItemLimit maxItems); inline void resetMaxItems() { setMaxItems(Unset()); } std::optional maxPayloadSize() const; void setMaxPayloadSize(std::optional maxPayloadSize); std::optional nodeType() const; void setNodeType(std::optional nodeType); std::optional notificationType() const; void setNotificationType(std::optional notificationType); std::optional configNotificationsEnabled() const; void setConfigNotificationsEnabled(std::optional configNotificationsEnabled); std::optional deleteNotificationsEnabled() const; void setDeleteNotificationsEnabled(std::optional nodeDeleteNotificationsEnabled); std::optional retractNotificationsEnabled() const; void setRetractNotificationsEnabled(std::optional retractNotificationsEnabled); std::optional subNotificationsEnabled() const; void setSubNotificationsEnabled(std::optional subNotificationsEnabled); std::optional persistItems() const; void setPersistItems(std::optional persistItems); std::optional presenceBasedNotifications() const; void setPresenceBasedNotifications(std::optional presenceBasedNotifications); std::optional publishModel() const; void setPublishModel(std::optional publishModel); std::optional purgeWhenOffline() const; void setPurgeWhenOffline(std::optional purgeWhenOffline); QStringList allowedRosterGroups() const; void setAllowedRosterGroups(const QStringList &allowedRosterGroups); std::optional sendLastItem() const; void setSendLastItem(std::optional sendLastItem); std::optional temporarySubscriptions() const; void setTemporarySubscriptions(std::optional temporarySubscriptions); std::optional allowSubscriptions() const; void setAllowSubscriptions(std::optional allowSubscriptions); QString title() const; void setTitle(const QString &title); QString payloadType() const; void setPayloadType(const QString &payloadType); protected: QString formType() const override; bool parseField(const QXmppDataForm::Field &) override; void serializeForm(QXmppDataForm &) const override; private: QSharedDataPointer d; }; class QXMPP_EXPORT QXmppPubSubPublishOptions : public QXmppPubSubNodeConfig { public: static std::optional fromDataForm(const QXmppDataForm &form); protected: QString formType() const override; }; Q_DECLARE_METATYPE(QXmppPubSubNodeConfig); Q_DECLARE_METATYPE(QXmppPubSubPublishOptions); #endif // QXMPPPUBSUBNODECONFIG_H