From 9a9dbda571a674ecfbf23533c64ec9cb095479ef Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 30 Dec 2021 04:54:03 +0100 Subject: Update presence dynamically and reduce allocations --- src/Cache.cpp | 52 ++++++++++------------------------------------------ 1 file changed, 10 insertions(+), 42 deletions(-) (limited to 'src/Cache.cpp') diff --git a/src/Cache.cpp b/src/Cache.cpp index b197353e..eec5b79f 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -3897,53 +3897,26 @@ Cache::avatarUrl(const QString &room_id, const QString &user_id) return QString(); } -mtx::presence::PresenceState -Cache::presenceState(const std::string &user_id) +mtx::events::presence::Presence +Cache::presence(const std::string &user_id) { if (user_id.empty()) return {}; std::string_view presenceVal; - auto txn = lmdb::txn::begin(env_); - auto db = getPresenceDb(txn); - auto res = db.get(txn, user_id, presenceVal); - - mtx::presence::PresenceState state = mtx::presence::offline; - - if (res) { - mtx::events::presence::Presence presence = - json::parse(std::string_view(presenceVal.data(), presenceVal.size())); - state = presence.presence; - } - - txn.commit(); - - return state; -} - -std::string -Cache::statusMessage(const std::string &user_id) -{ - if (user_id.empty()) - return {}; - - std::string_view presenceVal; - - auto txn = lmdb::txn::begin(env_); + auto txn = ro_txn(env_); auto db = getPresenceDb(txn); auto res = db.get(txn, user_id, presenceVal); - std::string status_msg; + mtx::events::presence::Presence presence_{}; + presence_.presence = mtx::presence::PresenceState::offline; if (res) { - mtx::events::presence::Presence presence = json::parse(presenceVal); - status_msg = presence.status_msg; + presence_ = json::parse(std::string_view(presenceVal.data(), presenceVal.size())); } - txn.commit(); - - return status_msg; + return presence_; } void @@ -4747,17 +4720,12 @@ avatarUrl(const QString &room_id, const QString &user_id) return instance_->avatarUrl(room_id, user_id); } -mtx::presence::PresenceState -presenceState(const std::string &user_id) +mtx::events::presence::Presence +presence(const std::string &user_id) { if (!instance_) return {}; - return instance_->presenceState(user_id); -} -std::string -statusMessage(const std::string &user_id) -{ - return instance_->statusMessage(user_id); + return instance_->presence(user_id); } // user cache stores user keys -- cgit 1.5.1