summary refs log tree commit diff
path: root/src/timeline/EventStore.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-02-20 01:04:49 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2023-02-20 01:04:49 +0100
commitac4c9e024ec84bc49f349426dbc382e138197435 (patch)
tree035268b0674d77b2ffa181a0b9ef0bef6a872649 /src/timeline/EventStore.cpp
parentRemove a few more unused symbols (diff)
downloadnheko-ac4c9e024ec84bc49f349426dbc382e138197435.tar.xz
More template bloat reduction
Diffstat (limited to 'src/timeline/EventStore.cpp')
-rw-r--r--src/timeline/EventStore.cpp131
1 files changed, 65 insertions, 66 deletions
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp

index 5f118895..d035d840 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp
@@ -242,24 +242,23 @@ EventStore::EventStore(std::string room_id, QObject *) if (!session.session) continue; - std::visit( - [&pending_event, &original_encrypted, &session, this](auto &msg) { - nlohmann::json doc = {{"type", mtx::events::to_string(msg.type)}, + auto doc = std::visit( + [this](auto &msg) { + return nlohmann::json{{"type", mtx::events::to_string(msg.type)}, {"content", nlohmann::json(msg.content)}, {"room_id", room_id_}}; + }, + pending_event->data); - auto data = olm::encrypt_group_message_with_session( - session.session, http::client()->device_id(), doc); + auto data = olm::encrypt_group_message_with_session( + session.session, http::client()->device_id(), std::move(doc)); - session.data.message_index = - olm_outbound_group_session_message_index(session.session.get()); - cache::updateOutboundMegolmSession( - room_id_, session.data, session.session); + session.data.message_index = + olm_outbound_group_session_message_index(session.session.get()); + cache::updateOutboundMegolmSession(room_id_, session.data, session.session); - original_encrypted.content = data; - pending_event->data = original_encrypted; - }, - pending_event->data); + original_encrypted.content = data; + pending_event->data = original_encrypted; } cache::client()->replaceEvent(room_id_, pending_event_id, *pending_event); @@ -367,6 +366,58 @@ EventStore::receivedSessionKey(const std::string &session_id) } } +namespace { +template<class... Ts> +struct overloaded : Ts... +{ + using Ts::operator()...; +}; +template<class... Ts> +overloaded(Ts...) -> overloaded<Ts...>; +} + +static void +handle_room_verification(EventStore *self, const mtx::events::collections::TimelineEvents &event) +{ + std::visit( + overloaded{ + [self](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationRequest> &msg) { + nhlog::db()->debug("handle_room_verification: Request"); + emit self->startDMVerification(msg); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationCancel> &msg) { + nhlog::db()->debug("handle_room_verification: Cancel"); + ChatPage::instance()->receivedDeviceVerificationCancel(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationAccept> &msg) { + nhlog::db()->debug("handle_room_verification: Accept"); + ChatPage::instance()->receivedDeviceVerificationAccept(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationKey> &msg) { + nhlog::db()->debug("handle_room_verification: Key"); + ChatPage::instance()->receivedDeviceVerificationKey(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationMac> &msg) { + nhlog::db()->debug("handle_room_verification: Mac"); + ChatPage::instance()->receivedDeviceVerificationMac(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationReady> &msg) { + nhlog::db()->debug("handle_room_verification: Ready"); + ChatPage::instance()->receivedDeviceVerificationReady(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationDone> &msg) { + nhlog::db()->debug("handle_room_verification: Done"); + ChatPage::instance()->receivedDeviceVerificationDone(msg.content); + }, + [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationStart> &msg) { + nhlog::db()->debug("handle_room_verification: Start"); + ChatPage::instance()->receivedDeviceVerificationStart(msg.content, msg.sender); + }, + [](const auto &) {}, + }, + event); +} + void EventStore::handleSync(const mtx::responses::Timeline &events) { @@ -464,64 +515,12 @@ EventStore::handleSync(const mtx::responses::Timeline &events) if (d_event->event && std::visit([](auto e) { return (e.sender != utils::localUser().toStdString()); }, *d_event->event)) { - handle_room_verification(*d_event->event); + handle_room_verification(this, *d_event->event); } } } } -namespace { -template<class... Ts> -struct overloaded : Ts... -{ - using Ts::operator()...; -}; -template<class... Ts> -overloaded(Ts...) -> overloaded<Ts...>; -} - -void -EventStore::handle_room_verification(mtx::events::collections::TimelineEvents event) -{ - std::visit( - overloaded{ - [this](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationRequest> &msg) { - nhlog::db()->debug("handle_room_verification: Request"); - emit startDMVerification(msg); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationCancel> &msg) { - nhlog::db()->debug("handle_room_verification: Cancel"); - ChatPage::instance()->receivedDeviceVerificationCancel(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationAccept> &msg) { - nhlog::db()->debug("handle_room_verification: Accept"); - ChatPage::instance()->receivedDeviceVerificationAccept(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationKey> &msg) { - nhlog::db()->debug("handle_room_verification: Key"); - ChatPage::instance()->receivedDeviceVerificationKey(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationMac> &msg) { - nhlog::db()->debug("handle_room_verification: Mac"); - ChatPage::instance()->receivedDeviceVerificationMac(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationReady> &msg) { - nhlog::db()->debug("handle_room_verification: Ready"); - ChatPage::instance()->receivedDeviceVerificationReady(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationDone> &msg) { - nhlog::db()->debug("handle_room_verification: Done"); - ChatPage::instance()->receivedDeviceVerificationDone(msg.content); - }, - [](const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationStart> &msg) { - nhlog::db()->debug("handle_room_verification: Start"); - ChatPage::instance()->receivedDeviceVerificationStart(msg.content, msg.sender); - }, - [](const auto &) {}, - }, - event); -} - std::vector<mtx::events::collections::TimelineEvents> EventStore::edits(const std::string &event_id) {