aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--events/event.cpp10
-rw-r--r--events/event.h22
2 files changed, 28 insertions, 4 deletions
diff --git a/events/event.cpp b/events/event.cpp
index e74bc114..c7345a13 100644
--- a/events/event.cpp
+++ b/events/event.cpp
@@ -144,3 +144,13 @@ RoomEventPtr _impl::doMakeEvent(const QJsonObject& obj)
RoomAvatarEvent, EncryptionEvent, RedactionEvent>
(obj, obj["type"].toString()) };
}
+
+StateEventBase::~StateEventBase() = default;
+
+bool StateEventBase::repeatsState() const
+{
+ auto contentJson = originalJsonObject().value("content");
+ auto prevContentJson = originalJsonObject().value("unsigned")
+ .toObject().value("prev_content");
+ return contentJson == prevContentJson;
+}
diff --git a/events/event.h b/events/event.h
index 00dc4d5c..319c3443 100644
--- a/events/event.h
+++ b/events/event.h
@@ -240,8 +240,23 @@ namespace QMatrixClient
RoomEvents::iterator end() { return to; }
};
+ class StateEventBase: public RoomEvent
+ {
+ public:
+ explicit StateEventBase(Type type, const QJsonObject& obj)
+ : RoomEvent(obj.contains("state_key") ? type : Type::Unknown,
+ obj)
+ { }
+ explicit StateEventBase(Type type)
+ : RoomEvent(type)
+ { }
+ ~StateEventBase() override = 0;
+
+ virtual bool repeatsState() const;
+ };
+
template <typename ContentT>
- class StateEvent: public RoomEvent
+ class StateEvent: public StateEventBase
{
public:
using content_type = ContentT;
@@ -249,8 +264,7 @@ namespace QMatrixClient
template <typename... ContentParamTs>
explicit StateEvent(Type type, const QJsonObject& obj,
ContentParamTs&&... contentParams)
- : RoomEvent(obj.contains("state_key") ? type : Type::Unknown,
- obj)
+ : StateEventBase(type, obj)
, _content(contentJson(),
std::forward<ContentParamTs>(contentParams)...)
{
@@ -262,7 +276,7 @@ namespace QMatrixClient
}
template <typename... ContentParamTs>
explicit StateEvent(Type type, ContentParamTs&&... contentParams)
- : RoomEvent(type)
+ : StateEventBase(type)
, _content(std::forward<ContentParamTs>(contentParams)...)
{ }