QXmpp Version: 1.8.3
Loading...
Searching...
No Matches
QXmppMessage.h
1// SPDX-FileCopyrightText: 2009 Manjeet Dahiya <manjeetdahiya@gmail.com>
2// SPDX-FileCopyrightText: 2010 Jeremy Lainé <jeremy.laine@m4x.org>
3// SPDX-FileCopyrightText: 2018 Linus Jahn <lnj@kaidan.im>
4// SPDX-FileCopyrightText: 2020 Melvin Keskin <melvo@olomono.de>
5// SPDX-FileCopyrightText: 2023 Tibor Csötönyi <work@taibsu.de>
6//
7// SPDX-License-Identifier: LGPL-2.1-or-later
8
9#ifndef QXMPPMESSAGE_H
10#define QXMPPMESSAGE_H
11
12#include "QXmppFileShare.h"
13#include "QXmppStanza.h"
14
15#include <optional>
16
17// Required for source compatibility
18#include <QDateTime>
19
20class QXmppMessagePrivate;
22class QXmppFallback;
25class QXmppMixInvitation;
26#ifdef BUILD_OMEMO
27class QXmppOmemoElement;
28#endif
32
35 QString id;
37 QString by;
38};
39
45class QXMPP_EXPORT QXmppMessage : public QXmppStanza
46{
47public:
48#if QXMPP_DEPRECATED_SINCE(1, 5)
50 using EncryptionMethod = QXmpp::EncryptionMethod;
51
52 static const EncryptionMethod NoEncryption = EncryptionMethod::NoEncryption;
53 static const EncryptionMethod UnknownEncryption = EncryptionMethod::UnknownEncryption;
54 static const EncryptionMethod OTR = EncryptionMethod::Otr;
55 static const EncryptionMethod LegacyOpenPGP = EncryptionMethod::LegacyOpenPgp;
56 static const EncryptionMethod OX = EncryptionMethod::Ox;
57 static const EncryptionMethod OMEMO = EncryptionMethod::Omemo0;
59#endif
60
62 enum Type {
63 Error = 0,
64 Normal,
65 Chat,
66 GroupChat,
67 Headline
68 };
69
76 enum State {
77 None = 0,
82 Paused
83 };
84
90 enum Marker {
91 NoMarker = 0,
92 Received,
93 Displayed,
94 Acknowledged
95 };
96
102 enum Hint {
103 NoPermanentStore = 1 << 0,
104 NoStore = 1 << 1,
105 NoCopy = 1 << 2,
106 Store = 1 << 3
107 };
108
109 QXmppMessage(const QString &from = QString(), const QString &to = QString(),
110 const QString &body = QString(), const QString &thread = QString());
111
114 ~QXmppMessage() override;
115
118
119 bool isXmppStanza() const override;
120
121 QString body() const;
122 void setBody(const QString &);
123
124 QString e2eeFallbackBody() const;
125 void setE2eeFallbackBody(const QString &fallbackBody);
126
127 QString subject() const;
128 void setSubject(const QString &);
129
130 QString thread() const;
131 void setThread(const QString &);
132
133 QString parentThread() const;
134 void setParentThread(const QString &);
135
136 QXmppMessage::Type type() const;
137 void setType(QXmppMessage::Type);
138
139 // XEP-0066: Out of Band Data
140 QString outOfBandUrl() const;
141 void setOutOfBandUrl(const QString &);
142
143 QVector<QXmppOutOfBandUrl> outOfBandUrls() const;
144 void setOutOfBandUrls(const QVector<QXmppOutOfBandUrl> &urls);
145
146 // XEP-0071: XHTML-IM
147 QString xhtml() const;
148 void setXhtml(const QString &xhtml);
149
150 // XEP-0085: Chat State Notifications
151 QXmppMessage::State state() const;
152 void setState(QXmppMessage::State);
153
154 // XEP-0091: Legacy Delayed Delivery | XEP-0203: Delayed Delivery
155 QDateTime stamp() const;
156 void setStamp(const QDateTime &stamp);
157
158 // XEP-0184: Message Delivery Receipts
159 bool isReceiptRequested() const;
160 void setReceiptRequested(bool requested);
161
162 QString receiptId() const;
163 void setReceiptId(const QString &id);
164
165 // XEP-0224: Attention
166 bool isAttentionRequested() const;
167 void setAttentionRequested(bool requested);
168
169 // XEP-0231: Bits of Binary
170 QXmppBitsOfBinaryDataList bitsOfBinaryData() const;
171 QXmppBitsOfBinaryDataList &bitsOfBinaryData();
172 void setBitsOfBinaryData(const QXmppBitsOfBinaryDataList &bitsOfBinaryData);
173
174 // XEP-0245: The /me Command
175 static bool isSlashMeCommand(const QString &body);
176 bool isSlashMeCommand() const;
177 static QString slashMeCommandText(const QString &body);
178 QString slashMeCommandText() const;
179
180 // XEP-0249: Direct MUC Invitations
181 QString mucInvitationJid() const;
182 void setMucInvitationJid(const QString &jid);
183
184 QString mucInvitationPassword() const;
185 void setMucInvitationPassword(const QString &password);
186
187 QString mucInvitationReason() const;
188 void setMucInvitationReason(const QString &reason);
189
190 // XEP-0280: Message Carbons
191 bool isPrivate() const;
192 void setPrivate(const bool);
193 bool isCarbonForwarded() const;
194 void setCarbonForwarded(bool);
195
196 // XEP-0308: Last Message Correction
197 QString replaceId() const;
198 void setReplaceId(const QString &);
199
200 // XEP-0333: Chat State Markers
201 bool isMarkable() const;
202 void setMarkable(const bool);
203
204 QString markedId() const;
205 void setMarkerId(const QString &);
206
207 QString markedThread() const;
208 void setMarkedThread(const QString &);
209
210 Marker marker() const;
211 void setMarker(const Marker);
212
213 // XEP-0334: Message Processing Hints
214 bool hasHint(const Hint hint) const;
215 void addHint(const Hint hint);
216 void removeHint(const Hint hint);
217 void removeAllHints();
218
219 // XEP-0353: Jingle Message Initiation
220 std::optional<QXmppJingleMessageInitiationElement> jingleMessageInitiationElement() const;
221 void setJingleMessageInitiationElement(const std::optional<QXmppJingleMessageInitiationElement> &jingleMessageInitiationElement);
222
223 // XEP-0359: Unique and Stable Stanza IDs
224#if QXMPP_DEPRECATED_SINCE(1, 8)
225 [[deprecated("Use stanzaIds() instead.")]]
226 QString stanzaId() const;
227 [[deprecated("Use setStanzaIds() instead.")]]
228 void setStanzaId(const QString &id);
229
230 [[deprecated("Use stanzaIds() instead.")]]
231 QString stanzaIdBy() const;
232 [[deprecated("Use setStanzaIds() instead.")]]
233 void setStanzaIdBy(const QString &id);
234#endif
235
236 QVector<QXmppStanzaId> stanzaIds() const;
237 void setStanzaIds(const QVector<QXmppStanzaId> &);
238
239 QString originId() const;
240 void setOriginId(const QString &id);
241
242 // XEP-0367: Message Attaching
243 QString attachId() const;
244 void setAttachId(const QString &);
245
246 // XEP-0369: Mediated Information eXchange (MIX)
247 QString mixParticipantId() const;
248
249 QString mixUserJid() const;
250 void setMixUserJid(const QString &);
251
252 QString mixUserNick() const;
253 void setMixUserNick(const QString &);
254
255 // XEP-0380: Explicit Message Encryption
256 QXmpp::EncryptionMethod encryptionMethod() const;
257 void setEncryptionMethod(QXmpp::EncryptionMethod);
258 QString encryptionMethodNs() const;
259 void setEncryptionMethodNs(const QString &);
260
261 QString encryptionName() const;
262 void setEncryptionName(const QString &);
263
264 // XEP-0382: Spoiler messages
265 bool isSpoiler() const;
266 void setIsSpoiler(bool);
267
268 QString spoilerHint() const;
269 void setSpoilerHint(const QString &);
270
271 // XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities
272 std::optional<QXmppMixInvitation> mixInvitation() const;
273 void setMixInvitation(const std::optional<QXmppMixInvitation> &mixInvitation);
274
275 // XEP-0428: Fallback Indication
276#if QXMPP_DEPRECATED_SINCE(1, 7)
277 [[deprecated("Use fallbackMarkers()")]] bool isFallback() const;
278 [[deprecated("Use setFallbackMarkers()")]] void setIsFallback(bool isFallback);
279#endif
280 const QVector<QXmppFallback> &fallbackMarkers() const;
281 void setFallbackMarkers(const QVector<QXmppFallback> &);
282
283 // XEP-0434: Trust Messages (TM)
284 std::optional<QXmppTrustMessageElement> trustMessageElement() const;
285 void setTrustMessageElement(const std::optional<QXmppTrustMessageElement> &trustMessageElement);
286
287 // XEP-0444: Message Reactions
288 std::optional<QXmppMessageReaction> reaction() const;
289 void setReaction(const std::optional<QXmppMessageReaction> &reaction);
290
291 // XEP-0447: Stateless file sharing
292 const QVector<QXmppFileShare> &sharedFiles() const;
293 void setSharedFiles(const QVector<QXmppFileShare> &sharedFiles);
294 QVector<QXmppFileSourcesAttachment> fileSourcesAttachments() const;
295 void setFileSourcesAttachments(const QVector<QXmppFileSourcesAttachment> &);
296
297 // XEP-0482: Call Invites
298 std::optional<QXmppCallInviteElement> callInviteElement() const;
299 void setCallInviteElement(std::optional<QXmppCallInviteElement> callInviteElement);
300
302#ifdef BUILD_OMEMO
303 // XEP-0384: OMEMO Encryption
304 std::optional<QXmppOmemoElement> omemoElement() const;
305 void setOmemoElement(const std::optional<QXmppOmemoElement> &omemoElement);
306#endif
307
308 void parse(const QDomElement &element) override final;
309 virtual void parse(const QDomElement &element, QXmpp::SceMode);
310 void toXml(QXmlStreamWriter *writer) const override final;
311 virtual void toXml(QXmlStreamWriter *writer, QXmpp::SceMode) const;
313
314 void parseExtensions(const QDomElement &element, QXmpp::SceMode sceMode);
315 virtual bool parseExtension(const QDomElement &element, QXmpp::SceMode);
316 virtual void serializeExtensions(QXmlStreamWriter *writer, QXmpp::SceMode, const QString &baseNamespace = {}) const;
317
318private:
319 QSharedDataPointer<QXmppMessagePrivate> d;
320};
321
322Q_DECLARE_METATYPE(QXmppMessage)
323
324#endif // QXMPPMESSAGE_H
Definition QXmppBitsOfBinaryDataList.h:16
The QXmppCallInviteElement class represents a Call Invite element as specified by XEP-0482: Call Invi...
Definition QXmppJingleData.h:649
Definition QXmppFallback.h:20
The QXmppJingleMessageInitiationElement class represents a Jingle Message Initiation element as speci...
Definition QXmppJingleData.h:602
The QXmppMessageReaction class represents a reaction to a message in the form of emojis as specified ...
Definition QXmppMessageReaction.h:17
The QXmppMessage class represents an XMPP message.
Definition QXmppMessage.h:46
QXmppMessage & operator=(QXmppMessage &&)
Move-assignment operator.
QXmppMessage & operator=(const QXmppMessage &other)
Assignment operator.
Type
This enum describes a message type.
Definition QXmppMessage.h:62
QXmppMessage(QXmppMessage &&)
Move-constructor.
Marker
Definition QXmppMessage.h:90
Hint
Definition QXmppMessage.h:102
State
Definition QXmppMessage.h:76
@ Active
User is actively participating in the chat session.
Definition QXmppMessage.h:78
@ Inactive
User has not been actively participating in the chat session.
Definition QXmppMessage.h:79
@ Composing
User is composing a message.
Definition QXmppMessage.h:81
@ Gone
User has effectively ended their participation in the chat session.
Definition QXmppMessage.h:80
QXmppMessage(const QXmppMessage &other)
Constructs a copy of other.
virtual void parse(const QDomElement &)=0
virtual void toXml(QXmlStreamWriter *writer) const =0
virtual bool isXmppStanza() const
Definition QXmppNonza.h:19
Definition QXmppOutOfBandUrl.h:19
The Error class represents a stanza error.
Definition QXmppStanza.h:94
The QXmppStanza class is the base class for all XMPP stanzas.
Definition QXmppStanza.h:88
The QXmppTrustMessageElement class represents a trust message element as defined by XEP-0434: Trust M...
Definition QXmppTrustMessageElement.h:18
SceMode
Definition QXmppGlobal.h:136
EncryptionMethod
Definition QXmppGlobal.h:89
Stanza ID element as defined in XEP-0359: Unique and Stable Stanza IDs.
Definition QXmppMessage.h:33
QString by
JID of the generating entity.
Definition QXmppMessage.h:37
QString id
Identifier of the stanza element.
Definition QXmppMessage.h:35