summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChethan2k1 <40890937+Chethan2k1@users.noreply.github.com>2020-05-22 11:17:02 +0530
committerCH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com>2020-07-30 22:10:27 +0530
commita54a973ad6be4a1e71be6d8f993600fb02601574 (patch)
tree431f1c7aff313e8adc17dee8b3cda8189c28d7c2 /src
parentRewrite UserProfile in qml (diff)
downloadnheko-a54a973ad6be4a1e71be6d8f993600fb02601574.tar.xz
Adding DeviceList for userprofile
Diffstat (limited to 'src')
-rw-r--r--src/timeline/TimelineViewManager.cpp9
-rw-r--r--src/ui/UserProfile.cpp44
-rw-r--r--src/ui/UserProfile.h32
3 files changed, 62 insertions, 23 deletions
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index afd1acb6..227b410f 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -15,6 +15,7 @@
 #include "dialogs/ImageOverlay.h"
 #include "emoji/EmojiModel.h"
 #include "emoji/Provider.h"
+#include "../ui/UserProfile.h"
 
 Q_DECLARE_METATYPE(mtx::events::collections::TimelineEvents)
 
@@ -86,6 +87,8 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin
         qmlRegisterType<DelegateChoice>("im.nheko", 1, 0, "DelegateChoice");
         qmlRegisterType<DelegateChooser>("im.nheko", 1, 0, "DelegateChooser");
         qmlRegisterType<DeviceVerificationFlow>("im.nheko", 1, 0, "DeviceVerificationFlow");
+        qmlRegisterType<UserProfile>("im.nheko",1,0,"UserProfileContent");
+        qRegisterMetaType<DeviceInfo>();
         qRegisterMetaType<mtx::events::collections::TimelineEvents>();
         qmlRegisterType<emoji::EmojiModel>("im.nheko.EmojiModel", 1, 0, "EmojiModel");
         qmlRegisterType<emoji::EmojiProxyModel>("im.nheko.EmojiModel", 1, 0, "EmojiProxyModel");
@@ -467,9 +470,3 @@ TimelineViewManager::startDummyVerification()
 {
         emit deviceVerificationRequest(new DeviceVerificationFlow(this));
 }
-
-void
-TimelineViewManager::startDummyVerification()
-{
-        emit deviceVerificationRequest(new DeviceVerificationFlow(this));
-}
diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp
index ac35f1d4..30785699 100644
--- a/src/ui/UserProfile.cpp
+++ b/src/ui/UserProfile.cpp
@@ -1,28 +1,43 @@
 #include "UserProfile.h"
 #include "Logging.h"
-#include "MatrixClient.h"
 #include "Utils.h"
+#include "mtx/responses/crypto.hpp"
+#include <iostream>
 
 UserProfile::UserProfile(QObject *parent)
   : QObject(parent)
 {}
 
-QMap<QString, QString>
-UserProfile::getDeviceList()
-{
+QVector<DeviceInfo>
+UserProfile::getDeviceList(){
+        UserProfile::fetchDeviceList(this->userId);
         return this->deviceList;
 }
 
+QString
+UserProfile::getUserId (){
+        return this->userId;
+}
+
+void
+UserProfile::setUserId (const QString &user_id){
+        if(this->userId != userId)
+                return;
+        else
+                this->userId = user_id;
+}
+
 void
-UserProfile::fetchDeviceList(const QString &userId)
+UserProfile::fetchDeviceList(const QString &userID)
 {
         auto localUser = utils::localUser();
         mtx::requests::QueryKeys req;
-        req.device_keys[userId.toStdString()] = {};
+        mtx::responses::QueryKeys res;
+        req.device_keys[userID.toStdString()] = {};
 
         http::client()->query_keys(
           req,
-          [user_id = userId.toStdString()](const mtx::responses::QueryKeys &res,
+          [user_id = userID.toStdString(),this](const mtx::responses::QueryKeys &res,
                                            mtx::http::RequestErr err) {
                   if (err) {
                           nhlog::net()->warn("failed to query device keys: {} {}",
@@ -39,14 +54,18 @@ UserProfile::fetchDeviceList(const QString &userId)
 
                   auto devices = res.device_keys.at(user_id);
 
-                  std::vector<DeviceInfo> deviceInfo;
+                  QVector<DeviceInfo> deviceInfo;
                   for (const auto &d : devices) {
                           auto device = d.second;
 
                           // TODO: Verify signatures and ignore those that don't pass.
-                          deviceInfo.emplace_back(DeviceInfo{
-                            QString::fromStdString(d.first),
-                            QString::fromStdString(device.unsigned_info.device_display_name)});
+                        //   std::cout<<d.first<<std::endl;
+                        //   std::cout<<device.unsigned_info.device_display_name<<std::endl;
+                          DeviceInfo newdevice(QString::fromStdString(d.first),QString::fromStdString(device.unsigned_info.device_display_name))
+                          newdevice->device_id = QString::fromStdString(d.first);
+                          newdevice->display_name = QString::fromStdString(device.unsigned_info.device_display_name)
+
+                          deviceInfo.append(std::move(newdevice));
                   }
 
                   std::sort(deviceInfo.begin(),
@@ -54,5 +73,8 @@ UserProfile::fetchDeviceList(const QString &userId)
                             [](const DeviceInfo &a, const DeviceInfo &b) {
                                     return a.device_id > b.device_id;
                             });
+
+                this->deviceList = deviceInfo;
+                emit UserProfile::deviceListUpdated();
           });
 }
diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h
index d003e6ca..bbf57c7b 100644
--- a/src/ui/UserProfile.h
+++ b/src/ui/UserProfile.h
@@ -1,29 +1,49 @@
 #pragma once
 
-#include <QMap>
 #include <QObject>
 #include <QString>
 
-struct DeviceInfo
+#include "MatrixClient.h"
+
+class DeviceInfo
 {
+public:
+        explicit DeviceInfo(QString device_id,QString display_name){
+                this->device_id = device_id;
+                this->display_name = display_name;
+        }
+        ~DeviceInfo() = default;
+        DeviceInfo(const DeviceInfo &device){
+                this->device_id = device.device_id;
+                this->display_name = device.display_name;
+        }
+
         QString device_id;
         QString display_name;
 };
+Q_DECLARE_METATYPE(DeviceInfo);
 
 class UserProfile : public QObject
 {
         Q_OBJECT
-        Q_PROPERTY(QMap deviceList READ getDeviceList NOTIFY DeviceListUpdated)
+        Q_PROPERTY(QVector<DeviceInfo> deviceList READ getDeviceList NOTIFY deviceListUpdated)
+        Q_PROPERTY(QString userId READ getUserId WRITE setUserId)
 
 public:
+        // constructor
         explicit UserProfile(QObject *parent = 0);
-        QMap<QString, QString> getDeviceList();
+        // getters
+        QVector<DeviceInfo> getDeviceList();
+        QString getUserId();
+        // setters
+        void setUserId(const QString &userId);
 
         Q_INVOKABLE void fetchDeviceList(const QString &userID);
 
 signals:
-        void DeviceListUpdated();
+        void deviceListUpdated();
 
 private:
-        QMap<QString, QString> deviceList;
+        QVector<DeviceInfo> deviceList;
+        QString userId;
 };
\ No newline at end of file