forked from mirror/nheko
parent
707248fea3
commit
64f204d984
@ -0,0 +1,85 @@ |
||||
import QtQuick 2.9 |
||||
import QtQuick.Controls 2.3 |
||||
import QtQuick.Layouts 1.2 |
||||
import QtQuick.Window 2.3 |
||||
|
||||
ApplicationWindow{ |
||||
property var user_data |
||||
property var colors: currentActivePalette |
||||
|
||||
id:userProfileDialog |
||||
height: 500 |
||||
width: 500 |
||||
modality:Qt.WindowModal |
||||
Layout.alignment: Qt.AlignHCenter |
||||
palette: colors |
||||
|
||||
onAfterRendering: { |
||||
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"); |
||||
} |
||||
|
||||
background: Item{ |
||||
id: userProfileItem |
||||
width: userProfileDialog.width |
||||
height: userProfileDialog.height |
||||
anchors.margins: { |
||||
top:20 |
||||
} |
||||
|
||||
ColumnLayout{ |
||||
anchors.fill: userProfileItem |
||||
width: userProfileDialog.width |
||||
spacing: 10 |
||||
|
||||
Avatar{ |
||||
id: userProfileAvatar |
||||
height: 130 |
||||
width: 130 |
||||
displayName: modelData.userName |
||||
Layout.alignment: Qt.AlignHCenter |
||||
} |
||||
|
||||
Label{ |
||||
id: userProfileName |
||||
fontSizeMode: Text.HorizontalFit |
||||
Layout.alignment: Qt.AlignHCenter |
||||
} |
||||
|
||||
Label{ |
||||
id: matrixUserID |
||||
fontSizeMode: Text.HorizontalFit |
||||
Layout.alignment: Qt.AlignHCenter |
||||
} |
||||
|
||||
ScrollView { |
||||
implicitHeight: userProfileDialog.height/2+20 |
||||
implicitWidth: userProfileDialog.width-20 |
||||
clip: true |
||||
Layout.alignment: Qt.AlignHCenter |
||||
ScrollBar.horizontal.policy: ScrollBar.AlwaysOn |
||||
ScrollBar.vertical.policy: ScrollBar.AlwaysOn |
||||
|
||||
Label { |
||||
text: "ABC" |
||||
font.pixelSize: 700 |
||||
} |
||||
} |
||||
|
||||
Button{ |
||||
text:"OK" |
||||
onClicked: userProfileDialog.close() |
||||
anchors.margins: { |
||||
right:10 |
||||
bottom:10 |
||||
} |
||||
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignBottom |
||||
} |
||||
} |
||||
|
||||
Item { Layout.fillHeight: true } |
||||
} |
||||
} |
@ -0,0 +1,58 @@ |
||||
#include "UserProfile.h" |
||||
#include "Logging.h" |
||||
#include "MatrixClient.h" |
||||
#include "Utils.h" |
||||
|
||||
UserProfile::UserProfile(QObject *parent) |
||||
: QObject(parent) |
||||
{} |
||||
|
||||
QMap<QString, QString> |
||||
UserProfile::getDeviceList() |
||||
{ |
||||
return this->deviceList; |
||||
} |
||||
|
||||
void |
||||
UserProfile::fetchDeviceList(const QString &userId) |
||||
{ |
||||
auto localUser = utils::localUser(); |
||||
mtx::requests::QueryKeys req; |
||||
req.device_keys[userId.toStdString()] = {}; |
||||
|
||||
http::client()->query_keys( |
||||
req, |
||||
[user_id = userId.toStdString()](const mtx::responses::QueryKeys &res, |
||||
mtx::http::RequestErr err) { |
||||
if (err) { |
||||
nhlog::net()->warn("failed to query device keys: {} {}", |
||||
err->matrix_error.error, |
||||
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); |
||||
|
||||
std::vector<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::sort(deviceInfo.begin(), |
||||
deviceInfo.end(), |
||||
[](const DeviceInfo &a, const DeviceInfo &b) { |
||||
return a.device_id > b.device_id; |
||||
}); |
||||
}); |
||||
} |
@ -0,0 +1,29 @@ |
||||
#pragma once |
||||
|
||||
#include <QMap> |
||||
#include <QObject> |
||||
#include <QString> |
||||
|
||||
struct DeviceInfo |
||||
{ |
||||
QString device_id; |
||||
QString display_name; |
||||
}; |
||||
|
||||
class UserProfile : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
Q_PROPERTY(QMap deviceList READ getDeviceList NOTIFY DeviceListUpdated) |
||||
|
||||
public: |
||||
explicit UserProfile(QObject *parent = 0); |
||||
QMap<QString, QString> getDeviceList(); |
||||
|
||||
Q_INVOKABLE void fetchDeviceList(const QString &userID); |
||||
|
||||
signals: |
||||
void DeviceListUpdated(); |
||||
|
||||
private: |
||||
QMap<QString, QString> deviceList; |
||||
}; |
Loading…
Reference in new issue