From 70fa15de3ec84cf0c0ab6250f2e5e62f34a6d05b Mon Sep 17 00:00:00 2001 From: Nicolas Werner <nicolas.werner@hotmail.de> Date: Wed, 27 Jan 2021 02:39:22 +0100 Subject: [PATCH] Apply replacement logic when parsing replacement events --- include/mtx/events_impl.hpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/include/mtx/events_impl.hpp b/include/mtx/events_impl.hpp index 9ba6bf061..5d0672daf 100644 --- a/include/mtx/events_impl.hpp +++ b/include/mtx/events_impl.hpp @@ -5,6 +5,7 @@ #include "mtx/events/unknown.hpp" namespace mtx::events { + template<class Content> [[gnu::used, llvm::used]] void to_json(json &obj, const Event<Content> &event) @@ -21,9 +22,20 @@ template<class Content> [[gnu::used, llvm::used]] void from_json(const json &obj, Event<Content> &event) { - event.content = obj.at("content").get<Content>(); - event.type = getEventType(obj.at("type").get<std::string>()); - event.sender = obj.value("sender", ""); + if (obj.at("content").contains("m.new_content")) { + auto new_content = obj.at("content"); + for (const auto &e : obj["content"]["m.new_content"].items()) { + if (e.key() != "m.relates_to" && + e.key() != "im.nheko.relations.v1.relations") + new_content[e.key()] = e.value(); + } + event.content = new_content.get<Content>(); + } else { + event.content = obj.at("content").get<Content>(); + } + + event.type = getEventType(obj.at("type").get<std::string>()); + event.sender = obj.value("sender", ""); if constexpr (std::is_same_v<Unknown, Content>) event.content.type = obj.at("type").get<std::string>(); -- GitLab