10#include <QtCore/QDateTime>
14constexpr inline auto EventIdKey =
"event_id"_L1;
15constexpr inline auto RoomIdKey =
"room_id"_L1;
16constexpr inline auto StateKeyKey =
"state_key"_L1;
17constexpr inline auto RedactedCauseKey =
"redacted_because"_L1;
28 ~RoomEvent() override;
34 QString displayId()
const;
39 QDateTime originTimestamp()
const;
40 QString roomId()
const;
41 QString senderId()
const;
42 bool isRedacted()
const {
return bool(_redactedBecause); }
43 const event_ptr_tt<RedactionEvent>& redactedBecause()
const
45 return _redactedBecause;
47 QString redactionReason()
const;
54 event_ptr_tt<RoomEvent> makeRedacted(
const RedactionEvent &redaction)
const;
57 QString transactionId()
const;
63 bool isStateEvent()
const;
65 QString stateKey()
const;
68 void setRoomId(
const QString& roomId);
70 void setSender(
const QString& senderId);
74 void setTransactionId(
const QString& txnId);
84 void addId(
const QString& newId);
86 void setOriginalEvent(event_ptr_tt<EncryptedEvent>&& originalEvent);
87 const EncryptedEvent* originalEvent()
const {
return _originalEvent.get(); }
88 const QJsonObject encryptedJson()
const;
101 bool isReply(
bool includeFallbacks =
false)
const;
110 QString replyEventId(
bool includeFallbacks =
false)
const;
116 std::optional<EventRelation> relatesTo()
const;
122 void setRelation(
const EventRelation &er);
128 void clearRelation();
136 QJsonObject relationsToThis()
const;
141 bool hasRelationship(EventRelation::typeid_t relationTypeId)
const;
145 QString replacedEvent()
const;
151 bool isReplaced()
const;
158 QString replacedBy()
const;
165 event_ptr_tt<RoomEvent> makeReplaced(
const RoomEvent &replacementEvent)
const;
172 bool isThreaded()
const;
183 QString threadRootEventId()
const;
186 explicit RoomEvent(
const QJsonObject& json);
187 void dumpTo(QDebug dbg)
const override;
189 virtual void afterRelationChange() {}
196 event_ptr_tt<RedactionEvent> _redactedBecause;
198 event_ptr_tt<EncryptedEvent> _originalEvent;
200using RoomEventPtr = event_ptr_tt<RoomEvent>;
201using RoomEvents = EventsArray<RoomEvent>;
202using RoomEventsRange = std::ranges::subrange<RoomEvents::iterator>;
208Q_DECLARE_METATYPE(Quotient::RoomEvent*)
209Q_DECLARE_METATYPE(
const Quotient::RoomEvent*)
#define QUO_BASE_EVENT(CppType_, BaseCppType_,...)
Supply event metatype information in base event types.