QXmpp  Version: 1.15.1
QXmppMucManagerV2.h
1 // SPDX-FileCopyrightText: 2025 Linus Jahn <lnj@kaidan.im>
2 //
3 // SPDX-License-Identifier: LGPL-2.1-or-later
4 
5 #ifndef QXMPPMUCMANAGERV2_H
6 #define QXMPPMUCMANAGERV2_H
7 
8 #include "QXmppClientExtension.h"
9 #include "QXmppPubSubEventHandler.h"
10 #include "QXmppTask.h"
11 
12 #include <variant>
13 
14 namespace QXmpp::Private {
15 struct Bookmarks2Conference;
16 struct Bookmarks2ConferenceItem;
17 } // namespace QXmpp::Private
18 
19 class QXmppError;
20 class QXmppMucBookmarkPrivate;
21 
22 class QXMPP_EXPORT QXmppMucBookmark
23 {
24 public:
25  QXMPP_PRIVATE_DECLARE_RULE_OF_SIX(QXmppMucBookmark)
26 
28  QXmppMucBookmark(const QString &jid, const QString &name, bool autojoin, const QString &nick, const QString &password);
29  QXmppMucBookmark(const QString &jid, QXmpp::Private::Bookmarks2Conference conference);
30 
31  const QString &jid() const;
32  void setJid(const QString &jid);
33  const QString &name() const;
34  void setName(const QString &name);
35  const QString &nick() const;
36  void setNick(const QString &nick);
37  const QString &password() const;
38  void setPassword(const QString &password);
39  bool autojoin() const;
40  void setAutojoin(bool autojoin);
41 
42 private:
43  friend class QXmppMucManagerV2Private;
44  QSharedDataPointer<QXmppMucBookmarkPrivate> d;
45 };
46 
47 Q_DECLARE_METATYPE(QXmppMucBookmark);
48 
49 struct QXmppMucManagerV2Private;
50 
52 {
53  Q_OBJECT
54 
55 public:
56  struct BookmarkChange {
57  QXmppMucBookmark oldBookmark;
58  QXmppMucBookmark newBookmark;
59  };
60 
61  struct Avatar {
62  QString contentType;
63  QByteArray data;
64  };
65 
68 
69  QStringList discoveryFeatures() const override;
70 
71  const std::optional<QList<QXmppMucBookmark>> &bookmarks() const;
72  Q_SIGNAL void bookmarksReset();
73  Q_SIGNAL void bookmarksAdded(const QList<QXmppMucBookmark> &newBookmarks);
74  Q_SIGNAL void bookmarksChanged(const QList<QXmppMucManagerV2::BookmarkChange> &bookmarkUpdates);
75  Q_SIGNAL void bookmarksRemoved(const QList<QString> &removedBookmarkJids);
76 
77  QXmppTask<QXmpp::Result<>> setBookmark(QXmppMucBookmark &&bookmark);
78  QXmppTask<QXmpp::Result<>> removeBookmark(const QString &jid);
79 
80  QXmppTask<QXmpp::Result<>> setRoomAvatar(QString jid, const Avatar &avatar);
81  QXmppTask<QXmpp::Result<>> removeRoomAvatar(QString jid);
82  QXmppTask<QXmpp::Result<std::optional<Avatar>>> fetchRoomAvatar(QString jid);
83 
84  bool handlePubSubEvent(const QDomElement &element, const QString &pubSubService, const QString &nodeName) override;
85 
86 protected:
87  void onRegistered(QXmppClient *client) override;
88  void onUnregistered(QXmppClient *client) override;
89 
90 private:
91  void onConnected();
92 
93  friend class QXmppMucManagerV2Private;
94  friend class tst_QXmppMuc;
95  const std::unique_ptr<QXmppMucManagerV2Private> d;
96 };
97 
98 Q_DECLARE_METATYPE(QXmppMucManagerV2::BookmarkChange);
99 
100 #endif // QXMPPMUCMANAGERV2_H
virtual void onRegistered(QXmppClient *client)
Definition: QXmppClientExtension.cpp:85
Definition: QXmppPubSubEventHandler.h:14
virtual void onUnregistered(QXmppClient *client)
Definition: QXmppClientExtension.cpp:95
Definition: QXmppError.h:17
Definition: QXmppTask.h:67
virtual bool handlePubSubEvent(const QDomElement &element, const QString &pubSubService, const QString &nodeName)=0
XEP-0045: Multi-User Chat Manager with support for XEP-0402: PEP Native Bookmarks.
Definition: QXmppMucManagerV2.h:51
virtual QStringList discoveryFeatures() const
Definition: QXmppClientExtension.cpp:22
Definition: Algorithms.h:14
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:31
Main class for starting and managing connections to XMPP servers.
Definition: QXmppClient.h:61
Definition: QXmppMucManagerV2.h:22