QXmpp Version: 1.6.0
Loading...
Searching...
No Matches
QXmppBlockingManager.h
1// SPDX-FileCopyrightText: 2023 Linus Jahn <lnj@kaidan.im>
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#ifndef QXMPPBLOCKINGMANAGER_H
6#define QXMPPBLOCKINGMANAGER_H
7
8#include "QXmppClientExtension.h"
9#include "QXmppError.h"
10#include "QXmppTask.h"
11
12#include <QVector>
13
14#include <variant>
15
16struct QXmppBlockingManagerPrivate;
17
18class QXMPP_EXPORT QXmppBlocklist
19{
20public:
21 struct NotBlocked
22 {
23 };
24 struct Blocked
25 {
26 QVector<QString> blockingEntries;
27 QVector<QString> partiallyBlockingEntries;
28 };
29 struct PartiallyBlocked
30 {
31 QVector<QString> partiallyBlockingEntries;
32 };
33
34 using BlockingState = std::variant<NotBlocked, PartiallyBlocked, Blocked>;
35
37 QXmppBlocklist(QVector<QString> entries);
38 QXMPP_PRIVATE_DECLARE_RULE_OF_SIX(QXmppBlocklist)
39
40 QVector<QString> entries() const;
41 bool containsEntry(QStringView) const;
42 BlockingState blockingState(const QString &jid) const;
43
44private:
45 QVector<QString> m_blocklist;
46};
47
48class QXMPP_EXPORT QXmppBlockingManager : public QXmppClientExtension
49{
50 Q_OBJECT
51
53 Q_PROPERTY(bool subscribed READ isSubscribed NOTIFY subscribedChanged)
54
55public:
56 using BlocklistResult = std::variant<QXmppBlocklist, QXmppError>;
57 using Result = std::variant<QXmpp::Success, QXmppError>;
58
60 ~QXmppBlockingManager() override;
61
62 bool isSubscribed() const;
63 Q_SIGNAL void subscribedChanged();
64
65 QXmppTask<BlocklistResult> fetchBlocklist();
66 QXmppTask<Result> block(QString jid) { return block(QVector<QString> { std::move(jid) }); }
67 QXmppTask<Result> block(QVector<QString> jids);
68 QXmppTask<Result> unblock(QString jid) { return unblock(QVector<QString> { std::move(jid) }); }
69 QXmppTask<Result> unblock(QVector<QString> jids);
70
71 Q_SIGNAL void blocked(const QVector<QString> &jids);
72 Q_SIGNAL void unblocked(const QVector<QString> &jids);
73
75 QStringList discoveryFeatures() const override;
76 void setClient(QXmppClient *) override;
77 bool handleStanza(const QDomElement &, const std::optional<QXmppE2eeMetadata> &) override;
79
80private:
81 void onConnected();
82
83 std::unique_ptr<QXmppBlockingManagerPrivate> d;
84};
85
86#endif // QXMPPBLOCKINGMANAGER_H
Uses XEP-0191: Blocking Command to manage blocked accounts and services.
Definition QXmppBlockingManager.h:49
std::variant< QXmpp::Success, QXmppError > Result
Definition QXmppBlockingManager.h:57
Q_SIGNAL void unblocked(const QVector< QString > &jids)
QXmppTask< Result > unblock(QString jid)
Definition QXmppBlockingManager.h:68
std::variant< QXmppBlocklist, QXmppError > BlocklistResult
Definition QXmppBlockingManager.h:56
Q_SIGNAL void subscribedChanged()
Q_SIGNAL void blocked(const QVector< QString > &jids)
QXmppTask< Result > block(QString jid)
Definition QXmppBlockingManager.h:66
List of blocked entries according to XEP-0191: Blocking Command with helper functions to check the bl...
Definition QXmppBlockingManager.h:19
std::variant< NotBlocked, PartiallyBlocked, Blocked > BlockingState
Definition QXmppBlockingManager.h:34
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition QXmppClientExtension.h:33
The QXmppClient class is the main class for using QXmpp.
Definition QXmppClient.h:84