6#ifndef QXMPPDISCOVERY_H
7#define QXMPPDISCOVERY_H
9#include "QXmppDataFormBase.h"
10#include "QXmppGlobal.h"
13#include <QSharedDataPointer>
15namespace QXmpp::Disco {
78class QXmppDiscoveryIdentityPrivate;
79class QXmppDiscoveryItemPrivate;
80class QXmppDiscoveryIqPrivate;
87 explicit QXmppDiscoItem(
const QString &jid,
const QString &name = {},
const QString &node = {})
88 : m_jid(jid), m_name(name), m_node(node) { }
91 const QString &
jid()
const {
return m_jid; }
93 void setJid(
const QString &newJid) { m_jid = newJid; }
96 const QString &
name()
const {
return m_name; }
98 void setName(
const QString &newName) { m_name = newName; }
101 const QString &
node()
const {
return m_node; }
103 void setNode(
const QString &newNode) { m_node = newNode; }
106 static constexpr std::tuple XmlTag = { u
"item", QXmpp::Private::ns_disco_items };
107 static std::optional<QXmppDiscoItem> fromDom(
const QDomElement &el);
108 void toXml(QXmlStreamWriter *writer)
const;
122 explicit QXmppDiscoItems(
const QString &node,
const QList<QXmppDiscoItem> &items = {})
123 : m_node(node), m_items(items) { }
126 const QList<QXmppDiscoItem> &
items()
const {
return m_items; }
128 void setItems(
const QList<QXmppDiscoItem> &newItems) { m_items = newItems; }
131 const QString &
node()
const {
return m_node; }
133 void setNode(
const QString &newNode) { m_node = newNode; }
136 static constexpr std::tuple XmlTag = { u
"query", QXmpp::Private::ns_disco_items };
137 static std::optional<QXmppDiscoItems> fromDom(
const QDomElement &el);
138 void toXml(QXmlStreamWriter *writer)
const;
142 QList<QXmppDiscoItem> m_items;
151 explicit QXmppDiscoIdentity(
const QString &category,
const QString &type = {},
const QString &name = {},
const QString &lang = {})
152 : m_category(category), m_type(type), m_name(name), m_language(lang) { }
155 const QString &
category()
const {
return m_category; }
157 void setCategory(
const QString &newCategory) { m_category = newCategory; }
164 const QString &
type()
const {
return m_type; }
170 void setType(
const QString &newType) { m_type = newType; }
173 const QString &
name()
const {
return m_name; }
175 void setName(
const QString &newName) { m_name = newName; }
183 const QString &
language()
const {
return m_language; }
190 void setLanguage(
const QString &newLanguage) { m_language = newLanguage; }
193 static constexpr std::tuple XmlTag = { u
"identity", QXmpp::Private::ns_disco_info };
194 static std::optional<QXmppDiscoIdentity> fromDom(
const QDomElement &el);
195 void toXml(QXmlStreamWriter *writer)
const;
210 explicit QXmppDiscoInfo(
const QString &node,
const QList<QXmppDiscoIdentity> &identities = {},
const QList<QString> &features = {},
const QList<QXmppDataForm> &dataForms = {})
211 : m_node(node), m_identities(identities), m_features(features), m_dataForms(dataForms) { }
214 const QString &
node()
const {
return m_node; }
216 void setNode(
const QString &newNode) { m_node = newNode; }
219 const QList<QXmppDiscoIdentity> &
identities()
const {
return m_identities; }
221 void setIdentities(
const QList<QXmppDiscoIdentity> &newIdentities) { m_identities = newIdentities; }
224 const QList<QString> &
features()
const {
return m_features; }
226 void setFeatures(
const QList<QString> &newFeatures) { m_features = newFeatures; }
229 const QList<QXmppDataForm> &
dataForms()
const {
return m_dataForms; }
232 void setDataForms(
const QList<QXmppDataForm> &newDataForms) { m_dataForms = newDataForms; }
233 std::optional<QXmppDataForm> dataForm(QStringView formType)
const;
236 template<QXmpp::Private::DataFormConvertible FormType>
239 if (
auto form = dataForm(QXmpp::Private::DataFormType<FormType>)) {
240 if (
auto result = FormType::fromDataForm(*form)) {
247 QByteArray calculateEntityCapabilitiesHash()
const;
250 static constexpr std::tuple XmlTag = { u
"query", QXmpp::Private::ns_disco_info };
251 static std::optional<QXmppDiscoInfo> fromDom(
const QDomElement &el);
252 void toXml(QXmlStreamWriter *writer)
const;
257 QList<QXmppDiscoIdentity> m_identities;
258 QList<QString> m_features;
259 QList<QXmppDataForm> m_dataForms;
276#if QXMPP_DEPRECATED_SINCE(1, 12)
285 [[deprecated(
"Use QXmppDiscoInfo/Items")]]
294 QStringList features()
const;
295 void setFeatures(
const QStringList &features);
297 QList<QXmppDiscoIdentity> identities()
const;
298 void setIdentities(
const QList<QXmppDiscoIdentity> &identities);
300 QList<QXmppDiscoItem> items()
const;
301 void setItems(
const QList<QXmppDiscoItem> &items);
303 [[deprecated(
"Use dataForms() instead")]]
305 [[deprecated(
"Use setDataForms() instead")]]
308 const QList<QXmppDataForm> &dataForms()
const;
309 void setDataForms(
const QList<QXmppDataForm> &dataForms);
310 std::optional<QXmppDataForm> dataForm(QStringView formType)
const;
314 template<QXmpp::Private::DataFormConvertible FormT>
317 if (
auto form = dataForm(QXmpp::Private::DataFormType<FormT>)) {
318 if (
auto result = FormT::fromDataForm(*form)) {
325 QString queryNode()
const;
326 void setQueryNode(
const QString &node);
328 enum QueryType queryType()
const;
329 void setQueryType(
enum QueryType type);
331 QByteArray verificationString()
const;
334 [[deprecated(
"Use QXmpp::isIqElement()")]]
335 static bool isDiscoveryIq(
const QDomElement &element);
336 static bool checkIqType(
const QString &tagName,
const QString &xmlNamespace);
339 void parseElementFromChild(
const QDomElement &element)
override;
340 void toXmlElementFromChild(QXmlStreamWriter *writer)
const override;
344 QSharedDataPointer<QXmppDiscoveryIqPrivate> d;
Definition QXmppDiscoveryIq.h:147
void setName(const QString &newName)
Sets the human-readable name of the service.
Definition QXmppDiscoveryIq.h:175
void setType(const QString &newType)
Definition QXmppDiscoveryIq.h:170
QXmppDiscoIdentity(const QString &category, const QString &type={}, const QString &name={}, const QString &lang={})
Default constructor.
Definition QXmppDiscoveryIq.h:151
const QString & type() const
Definition QXmppDiscoveryIq.h:164
void setLanguage(const QString &newLanguage)
Definition QXmppDiscoveryIq.h:190
const QString & name() const
Returns the human-readable name of the service.
Definition QXmppDiscoveryIq.h:173
const QString & language() const
Definition QXmppDiscoveryIq.h:183
const QString & category() const
Returns the category of the identity.
Definition QXmppDiscoveryIq.h:155
void setCategory(const QString &newCategory)
Sets the category of the identity.
Definition QXmppDiscoveryIq.h:157
Definition QXmppDiscoveryIq.h:206
std::optional< FormType > dataForm() const
Looks for a form with the form type of FormType and parses it if found.
Definition QXmppDiscoveryIq.h:237
void setNode(const QString &newNode)
Sets the node of the query.
Definition QXmppDiscoveryIq.h:216
void setDataForms(const QList< QXmppDataForm > &newDataForms)
Definition QXmppDiscoveryIq.h:232
QXmppDiscoInfo(const QString &node, const QList< QXmppDiscoIdentity > &identities={}, const QList< QString > &features={}, const QList< QXmppDataForm > &dataForms={})
Default constructor.
Definition QXmppDiscoveryIq.h:210
const QString & node() const
Returns the node of the query.
Definition QXmppDiscoveryIq.h:214
const QList< QXmppDataForm > & dataForms() const
Returns additional data forms as specified in XEP-0128: Service Discovery Extensions.
Definition QXmppDiscoveryIq.h:229
const QList< QXmppDiscoIdentity > & identities() const
Returns the identities of the entity.
Definition QXmppDiscoveryIq.h:219
void setFeatures(const QList< QString > &newFeatures)
Sets the features supported by the entity.
Definition QXmppDiscoveryIq.h:226
const QList< QString > & features() const
Returns the features supported by the entity.
Definition QXmppDiscoveryIq.h:224
void setIdentities(const QList< QXmppDiscoIdentity > &newIdentities)
Sets the identities of the entity.
Definition QXmppDiscoveryIq.h:221
Definition QXmppDiscoveryIq.h:83
void setNode(const QString &newNode)
Sets the node for querying the information.
Definition QXmppDiscoveryIq.h:103
void setJid(const QString &newJid)
Sets the JID of the item.
Definition QXmppDiscoveryIq.h:93
const QString & jid() const
Returns the JID of the item.
Definition QXmppDiscoveryIq.h:91
void setName(const QString &newName)
Sets the name of the item.
Definition QXmppDiscoveryIq.h:98
const QString & node() const
Returns the node for querying the information.
Definition QXmppDiscoveryIq.h:101
const QString & name() const
Returns the name of the item.
Definition QXmppDiscoveryIq.h:96
QXmppDiscoItem(const QString &jid, const QString &name={}, const QString &node={})
Default constructor.
Definition QXmppDiscoveryIq.h:87
Definition QXmppDiscoveryIq.h:118
void setNode(const QString &newNode)
Sets the node of the query.
Definition QXmppDiscoveryIq.h:133
void setItems(const QList< QXmppDiscoItem > &newItems)
Sets the items.
Definition QXmppDiscoveryIq.h:128
const QString & node() const
Returns the node of the query.
Definition QXmppDiscoveryIq.h:131
QXmppDiscoItems(const QString &node, const QList< QXmppDiscoItem > &items={})
Default constructor.
Definition QXmppDiscoveryIq.h:122
const QList< QXmppDiscoItem > & items() const
Returns the items.
Definition QXmppDiscoveryIq.h:126
Definition QXmppDiscoveryIq.h:278
std::optional< FormT > dataForm() const
Definition QXmppDiscoveryIq.h:315
QueryType
Definition QXmppDiscoveryIq.h:289
The QXmppIq class is the base class for all IQs.
Definition QXmppIq.h:23
A discovered service with its JID and disco info.
Definition QXmppDiscoveryIq.h:269
QXmppDiscoInfo info
Service discovery information of the service.
Definition QXmppDiscoveryIq.h:273
QString jid
JID of the service.
Definition QXmppDiscoveryIq.h:271