QXmpp Version: 1.10.4
 
Loading...
Searching...
No Matches
QXmppMixManager.h
1// SPDX-FileCopyrightText: 2023 Melvin Keskin <melvo@olomono.de>
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#ifndef QXMPPMIXMANAGER_H
6#define QXMPPMIXMANAGER_H
7
8#include "QXmppClient.h"
9#include "QXmppClientExtension.h"
10#include "QXmppMixConfigItem.h"
11#include "QXmppMixInfoItem.h"
12#include "QXmppMixParticipantItem.h"
13#include "QXmppPubSubEventHandler.h"
14
15class QXmppMixIq;
16class QXmppMixInvitation;
17class QXmppMixManagerPrivate;
18
20{
21 Q_OBJECT
24 Q_PROPERTY(QList<Service> services READ services NOTIFY servicesChanged)
25
26public:
32
33 struct QXMPP_EXPORT Service {
34 QString jid;
35 bool channelsSearchable = false;
37
39 bool operator==(const Service &other) const;
41 };
42
43 struct Subscription {
44 QXmppMixConfigItem::Nodes additions;
45 QXmppMixConfigItem::Nodes removals;
46 };
47
50 QString nickname;
51 QXmppMixConfigItem::Nodes subscriptions;
52 };
53
54 using Jid = QString;
55 using ChannelJid = QString;
56 using Nickname = QString;
57
58 using CreationResult = std::variant<ChannelJid, QXmppError>;
59 using ChannelJidResult = std::variant<QVector<ChannelJid>, QXmppError>;
60 using ChannelNodeResult = std::variant<QXmppMixConfigItem::Nodes, QXmppError>;
61 using ConfigurationResult = std::variant<QXmppMixConfigItem, QXmppError>;
62 using InformationResult = std::variant<QXmppMixInfoItem, QXmppError>;
63 using JoiningResult = std::variant<Participation, QXmppError>;
64 using NicknameResult = std::variant<Nickname, QXmppError>;
65 using InvitationResult = std::variant<QXmppMixInvitation, QXmppError>;
66 using SubscriptionResult = std::variant<Subscription, QXmppError>;
67 using JidResult = std::variant<QVector<Jid>, QXmppError>;
68 using ParticipantResult = std::variant<QVector<QXmppMixParticipantItem>, QXmppError>;
69
71 ~QXmppMixManager() override;
72
73 QStringList discoveryFeatures() const override;
74
77
80
81 QList<Service> services() const;
82 Q_SIGNAL void servicesChanged();
83
84 QXmppTask<CreationResult> createChannel(const QString &serviceJid, const QString &channelId = {});
85
86 QXmppTask<ChannelJidResult> requestChannelJids(const QString &serviceJid);
87 QXmppTask<ChannelNodeResult> requestChannelNodes(const QString &channelJid);
88
89 QXmppTask<ConfigurationResult> requestChannelConfiguration(const QString &channelJid);
90 QXmppTask<QXmppClient::EmptyResult> updateChannelConfiguration(const QString &channelJid, QXmppMixConfigItem configuration);
91 Q_SIGNAL void channelConfigurationUpdated(const QString &channelJid, const QXmppMixConfigItem &configuration);
92
95 Q_SIGNAL void channelInformationUpdated(const QString &channelJid, const QXmppMixInfoItem &information);
96
97 QXmppTask<JoiningResult> joinChannel(const QString &channelJid, const QString &nickname = {}, QXmppMixConfigItem::Nodes nodes = ~QXmppMixConfigItem::Nodes());
98 QXmppTask<JoiningResult> joinChannel(const QXmppMixInvitation &invitation, const QString &nickname = {}, QXmppMixConfigItem::Nodes nodes = ~QXmppMixConfigItem::Nodes());
99
100 QXmppTask<NicknameResult> updateNickname(const QString &channelJid, const QString &nickname);
101 QXmppTask<SubscriptionResult> updateSubscriptions(const QString &channelJid, QXmppMixConfigItem::Nodes subscriptionAdditions = ~QXmppMixConfigItem::Nodes(), QXmppMixConfigItem::Nodes subscriptionRemovals = {});
102
103 QXmppTask<InvitationResult> requestInvitation(const QString &channelJid, const QString &inviteeJid);
104
105 QXmppTask<JidResult> requestAllowedJids(const QString &channelJid);
106 QXmppTask<QXmppClient::EmptyResult> allowJid(const QString &channelJid, const QString &jid);
107 Q_SIGNAL void jidAllowed(const QString &channelJid, const QString &jid);
108 Q_SIGNAL void allJidsAllowed(const QString &channelJid);
109
110 QXmppTask<QXmppClient::EmptyResult> disallowJid(const QString &channelJid, const QString &jid);
111 Q_SIGNAL void jidDisallowed(const QString &channelJid, const QString &jid);
112 QXmppTask<QXmppClient::EmptyResult> disallowAllJids(const QString &channelJid);
113 Q_SIGNAL void allJidsDisallowed(const QString &channelJid);
114
115 QXmppTask<JidResult> requestBannedJids(const QString &channelJid);
116 QXmppTask<QXmppClient::EmptyResult> banJid(const QString &channelJid, const QString &jid);
117 Q_SIGNAL void jidBanned(const QString &channelJid, const QString &jid);
118
119 QXmppTask<QXmppClient::EmptyResult> unbanJid(const QString &channelJid, const QString &jid);
120 Q_SIGNAL void jidUnbanned(const QString &channelJid, const QString &jid);
121 QXmppTask<QXmppClient::EmptyResult> unbanAllJids(const QString &channelJid);
122 Q_SIGNAL void allJidsUnbanned(const QString &channelJid);
123
124 QXmppTask<ParticipantResult> requestParticipants(const QString &channelJid);
125 Q_SIGNAL void participantReceived(const QString &channelJid, const QXmppMixParticipantItem &participant);
126 Q_SIGNAL void participantLeft(const QString &channelJid, const QString &participantId);
127
128 QXmppTask<QXmppClient::EmptyResult> leaveChannel(const QString &channelJid);
129
130 QXmppTask<QXmppClient::EmptyResult> deleteChannel(const QString &channelJid);
131 Q_SIGNAL void channelDeleted(const QString &channelJid);
132
133protected:
135 void onRegistered(QXmppClient *client) override;
136 void onUnregistered(QXmppClient *client) override;
137 bool handlePubSubEvent(const QDomElement &element, const QString &pubSubService, const QString &nodeName) override;
139
140private:
141 QXmppMixIq prepareJoinIq(const QString &channelJid, const QString &nickname, QXmppMixConfigItem::Nodes nodes);
143 QXmppTask<JidResult> requestJids(const QString &channelJid, const QString &node);
144 QXmppTask<QXmppClient::EmptyResult> addJidToNode(const QString &channelJid, const QString &node, const QString &jid);
145
146 void handleDiscoInfo(const QXmppDiscoveryIq &iq);
147
148 void setParticipantSupport(Support participantSupport);
149 void setMessageArchivingSupport(Support messageArchivingSupport);
150 void addService(const Service &service);
151 void removeService(const QString &jid);
152 void removeServices();
153 void resetCachedData();
154
155 const std::unique_ptr<QXmppMixManagerPrivate> d;
156
157 friend class tst_QXmppMixManager;
158};
159
160#endif // QXMPPMIXMANAGER_H
virtual QStringList discoveryFeatures() const
Definition QXmppClientExtension.cpp:22
virtual void onUnregistered(QXmppClient *client)
Definition QXmppClientExtension.cpp:95
virtual void onRegistered(QXmppClient *client)
Definition QXmppClientExtension.cpp:85
QXmppClient * client() const
Definition QXmppClientExtension.cpp:57
QXmppClientExtension()
Definition QXmppClientExtension.cpp:12
Definition QXmppDiscoveryIq.h:18
The QXmppMixConfigItem class represents a PubSub item of a MIX channel containing its configuration a...
Definition QXmppMixConfigItem.h:14
The QXmppMixInfoItem class represents a PubSub item of a MIX channel containing channel information a...
Definition QXmppMixInfoItem.h:15
Definition QXmppMixIq.h:18
std::variant< QVector< ChannelJid >, QXmppError > ChannelJidResult
Definition QXmppMixManager.h:59
QString ChannelJid
Definition QXmppMixManager.h:55
Q_SIGNAL void participantLeft(const QString &channelJid, const QString &participantId)
Q_SIGNAL void jidUnbanned(const QString &channelJid, const QString &jid)
Q_SIGNAL void channelDeleted(const QString &channelJid)
QXmppTask< ParticipantResult > requestParticipants(const QString &channelJid)
Definition QXmppMixManager.cpp:983
Q_SIGNAL void jidBanned(const QString &channelJid, const QString &jid)
Support participantSupport
Definition QXmppMixManager.h:22
std::variant< Nickname, QXmppError > NicknameResult
Definition QXmppMixManager.h:64
std::variant< QXmppMixConfigItem::Nodes, QXmppError > ChannelNodeResult
Definition QXmppMixManager.h:60
QXmppTask< QXmppClient::EmptyResult > deleteChannel(const QString &channelJid)
Definition QXmppMixManager.cpp:1033
Q_SIGNAL void channelConfigurationUpdated(const QString &channelJid, const QXmppMixConfigItem &configuration)
QString Jid
Definition QXmppMixManager.h:54
Q_SIGNAL void jidDisallowed(const QString &channelJid, const QString &jid)
Q_SIGNAL void allJidsUnbanned(const QString &channelJid)
Q_SIGNAL void channelInformationUpdated(const QString &channelJid, const QXmppMixInfoItem &information)
Q_SIGNAL void allJidsDisallowed(const QString &channelJid)
Q_SIGNAL void allJidsAllowed(const QString &channelJid)
QXmppMixManager()
Definition QXmppMixManager.cpp:442
Q_SIGNAL void messageArchivingSupportChanged()
QXmppTask< JoiningResult > joinChannel(const QString &channelJid, const QString &nickname={}, QXmppMixConfigItem::Nodes nodes=~QXmppMixConfigItem::Nodes())
Definition QXmppMixManager.cpp:667
std::variant< ChannelJid, QXmppError > CreationResult
Definition QXmppMixManager.h:58
QXmppTask< QXmppClient::EmptyResult > leaveChannel(const QString &channelJid)
Definition QXmppMixManager.cpp:1015
Support
Definition QXmppMixManager.h:27
@ Unknown
Definition QXmppMixManager.h:28
@ Unsupported
Definition QXmppMixManager.h:29
@ Supported
Definition QXmppMixManager.h:30
QXmppTask< JidResult > requestBannedJids(const QString &channelJid)
Definition QXmppMixManager.cpp:890
QXmppTask< CreationResult > createChannel(const QString &serviceJid, const QString &channelId={})
Definition QXmppMixManager.cpp:530
QXmppTask< QXmppClient::EmptyResult > disallowAllJids(const QString &channelJid)
Definition QXmppMixManager.cpp:868
std::variant< QVector< QXmppMixParticipantItem >, QXmppError > ParticipantResult
Definition QXmppMixManager.h:68
Q_SIGNAL void jidAllowed(const QString &channelJid, const QString &jid)
Q_SIGNAL void participantReceived(const QString &channelJid, const QXmppMixParticipantItem &participant)
std::variant< QXmppMixInvitation, QXmppError > InvitationResult
Definition QXmppMixManager.h:65
std::variant< Participation, QXmppError > JoiningResult
Definition QXmppMixManager.h:63
Q_SIGNAL void servicesChanged()
QXmppTask< InformationResult > requestChannelInformation(const QString &channelJid)
Definition QXmppMixManager.cpp:623
Support messageArchivingSupport
Definition QXmppMixManager.h:23
QXmppTask< QXmppClient::EmptyResult > unbanJid(const QString &channelJid, const QString &jid)
Definition QXmppMixManager.cpp:934
QXmppTask< QXmppClient::EmptyResult > updateChannelInformation(const QString &channelJid, QXmppMixInfoItem information)
Definition QXmppMixManager.cpp:641
QXmppTask< QXmppClient::EmptyResult > disallowJid(const QString &channelJid, const QString &jid)
Definition QXmppMixManager.cpp:842
std::variant< Subscription, QXmppError > SubscriptionResult
Definition QXmppMixManager.h:66
Q_SIGNAL void participantSupportChanged()
std::variant< QXmppMixConfigItem, QXmppError > ConfigurationResult
Definition QXmppMixManager.h:61
QString Nickname
Definition QXmppMixManager.h:56
std::variant< QVector< Jid >, QXmppError > JidResult
Definition QXmppMixManager.h:67
QXmppTask< QXmppClient::EmptyResult > banJid(const QString &channelJid, const QString &jid)
Definition QXmppMixManager.cpp:910
std::variant< QXmppMixInfoItem, QXmppError > InformationResult
Definition QXmppMixManager.h:62
QXmppTask< QXmppClient::EmptyResult > unbanAllJids(const QString &channelJid)
Definition QXmppMixManager.cpp:957
QList< Service > services
Definition QXmppMixManager.h:24
Definition QXmppMixParticipantItem.h:13
Definition QXmppPubSubEventHandler.h:15
virtual bool handlePubSubEvent(const QDomElement &element, const QString &pubSubService, const QString &nodeName)=0
Definition QXmppTask.h:62
Definition QXmppError.h:17
Definition QXmppMixManager.h:48
QString participantId
Definition QXmppMixManager.h:49
QString nickname
Definition QXmppMixManager.h:50
QXmppMixConfigItem::Nodes subscriptions
Definition QXmppMixManager.h:51
Definition QXmppMixManager.h:33
QString jid
Definition QXmppMixManager.h:34
bool channelCreationAllowed
Definition QXmppMixManager.h:36
bool channelsSearchable
Definition QXmppMixManager.h:35
Definition QXmppMixManager.h:43
QXmppMixConfigItem::Nodes additions
Definition QXmppMixManager.h:44
QXmppMixConfigItem::Nodes removals
Definition QXmppMixManager.h:45