diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-08-06 01:45:47 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-08-06 04:31:53 +0200 |
commit | a57a15a2e07da8cc07bc12e828b7c636efe36cbc (patch) | |
tree | a33d6375ab1c24ded5cdf3f628af29bfe8370a68 /src/Cache_p.h | |
parent | Merge pull request #666 from LorenDB/qml-all-the-things (diff) | |
download | nheko-a57a15a2e07da8cc07bc12e828b7c636efe36cbc.tar.xz |
Basic sticker pack editor
Diffstat (limited to 'src/Cache_p.h')
-rw-r--r-- | src/Cache_p.h | 34 |
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()); |