From ac1fbbb69fdd4e313072cbf95eb9288db1257a9d Mon Sep 17 00:00:00 2001 From: CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> Date: Wed, 1 Jul 2020 17:47:10 +0530 Subject: Some issue with UserProfile --- src/ui/UserProfile.cpp | 71 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 23 deletions(-) (limited to 'src/ui/UserProfile.cpp') diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index c637280b..8c6fb8e4 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -7,11 +7,25 @@ #include // only for debugging +Q_DECLARE_METATYPE(UserProfile::Status) + UserProfile::UserProfile(QObject *parent) : QObject(parent) -{} +{ + qRegisterMetaType(); + connect( + this, &UserProfile::updateDeviceList, this, [this]() { fetchDeviceList(this->userId); }); + connect( + this, + &UserProfile::appendDeviceList, + this, + [this](QString device_id, QString device_name, UserProfile::Status verification_status) { + this->deviceList.push_back( + DeviceInfo{device_id, device_name, verification_status}); + }); +} -QVector +std::vector UserProfile::getDeviceList() { return this->deviceList; @@ -37,7 +51,8 @@ UserProfile::setUserId(const QString &user_id) void UserProfile::callback_fn(const mtx::responses::QueryKeys &res, mtx::http::RequestErr err, - std::string user_id) + std::string user_id, + std::optional> cross_verified) { if (err) { nhlog::net()->warn("failed to query device keys: {},{}", @@ -52,24 +67,40 @@ UserProfile::callback_fn(const mtx::responses::QueryKeys &res, } auto devices = res.device_keys.at(user_id); - QVector deviceInfo; + std::vector deviceInfo; + auto device_verified = cache::getVerifiedCache(user_id); for (const auto &d : devices) { auto device = d.second; // TODO: Verify signatures and ignore those that don't pass. - DeviceInfo newdevice( + UserProfile::Status verified = UserProfile::Status::UNVERIFIED; + if (cross_verified.has_value()) { + if (std::find(cross_verified->begin(), cross_verified->end(), d.first) != + cross_verified->end()) + verified = UserProfile::Status::VERIFIED; + } else if (device_verified.has_value()) { + if (std::find(device_verified->device_verified.begin(), + device_verified->device_verified.end(), + d.first) != device_verified->device_verified.end()) + verified = UserProfile::Status::VERIFIED; + } else if (device_verified.has_value()) { + if (std::find(device_verified->device_blocked.begin(), + device_verified->device_blocked.end(), + d.first) != device_verified->device_blocked.end()) + verified = UserProfile::Status::BLOCKED; + } + + emit UserProfile::appendDeviceList( 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)); + QString::fromStdString(device.unsigned_info.device_display_name), + verified); } - 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(); @@ -81,9 +112,9 @@ 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()); + if (user_cache.has_value()) { + this->callback_fn( + user_cache->keys, {}, userID.toStdString(), user_cache->cross_verified); } else { mtx::requests::QueryKeys req; req.device_keys[userID.toStdString()] = {}; @@ -91,17 +122,11 @@ UserProfile::fetchDeviceList(const QString &userID) req, [user_id = userID.toStdString(), this](const mtx::responses::QueryKeys &res, mtx::http::RequestErr err) { - this->callback_fn(res, err, user_id); + this->callback_fn(res, err, user_id, {}); }); } } -void -UserProfile::updateDeviceList() -{ - fetchDeviceList(this->userId); -} - void UserProfile::banUser() { -- cgit 1.5.1