diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-02-12 19:27:51 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-02-12 19:48:53 +0100 |
commit | 47b822604d81a6c603ce6c9e868456c8ccc2e18d (patch) | |
tree | 73f06796cff7941b9f0e7ab2b2a9e59054da0afa /src/Cache.cpp | |
parent | Hidden events: Make reusable read function (diff) | |
download | nheko-47b822604d81a6c603ce6c9e868456c8ccc2e18d.tar.xz |
Hidden events: Refactor slightly for reusability
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r-- | src/Cache.cpp | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp index 9f3ada58..6bad336a 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -173,24 +173,31 @@ Cache::isHiddenEvent(lmdb::txn &txn, } mtx::events::account_data::nheko_extensions::HiddenEvents hiddenEvents; - hiddenEvents.hidden_event_types = { - EventType::Reaction, EventType::CallCandidates, EventType::Unsupported}; - - if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, "")) - hiddenEvents = - std::move(std::get<mtx::events::AccountDataEvent< - mtx::events::account_data::nheko_extensions::HiddenEvents>>(*temp) - .content); - if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, room_id)) - hiddenEvents = - std::move(std::get<mtx::events::AccountDataEvent< - mtx::events::account_data::nheko_extensions::HiddenEvents>>(*temp) - .content); + hiddenEvents.hidden_event_types = std::vector{ + EventType::Reaction, + EventType::CallCandidates, + EventType::Unsupported, + }; + + if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, "")) { + auto h = std::get< + mtx::events::AccountDataEvent<mtx::events::account_data::nheko_extensions::HiddenEvents>>( + *temp); + if (h.content.hidden_event_types) + hiddenEvents = std::move(h.content); + } + if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, room_id)) { + auto h = std::get< + mtx::events::AccountDataEvent<mtx::events::account_data::nheko_extensions::HiddenEvents>>( + *temp); + if (h.content.hidden_event_types) + hiddenEvents = std::move(h.content); + } return std::visit( [hiddenEvents](const auto &ev) { - return std::any_of(hiddenEvents.hidden_event_types.begin(), - hiddenEvents.hidden_event_types.end(), + return std::any_of(hiddenEvents.hidden_event_types->begin(), + hiddenEvents.hidden_event_types->end(), [ev](EventType type) { return type == ev.type; }); }, e); @@ -1515,6 +1522,16 @@ Cache::saveState(const mtx::responses::Sync &res) for (const auto &ev : res.account_data.events) std::visit( [&txn, &accountDataDb](const auto &event) { + if constexpr (std::is_same_v< + std::remove_cv_t<std::remove_reference_t<decltype(event)>>, + AccountDataEvent< + mtx::events::account_data::nheko_extensions::HiddenEvents>>) { + if (!event.content.hidden_event_types) { + accountDataDb.del(txn, "im.nheko.hidden_events"); + return; + } + } + auto j = json(event); accountDataDb.put(txn, j["type"].get<std::string>(), j.dump()); }, @@ -1589,6 +1606,15 @@ Cache::saveState(const mtx::responses::Sync &res) for (const auto &evt : room.second.account_data.events) { std::visit( [&txn, &accountDataDb](const auto &event) { + if constexpr (std::is_same_v< + std::remove_cv_t<std::remove_reference_t<decltype(event)>>, + AccountDataEvent<mtx::events::account_data::nheko_extensions:: + HiddenEvents>>) { + if (!event.content.hidden_event_types) { + accountDataDb.del(txn, "im.nheko.hidden_events"); + return; + } + } auto j = json(event); accountDataDb.put(txn, j["type"].get<std::string>(), j.dump()); }, |