diff options
author | CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> | 2020-06-28 21:01:34 +0530 |
---|---|---|
committer | CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> | 2020-07-30 22:10:27 +0530 |
commit | 6fae36abc404ffb7e6ae29c9edceda5231400f0a (patch) | |
tree | bce50b744fd917e393848813d8206668f48bd190 /src/ui | |
parent | Error Handling and some fixes (diff) | |
download | nheko-6fae36abc404ffb7e6ae29c9edceda5231400f0a.tar.xz |
[WIP] Add Caching for users
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/UserProfile.cpp | 106 | ||||
-rw-r--r-- | src/ui/UserProfile.h | 4 |
2 files changed, 64 insertions, 46 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()] = {}; - - 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; - } - - auto devices = res.device_keys.at(user_id); - QVector<DeviceInfo> deviceInfo; - - 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); - - deviceInfo.append(std::move(newdevice)); - } - - 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(); + 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; + } + + auto devices = res.device_keys.at(user_id); + QVector<DeviceInfo> deviceInfo; + + 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); + + deviceInfo.append(std::move(newdevice)); + } + + 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(); +} + +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 diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h index ad92d182..befd82ec 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h @@ -47,4 +47,8 @@ signals: private: QVector<DeviceInfo> deviceList; QString userId; + + void callback_fn(const mtx::responses::QueryKeys &res, + mtx::http::RequestErr err, + std::string user_id); }; \ No newline at end of file |