diff options
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r-- | src/Cache.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp index 7a19cba4..3fe2892b 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -82,6 +82,8 @@ static constexpr auto DEVICES_DB("devices"); static constexpr auto DEVICE_KEYS_DB("device_keys"); //! room_ids that have encryption enabled. static constexpr auto ENCRYPTED_ROOMS_DB("encrypted_rooms"); +//! Expiration progress for each room +static constexpr auto EVENT_EXPIRATION_BG_JOB_DB("event_expiration_bg_job"); //! room_id -> pickled OlmInboundGroupSession static constexpr auto INBOUND_MEGOLM_SESSIONS_DB("inbound_megolm_sessions"); @@ -327,7 +329,9 @@ Cache::setup() megolmSessionDataDb_ = lmdb::dbi::open(txn, MEGOLM_SESSIONS_DATA_DB, MDB_CREATE); // What rooms are encrypted - encryptedRooms_ = lmdb::dbi::open(txn, ENCRYPTED_ROOMS_DB, MDB_CREATE); + encryptedRooms_ = lmdb::dbi::open(txn, ENCRYPTED_ROOMS_DB, MDB_CREATE); + eventExpiryBgJob_ = lmdb::dbi::open(txn, EVENT_EXPIRATION_BG_JOB_DB, MDB_CREATE); + [[maybe_unused]] auto verificationDb = getVerificationDb(txn); [[maybe_unused]] auto userKeysDb = getUserKeysDb(txn); @@ -585,6 +589,39 @@ Cache::pickleSecret() } void +Cache::storeEventExpirationProgress(const std::string &room, + const std::string &expirationSettings, + const std::string &stopMarker) +{ + nlohmann::json j; + j["s"] = expirationSettings; + j["m"] = stopMarker; + + auto txn = lmdb::txn::begin(env_); + eventExpiryBgJob_.put(txn, room, j.dump()); + txn.commit(); +} + +std::string +Cache::loadEventExpirationProgress(const std::string &room, const std::string &expirationSettings) + +{ + try { + auto txn = ro_txn(env_); + std::string_view data; + if (!eventExpiryBgJob_.get(txn, room, data)) + return ""; + + auto j = nlohmann::json::parse(data); + if (j.value("s", "") == expirationSettings) + return j.value("m", ""); + } catch (...) { + return ""; + } + return ""; +} + +void Cache::setEncryptedRoom(lmdb::txn &txn, const std::string &room_id) { nhlog::db()->info("mark room {} as encrypted", room_id); |