summary refs log tree commit diff
path: root/src/Cache_p.h
diff options
context:
space:
mode:
authorDeepBlueV7.X <nicolas.werner@hotmail.de>2021-08-06 03:00:19 +0000
committerGitHub <noreply@github.com>2021-08-06 03:00:19 +0000
commit11f9a9d0443e2bca5a5a0af5f43715eb88dab30a (patch)
tree1c76cc27296a0268f7fb1c3817d9578030b87696 /src/Cache_p.h
parentMerge pull request #666 from LorenDB/qml-all-the-things (diff)
parentthis is not needed for translations (diff)
downloadnheko-11f9a9d0443e2bca5a5a0af5f43715eb88dab30a.tar.xz
Merge pull request #669 from Nheko-Reborn/sticker-editor
Sticker editor
Diffstat (limited to 'src/Cache_p.h')
-rw-r--r--src/Cache_p.h34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/Cache_p.h b/src/Cache_p.h

index 5d700658..30c365a6 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h
@@ -291,15 +291,9 @@ public: std::optional<std::string> secret(const std::string name); template<class T> - static constexpr bool isStateEvent(const mtx::events::StateEvent<T> &) - { - return true; - } - template<class T> - static constexpr bool isStateEvent(const mtx::events::Event<T> &) - { - return false; - } + constexpr static bool isStateEvent_ = + std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, + mtx::events::StateEvent<decltype(std::declval<T>().content)>>; static int compare_state_key(const MDB_val *a, const MDB_val *b) { @@ -416,11 +410,27 @@ private: } std::visit( - [&txn, &statesdb, &stateskeydb, &eventsDb](auto e) { - if constexpr (isStateEvent(e)) { + [&txn, &statesdb, &stateskeydb, &eventsDb, &membersdb](const auto &e) { + if constexpr (isStateEvent_<decltype(e)>) { eventsDb.put(txn, e.event_id, json(e).dump()); - if (e.type != EventType::Unsupported) { + if (std::is_same_v< + std::remove_cv_t<std::remove_reference_t<decltype(e)>>, + StateEvent<mtx::events::msg::Redacted>>) { + if (e.type == EventType::RoomMember) + membersdb.del(txn, e.state_key, ""); + else if (e.state_key.empty()) + statesdb.del(txn, to_string(e.type)); + else + stateskeydb.del( + txn, + to_string(e.type), + json::object({ + {"key", e.state_key}, + {"id", e.event_id}, + }) + .dump()); + } else if (e.type != EventType::Unsupported) { if (e.state_key.empty()) statesdb.put( txn, to_string(e.type), json(e).dump());