diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-03-15 17:11:02 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-03-15 17:11:02 +0100 |
commit | 86766b739d634adcaa3953c78510d5b10fa88835 (patch) | |
tree | eb9f76683febbf5c7fecedd61ec9bd62660aa4d8 | |
parent | Merge pull request #523 from Jedi18/master (diff) | |
download | nheko-86766b739d634adcaa3953c78510d5b10fa88835.tar.xz |
Store all state events
-rw-r--r-- | src/Cache.cpp | 20 | ||||
-rw-r--r-- | src/Cache_p.h | 67 | ||||
-rw-r--r-- | src/Olm.cpp | 2 |
3 files changed, 38 insertions, 51 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp index cfc6a727..ec0f2858 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -91,6 +91,26 @@ namespace { std::unique_ptr<Cache> instance_ = nullptr; } +template<class T> +bool +containsStateUpdates(const T &e) +{ + return std::visit([](const auto &ev) { return Cache::isStateEvent(ev); }, e); +} + +bool +containsStateUpdates(const mtx::events::collections::StrippedEvents &e) +{ + using namespace mtx::events; + using namespace mtx::events::state; + + return std::holds_alternative<StrippedEvent<state::Avatar>>(e) || + std::holds_alternative<StrippedEvent<CanonicalAlias>>(e) || + std::holds_alternative<StrippedEvent<Name>>(e) || + std::holds_alternative<StrippedEvent<Member>>(e) || + std::holds_alternative<StrippedEvent<Topic>>(e); +} + bool Cache::isHiddenEvent(lmdb::txn &txn, mtx::events::collections::TimelineEvents e, diff --git a/src/Cache_p.h b/src/Cache_p.h index b6c555dc..473c6319 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -271,6 +271,17 @@ public: void deleteSecret(const std::string &name); 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; + } + signals: void newReadReceipts(const QString &room_id, const std::vector<QString> &event_ids); void roomReadStatus(const std::map<QString, bool> &status); @@ -368,56 +379,12 @@ private: return; } - if (!isStateEvent(event)) - return; - - std::visit([&txn, &statesdb]( - auto e) { statesdb.put(txn, to_string(e.type), json(e).dump()); }, - event); - } - - template<class T> - bool isStateEvent(const T &e) - { - using namespace mtx::events; - using namespace mtx::events::state; - - return std::holds_alternative<StateEvent<Aliases>>(e) || - std::holds_alternative<StateEvent<state::Avatar>>(e) || - std::holds_alternative<StateEvent<CanonicalAlias>>(e) || - std::holds_alternative<StateEvent<Create>>(e) || - std::holds_alternative<StateEvent<GuestAccess>>(e) || - std::holds_alternative<StateEvent<HistoryVisibility>>(e) || - std::holds_alternative<StateEvent<JoinRules>>(e) || - std::holds_alternative<StateEvent<Name>>(e) || - std::holds_alternative<StateEvent<Member>>(e) || - std::holds_alternative<StateEvent<PowerLevels>>(e) || - std::holds_alternative<StateEvent<Topic>>(e); - } - - template<class T> - bool containsStateUpdates(const T &e) - { - using namespace mtx::events; - using namespace mtx::events::state; - - return std::holds_alternative<StateEvent<state::Avatar>>(e) || - std::holds_alternative<StateEvent<CanonicalAlias>>(e) || - std::holds_alternative<StateEvent<Name>>(e) || - std::holds_alternative<StateEvent<Member>>(e) || - std::holds_alternative<StateEvent<Topic>>(e); - } - - bool containsStateUpdates(const mtx::events::collections::StrippedEvents &e) - { - using namespace mtx::events; - using namespace mtx::events::state; - - return std::holds_alternative<StrippedEvent<state::Avatar>>(e) || - std::holds_alternative<StrippedEvent<CanonicalAlias>>(e) || - std::holds_alternative<StrippedEvent<Name>>(e) || - std::holds_alternative<StrippedEvent<Member>>(e) || - std::holds_alternative<StrippedEvent<Topic>>(e); + std::visit( + [&txn, &statesdb](auto e) { + if constexpr (isStateEvent(e)) + statesdb.put(txn, to_string(e.type), json(e).dump()); + }, + event); } void saveInvites(lmdb::txn &txn, diff --git a/src/Olm.cpp b/src/Olm.cpp index d2f78b76..895afee4 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp @@ -430,7 +430,7 @@ encrypt_group_message(const std::string &room_id, const std::string &device_id, OutboundGroupSessionData group_session_data; if (cache::outboundMegolmSessionExists(room_id)) { - auto res = cache::getOutboundMegolmSession(room_id); + auto res = cache::getOutboundMegolmSession(room_id); auto encryptionSettings = cache::client()->roomEncryptionSettings(room_id); mtx::events::state::Encryption defaultSettings; |