QXmpp  Version: 1.7.1
QXmppCallInviteManager.h
1 // SPDX-FileCopyrightText: 2023 Tibor Csötönyi <work@taibsu.de>
2 //
3 // SPDX-License-Identifier: LGPL-2.1-or-later
4 
5 #ifndef QXMPPCALLINVITEMANAGER_H
6 #define QXMPPCALLINVITEMANAGER_H
7 
8 #include "QXmppClientExtension.h"
9 #include "QXmppError.h"
10 #include "QXmppJingleIq.h"
11 #include "QXmppMessageHandler.h"
12 #include "QXmppSendResult.h"
13 #include "QXmppTask.h"
14 
16 class QXmppCallInvitePrivate;
17 class QXmppCallInviteManagerPrivate;
18 
19 class QXMPP_EXPORT QXmppCallInvite : public QObject
20 {
21  Q_OBJECT
22 public:
23  struct Rejected { };
24  struct Retracted { };
25  struct Left { };
26 
27  using Result = std::variant<Rejected, Retracted, Left, QXmppError>;
28 
29  explicit QXmppCallInvite(QXmppCallInviteManager *manager);
30  ~QXmppCallInvite();
31 
36 
37  Q_SIGNAL void invited();
38  Q_SIGNAL void accepted(const QString &id, const QString &callPartnerResource);
39  Q_SIGNAL void closed(const QXmppCallInvite::Result &result);
40 
41 private:
43  bool audio = true,
44  bool video = false,
45  std::optional<QXmppCallInviteElement::Jingle> jingle = std::nullopt,
46  std::optional<QVector<QXmppCallInviteElement::External>> external = std::nullopt);
47 
48  QString id() const;
49  void setId(const QString &id);
50  void setCallPartnerJid(const QString &callPartnerJid);
51  QString callPartnerJid() const;
52  bool isAccepted() const;
53  void setIsAccepted(bool isAccepted);
54 
55  std::unique_ptr<QXmppCallInvitePrivate> d;
56 
57  friend class QXmppCallInviteManager;
58  friend class tst_QXmppCallInviteManager;
59 };
60 
62 {
63  Q_OBJECT
64 public:
65  using ProposeResult = std::variant<std::shared_ptr<QXmppCallInvite>, QXmppError>;
66 
69 
71  QStringList discoveryFeatures() const override;
73 
75  const QString &callPartnerJid,
76  bool audio = true,
77  bool video = false,
78  std::optional<QXmppCallInviteElement::Jingle> jingle = std::nullopt,
79  std::optional<QVector<QXmppCallInviteElement::External>> external = std::nullopt);
80 
81  Q_SIGNAL void invited(const std::shared_ptr<QXmppCallInvite> &callInvite, const QString &id);
82 
83 protected:
85  bool handleMessage(const QXmppMessage &) override;
87 
88 private:
89  QXmppTask<QXmpp::SendResult> sendMessage(
90  const QXmppCallInviteElement &callInviteElement,
91  const QString &callPartnerJid);
92 
93  void clear(const std::shared_ptr<QXmppCallInvite> &callInvite);
94  void clearAll();
95 
96  bool handleCallInviteElement(QXmppCallInviteElement &&callInviteElement, const QString &senderJid);
97 
98  bool handleExistingCallInvite(
99  const std::shared_ptr<QXmppCallInvite> &existingCallInvite,
100  const QXmppCallInviteElement &callInviteElement,
101  const QString &callPartnerResource);
102 
103  bool handleInviteCallInviteElement(const QXmppCallInviteElement &callInviteElement, const QString &callPartnerJid);
104 
105  std::shared_ptr<QXmppCallInvite> addCallInvite(const QString &callPartnerJid);
106  const QVector<std::shared_ptr<QXmppCallInvite>> &callInvites() const;
107 
108 private:
109  std::unique_ptr<QXmppCallInviteManagerPrivate> d;
110 
111  friend class QXmppCallInvitePrivate;
112  friend class tst_QXmppCallInviteManager;
113 };
114 Q_DECLARE_METATYPE(QXmppCallInvite::Result)
115 Q_DECLARE_METATYPE(std::shared_ptr<QXmppCallInvite>)
116 
117 #endif // QXMPPJINGLEMESSAGEINITIATIONMANAGER_H
The QXmppCallInviteElement class represents a Call Invite element as specified by XEP-0482: Call Invi...
Definition: QXmppJingleData.h:649
The QXmppCallInviteManager class makes it possible to retrieve Call Invite elements as defined by XEP...
Definition: QXmppCallInviteManager.h:62
Q_SIGNAL void invited(const std::shared_ptr< QXmppCallInvite > &callInvite, const QString &id)
std::variant< std::shared_ptr< QXmppCallInvite >, QXmppError > ProposeResult
Definition: QXmppCallInviteManager.h:65
The QXmppCallInvite class holds information about the Call Invite element in the current context.
Definition: QXmppCallInviteManager.h:20
std::variant< Rejected, Retracted, Left, QXmppError > Result
Definition: QXmppCallInviteManager.h:27
Q_SIGNAL void invited()
Q_SIGNAL void accepted(const QString &id, const QString &callPartnerResource)
Q_SIGNAL void closed(const QXmppCallInvite::Result &result)
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition: QXmppClientExtension.h:33
Definition: QXmppMessageHandler.h:16
The QXmppMessage class represents an XMPP message.
Definition: QXmppMessage.h:39
Definition: QXmppTask.h:62
Definition: QXmppError.h:17