QXmpp Version: 1.15.1
Loading...
Searching...
No Matches
QXmppDiscoveryManager.h
1// SPDX-FileCopyrightText: 2010 Manjeet Dahiya <manjeetdahiya@gmail.com>
2// SPDX-FileCopyrightText: 2021 Linus Jahn <lnj@kaidan.im>
3//
4// SPDX-License-Identifier: LGPL-2.1-or-later
5
6#ifndef QXMPPDISCOVERYMANAGER_H
7#define QXMPPDISCOVERYMANAGER_H
8
9#include "QXmppClientExtension.h"
10#include "QXmppDiscoveryIq.h"
11
12#include <memory>
13#include <variant>
14
15#include <QDateTime>
16#include <QProperty>
17
18template<typename T>
19class QXmppTask;
20class QXmppDataForm;
22class QXmppDiscoveryManagerPrivate;
23struct QXmppError;
24
35class QXMPP_EXPORT QXmppDiscoServicesWatch
36{
37public:
39 QBindable<bool> loaded() const;
41 QBindable<QList<QXmppDiscoService>> services() const;
42
43private:
44 friend class QXmppDiscoveryManager;
45 friend class QXmppDiscoveryManagerPrivate;
46 QXmppDiscoServicesWatch() = default;
47
48 struct Data {
49 QProperty<bool> loaded { false };
50 QProperty<QList<QXmppDiscoService>> services;
51 };
52 std::shared_ptr<Data> d;
53};
54
56{
57 Q_OBJECT
58
59public:
61 enum class CachePolicy {
64 Strict,
67 Relaxed,
68 };
69
71 ~QXmppDiscoveryManager() override;
72
73 QXmppTask<QXmpp::Result<QXmppDiscoInfo>> info(const QString &jid, const QString &node = {}, CachePolicy fetchPolicy = CachePolicy::Relaxed);
74 QXmppTask<QXmpp::Result<QList<QXmppDiscoItem>>> items(const QString &jid, const QString &node = {}, CachePolicy fetchPolicy = CachePolicy::Relaxed);
75
76 QXmppDiscoServicesWatch discoverServices(QXmpp::Disco::Category category, std::optional<QXmpp::Disco::Type> type = {}, QStringList requiredFeatures = {});
77 QXmppDiscoServicesWatch discoverServices(QString category, std::optional<QString> type = {}, QStringList requiredFeatures = {});
78
79 const QList<QXmppDiscoIdentity> &identities() const;
80 void setIdentities(const QList<QXmppDiscoIdentity> &identities);
81
82 const QList<QXmppDataForm> &infoForms() const;
83 void setInfoForms(const QList<QXmppDataForm> &dataForms);
84
85 QString clientCapabilitiesNode() const;
86 void setClientCapabilitiesNode(const QString &);
87
88 QXmppDiscoInfo buildClientInfo() const;
89
91 QStringList discoveryFeatures() const override;
92 bool handleStanza(const QDomElement &element) override;
94
95#if QXMPP_DEPRECATED_SINCE(1, 13)
98 [[deprecated("Use info()")]]
99 Q_SIGNAL void infoReceived(const QXmppDiscoveryIq &);
100
103 [[deprecated("Use items()")]]
104 Q_SIGNAL void itemsReceived(const QXmppDiscoveryIq &);
105#endif
106
107#if QXMPP_DEPRECATED_SINCE(1, 12)
108 QT_WARNING_PUSH
109 QT_WARNING_DISABLE_DEPRECATED
110 using InfoResult = std::variant<QXmppDiscoveryIq, QXmppError>;
111 using ItemsResult = std::variant<QList<QXmppDiscoveryIq::Item>, QXmppError>;
112 [[deprecated("Use info()")]]
113 QXmppTask<InfoResult> requestDiscoInfo(const QString &jid, const QString &node = {});
114 [[deprecated("Use items()")]]
115 QXmppTask<ItemsResult> requestDiscoItems(const QString &jid, const QString &node = {});
116 QT_WARNING_POP
117
118 [[deprecated("Use buildClientInfo()")]]
119 QXmppDiscoveryIq capabilities();
120
121 [[deprecated("Use identities()")]]
122 QString clientCategory() const;
123 [[deprecated("Use setIdentities()")]]
124 void setClientCategory(const QString &);
125
126 [[deprecated("Use identities()")]]
127 void setClientName(const QString &);
128 [[deprecated("Use setIdentities()")]]
129 QString clientApplicationName() const;
130
131 [[deprecated("Use identities()")]]
132 QString clientType() const;
133 [[deprecated("Use setIdentities()")]]
134 void setClientType(const QString &);
135
136 [[deprecated("Use infoForms()")]]
137 QXmppDataForm clientInfoForm() const;
138 [[deprecated("Use setInfoForms()()")]]
139 void setClientInfoForm(const QXmppDataForm &form);
140
141 [[deprecated("Use info()")]]
142 QString requestInfo(const QString &jid, const QString &node = QString());
143 [[deprecated("Use items()")]]
144 QString requestItems(const QString &jid, const QString &node = QString());
145#endif
146
147protected:
148 void onRegistered(QXmppClient *client);
149 void onUnregistered(QXmppClient *client);
150
151private:
152 friend class QXmppDiscoveryManagerPrivate;
153 const std::unique_ptr<QXmppDiscoveryManagerPrivate> d;
154};
155
156#endif // QXMPPDISCOVERYMANAGER_H
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition QXmppClientExtension.h:32
Main class for starting and managing connections to XMPP servers.
Definition QXmppClient.h:62
Definition QXmppDataForm.h:28
Definition QXmppDiscoveryIq.h:206
Lightweight handle to a service discovery watch.
Definition QXmppDiscoveryManager.h:36
Definition QXmppDiscoveryIq.h:278
The QXmppDiscoveryManager class makes it possible to discover information about other entities as def...
Definition QXmppDiscoveryManager.h:56
CachePolicy
Policies for how cached service discovery information is used.
Definition QXmppDiscoveryManager.h:61
std::variant< QList< QXmppDiscoveryIq::Item >, QXmppError > ItemsResult
Definition QXmppDiscoveryManager.h:111
std::variant< QXmppDiscoveryIq, QXmppError > InfoResult
Definition QXmppDiscoveryManager.h:110
Q_SIGNAL void itemsReceived(const QXmppDiscoveryIq &)
Q_SIGNAL void infoReceived(const QXmppDiscoveryIq &)
Definition QXmppTask.h:330
Definition QXmppError.h:17