summary refs log tree commit diff
path: root/src/Cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r--src/Cache.cpp46
1 files changed, 26 insertions, 20 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp

index 8cee3453..cff0029e 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp
@@ -111,6 +111,24 @@ Cache::Cache(const QString &userId, QObject *parent) , localUserId_{userId} { setup(); + connect(this, + &Cache::updateUserCacheFlag, + this, + [this](const std::string &user_id) { + std::optional<UserCache> cache_ = getUserCache(user_id); + if (cache_.has_value()) { + cache_.value().isUpdated = false; + setUserCache(user_id, cache_.value()); + } else { + setUserCache(user_id, UserCache{}); + } + }, + Qt::QueuedConnection); + connect(this, + &Cache::deleteLeftUsers, + this, + [this](const std::string &user_id) { deleteUserCache(user_id); }, + Qt::QueuedConnection); } void @@ -1011,7 +1029,7 @@ Cache::saveState(const mtx::responses::Sync &res) savePresence(txn, res.presence); - // updateUserCache(res.device_lists); + updateUserCache(res.device_lists); removeLeftRooms(txn, res.rooms.leave); @@ -2889,13 +2907,15 @@ Cache::statusMessage(const std::string &user_id) void to_json(json &j, const UserCache &info) { - j["keys"] = info.keys; + j["keys"] = info.keys; + j["isUpdated"] = info.isUpdated; } void from_json(const json &j, UserCache &info) { - info.keys = j.at("keys").get<mtx::responses::QueryKeys>(); + info.keys = j.at("keys").get<mtx::responses::QueryKeys>(); + info.isUpdated = j.at("isUpdated").get<bool>(); } std::optional<UserCache> @@ -2935,26 +2955,12 @@ Cache::setUserCache(const std::string &user_id, const UserCache &body) void Cache::updateUserCache(const mtx::responses::DeviceLists body) { - for (auto user_id : body.changed) { - mtx::requests::QueryKeys req; - req.device_keys[user_id] = {}; - - http::client()->query_keys( - req, - [user_id, this](const mtx::responses::QueryKeys res, mtx::http::RequestErr err) { - if (err) { - nhlog::net()->warn("failed to query device keys: {},{}", - err->matrix_error.errcode, - static_cast<int>(err->status_code)); - return; - } - - setUserCache(user_id, UserCache{std::move(res)}); - }); + for (std::string user_id : body.changed) { + emit updateUserCacheFlag(user_id); } for (std::string user_id : body.left) { - deleteUserCache(user_id); + emit deleteLeftUsers(user_id); } }