diff --git a/include/Cache.h b/include/Cache.h index f5a655cfd981f524a62336debe15710cf82fa9e7..3d906f02ab49b91e4dfcd71c5dcf9956b94e00a2 100644 --- a/include/Cache.h +++ b/include/Cache.h @@ -29,6 +29,8 @@ #include <mtxclient/crypto/client.hpp> #include <mutex> +#include "Logging.hpp" + using mtx::events::state::JoinRule; struct RoomMember @@ -345,7 +347,7 @@ public: bool isNotificationSent(const std::string &event_id); //! Mark a room that uses e2e encryption. - void setEncryptedRoom(const std::string &room_id); + void setEncryptedRoom(lmdb::txn &txn, const std::string &room_id); bool isRoomEncrypted(const std::string &room_id); //! Save the public keys for a device. @@ -467,6 +469,9 @@ private: } } + return; + } else if (mpark::holds_alternative<StateEvent<Encryption>>(event)) { + setEncryptedRoom(txn, room_id); return; } diff --git a/src/Cache.cc b/src/Cache.cc index 397dd05f2c34a7fde485e637b420b709ba3c2680..ed4194eca4b9417b1ae1b24fb4698cc4e9f4c2df 100644 --- a/src/Cache.cc +++ b/src/Cache.cc @@ -183,14 +183,12 @@ Cache::setup() } void -Cache::setEncryptedRoom(const std::string &room_id) +Cache::setEncryptedRoom(lmdb::txn &txn, const std::string &room_id) { nhlog::db()->info("mark room {} as encrypted", room_id); - auto txn = lmdb::txn::begin(env_); - auto db = lmdb::dbi::open(txn, ENCRYPTED_ROOMS_DB, MDB_CREATE); + auto db = lmdb::dbi::open(txn, ENCRYPTED_ROOMS_DB, MDB_CREATE); lmdb::dbi_put(txn, db, lmdb::val(room_id), lmdb::val("0")); - txn.commit(); } bool diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc index 270e1d9a8f27f1e0dd0a1cf803aa9ed756a32f05..d99b3a372b58c40f75ccf20eb20365de32c58282 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc @@ -284,13 +284,6 @@ TimelineView::parseMessageEvent(const mtx::events::collections::TimelineEvents & auto decrypted = parseEncryptedEvent(mpark::get<EncryptedEvent<msg::Encrypted>>(event)); return parseMessageEvent(decrypted, direction); - } else if (mpark::holds_alternative<StateEvent<state::Encryption>>(event)) { - try { - cache::client()->setEncryptedRoom(room_id_.toStdString()); - } catch (const lmdb::error &e) { - nhlog::db()->critical("failed to save room {} as encrypted", - room_id_.toStdString()); - } } return nullptr;