From 47b822604d81a6c603ce6c9e868456c8ccc2e18d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 12 Feb 2022 19:27:51 +0100 Subject: Hidden events: Refactor slightly for reusability --- src/Cache.cpp | 56 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 15 deletions(-) (limited to 'src/Cache.cpp') 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>(*temp) - .content); - if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, room_id)) - hiddenEvents = - std::move(std::get>(*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>( + *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>( + *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>, + 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(), 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>, + AccountDataEvent>) { + if (!event.content.hidden_event_types) { + accountDataDb.del(txn, "im.nheko.hidden_events"); + return; + } + } auto j = json(event); accountDataDb.put(txn, j["type"].get(), j.dump()); }, -- cgit 1.5.1