summary refs log tree commit diff
path: root/src/ui/UserProfile.cpp
diff options
context:
space:
mode:
authorCH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com>2020-06-28 21:01:34 +0530
committerCH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com>2020-07-30 22:10:27 +0530
commit6fae36abc404ffb7e6ae29c9edceda5231400f0a (patch)
treebce50b744fd917e393848813d8206668f48bd190 /src/ui/UserProfile.cpp
parentError Handling and some fixes (diff)
downloadnheko-6fae36abc404ffb7e6ae29c9edceda5231400f0a.tar.xz
[WIP] Add Caching for users
Diffstat (limited to 'src/ui/UserProfile.cpp')
-rw-r--r--src/ui/UserProfile.cpp92
1 files changed, 53 insertions, 39 deletions
diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp

index 6aa4deff..c637280b 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp
@@ -1,9 +1,12 @@ #include "UserProfile.h" +#include "Cache.h" #include "ChatPage.h" #include "Logging.h" #include "Utils.h" #include "mtx/responses/crypto.hpp" +#include <iostream> // only for debugging + UserProfile::UserProfile(QObject *parent) : QObject(parent) {} @@ -32,54 +35,65 @@ UserProfile::setUserId(const QString &user_id) } void -UserProfile::fetchDeviceList(const QString &userID) +UserProfile::callback_fn(const mtx::responses::QueryKeys &res, + mtx::http::RequestErr err, + std::string user_id) { - auto localUser = utils::localUser(); - mtx::requests::QueryKeys req; - mtx::responses::QueryKeys res; - req.device_keys[userID.toStdString()] = {}; + if (err) { + nhlog::net()->warn("failed to query device keys: {},{}", + err->matrix_error.errcode, + static_cast<int>(err->status_code)); + return; + } - http::client()->query_keys( - req, - [user_id = userID.toStdString(), 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; - } + if (res.device_keys.empty() || (res.device_keys.find(user_id) == res.device_keys.end())) { + nhlog::net()->warn("no devices retrieved {}", user_id); + return; + } - if (res.device_keys.empty() || - (res.device_keys.find(user_id) == res.device_keys.end())) { - nhlog::net()->warn("no devices retrieved {}", user_id); - return; - } + auto devices = res.device_keys.at(user_id); + QVector<DeviceInfo> deviceInfo; - auto devices = res.device_keys.at(user_id); - QVector<DeviceInfo> deviceInfo; + for (const auto &d : devices) { + auto device = d.second; - for (const auto &d : devices) { - auto device = d.second; + // TODO: Verify signatures and ignore those that don't pass. + DeviceInfo newdevice( + QString::fromStdString(d.first), + QString::fromStdString(device.unsigned_info.device_display_name)); + QString::fromStdString(device.unsigned_info.device_display_name); - // TODO: Verify signatures and ignore those that don't pass. - DeviceInfo newdevice( - QString::fromStdString(d.first), - QString::fromStdString(device.unsigned_info.device_display_name)); - QString::fromStdString(device.unsigned_info.device_display_name); + deviceInfo.append(std::move(newdevice)); + } - deviceInfo.append(std::move(newdevice)); - } + std::sort( + deviceInfo.begin(), deviceInfo.end(), [](const DeviceInfo &a, const DeviceInfo &b) { + return a.device_id > b.device_id; + }); - std::sort(deviceInfo.begin(), - deviceInfo.end(), - [](const DeviceInfo &a, const DeviceInfo &b) { - return a.device_id > b.device_id; - }); + this->deviceList = std::move(deviceInfo); + emit UserProfile::deviceListUpdated(); +} - this->deviceList = std::move(deviceInfo); - emit UserProfile::deviceListUpdated(); - }); +void +UserProfile::fetchDeviceList(const QString &userID) +{ + auto localUser = utils::localUser(); + auto user_cache = cache::getUserCache(userID.toStdString()); + + if (user_cache.user_id == userID.toStdString()) { + mtx::http::ClientError error; + this->callback_fn(user_cache.keys, std::move(error), userID.toStdString()); + } else { + mtx::requests::QueryKeys req; + req.device_keys[userID.toStdString()] = {}; + http::client()->query_keys( + req, + [user_id = userID.toStdString(), this](const mtx::responses::QueryKeys &res, + mtx::http::RequestErr err) { + this->callback_fn(res, err, user_id); + }); + } } void