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;
50 QString transactionId()
const;
56 bool isStateEvent()
const;
58 QString stateKey()
const;
61 void setRoomId(
const QString& roomId);
63 void setSender(
const QString& senderId);
67 void setTransactionId(
const QString& txnId);
77 void addId(
const QString& newId);
79 void setOriginalEvent(event_ptr_tt<EncryptedEvent>&& originalEvent);
80 const EncryptedEvent* originalEvent()
const {
return _originalEvent.get(); }
81 const QJsonObject encryptedJson()
const;
94 bool isReply(
bool includeFallbacks =
false)
const;
103 QString replyEventId(
bool includeFallbacks =
false)
const;
109 std::optional<EventRelation> relatesTo()
const;
115 void setRelation(
const EventRelation &er);
121 void clearRelation();
129 QJsonObject relationsToThis()
const;
134 bool hasRelationship(EventRelation::typeid_t relationTypeId)
const;
138 QString replacedEvent()
const;
144 bool isReplaced()
const;
151 QString replacedBy()
const;
158 bool isThreaded()
const;
169 QString threadRootEventId()
const;
172 explicit RoomEvent(
const QJsonObject& json);
173 void dumpTo(QDebug dbg)
const override;
175 virtual void afterRelationChange() {}
182 event_ptr_tt<RedactionEvent> _redactedBecause;
184 event_ptr_tt<EncryptedEvent> _originalEvent;
186using RoomEventPtr = event_ptr_tt<RoomEvent>;
187using RoomEvents = EventsArray<RoomEvent>;
188using RoomEventsRange = std::ranges::subrange<RoomEvents::iterator>;
194Q_DECLARE_METATYPE(Quotient::RoomEvent*)
195Q_DECLARE_METATYPE(
const Quotient::RoomEvent*)
#define QUO_BASE_EVENT(CppType_, BaseCppType_,...)
Supply event metatype information in base event types.