diff --git a/src/Cache.cpp b/src/Cache.cpp
index aecf5f7c..329be386 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -3628,9 +3628,29 @@ Cache::saveTimelineMessages(lmdb::txn &txn,
te);
// overwrite the content and add redation data
std::visit(
- [redaction](auto &ev) {
+ [&redaction, &room_id, &txn, &eventsDb, this](auto &ev) {
ev.unsigned_data.redacted_because = *redaction;
ev.unsigned_data.redacted_by = redaction->event_id;
+
+ if constexpr (isStateEvent_<decltype(ev)>) {
+ auto statesdb = getStatesDb(txn, room_id);
+ auto stateskeydb = getStatesKeyDb(txn, room_id);
+ auto membersdb = getMembersDb(txn, room_id);
+ mtx::events::StateEvent<mtx::events::msg::Redacted> redactedEvent;
+ redactedEvent.event_id = ev.event_id;
+ redactedEvent.state_key = ev.state_key;
+ redactedEvent.type = ev.type;
+ nhlog::db()->critical("Redacting: {}",
+ nlohmann::json(redactedEvent).dump(2));
+
+ saveStateEvent(txn,
+ statesdb,
+ stateskeydb,
+ membersdb,
+ eventsDb,
+ room_id,
+ mtx::events::collections::StateEvents{redactedEvent});
+ }
},
te.data);
event = mtx::accessors::serialize_event(te.data);
@@ -5194,8 +5214,8 @@ to_json(nlohmann::json &j, const MemberInfo &info)
void
from_json(const nlohmann::json &j, MemberInfo &info)
{
- info.name = j.at("name").get<std::string>();
- info.avatar_url = j.at("avatar_url").get<std::string>();
+ info.name = j.value("name", "");
+ info.avatar_url = j.value("avatar_url", "");
info.is_direct = j.value("is_direct", false);
info.reason = j.value("reason", "");
}
|