QXmpp  Version: 1.6.0
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 
16 struct QXmppBlockingManagerPrivate;
17 
18 class QXMPP_EXPORT QXmppBlocklist
19 {
20 public:
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 
44 private:
45  QVector<QString> m_blocklist;
46 };
47 
48 class QXMPP_EXPORT QXmppBlockingManager : public QXmppClientExtension
49 {
50  Q_OBJECT
51 
53  Q_PROPERTY(bool subscribed READ isSubscribed NOTIFY subscribedChanged)
54 
55 public:
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 
80 private:
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
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
std::variant< QXmpp::Success, QXmppError > Result
Definition: QXmppBlockingManager.h:57
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
Definition: QXmppTask.h:62