Adding DeviceList for userprofile

This commit is contained in:
Chethan2k1 2020-05-22 11:17:02 +05:30 committed by CH Chethan Reddy
parent 64f204d984
commit a54a973ad6
5 changed files with 79 additions and 32 deletions

View File

@ -3,6 +3,8 @@ import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.3
import im.nheko 1.0
ApplicationWindow{
property var user_data
property var colors: currentActivePalette
@ -18,7 +20,21 @@ ApplicationWindow{
userProfileAvatar.url = chat.model.avatarUrl(user_data.userId).replace("mxc://", "image://MxcImage/")
userProfileName.text = user_data.userName
matrixUserID.text = user_data.userId
console.log("this is happening");
userProfile.userId = user_data.userId
log_devices()
}
function log_devices()
{
console.log(userProfile.deviceList);
userProfile.deviceList.forEach((item,index)=>{
console.log(item.device_id)
console.log(item.display_name)
})
}
UserProfileContent{
id: userProfile
}
background: Item{

View File

@ -267,11 +267,7 @@ ApplicationWindow {
model: 7
delegate: Rectangle {
color: "transparent"
<<<<<<< HEAD
implicitHeight: Qt.application.font.pixelSize * 3
=======
implicitHeight: Qt.application.font.pixelSize * 8
>>>>>>> Add DeviceVerificationFlow dummy and verification test button
implicitWidth: col.width
ColumnLayout {
id: col
@ -414,11 +410,7 @@ ApplicationWindow {
property string title: "Verification timed out"
ColumnLayout {
spacing: 16
<<<<<<< HEAD
Label {
=======
Text {
>>>>>>> Add DeviceVerificationFlow dummy and verification test button
Layout.maximumWidth: 400
Layout.fillHeight: true
Layout.fillWidth: true

View File

@ -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));
}

View File

@ -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::fetchDeviceList(const QString &userId)
UserProfile::setUserId (const QString &user_id){
if(this->userId != userId)
return;
else
this->userId = user_id;
}
void
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();
});
}

View File

@ -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;
};