summary refs log tree commit diff
path: root/src/ui
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
parentError Handling and some fixes (diff)
downloadnheko-6fae36abc404ffb7e6ae29c9edceda5231400f0a.tar.xz
[WIP] Add Caching for users
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/UserProfile.cpp106
-rw-r--r--src/ui/UserProfile.h4
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