mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Rewrite UserProfile in qml
This commit is contained in:
parent
707248fea3
commit
64f204d984
7 changed files with 202 additions and 2 deletions
|
@ -276,6 +276,7 @@ set(SRC_FILES
|
|||
src/ui/ToggleButton.cpp
|
||||
src/ui/Theme.cpp
|
||||
src/ui/ThemeManager.cpp
|
||||
src/ui/UserProfile.cpp
|
||||
|
||||
src/AvatarProvider.cpp
|
||||
src/BlurhashProvider.cpp
|
||||
|
@ -480,6 +481,7 @@ qt5_wrap_cpp(MOC_HEADERS
|
|||
src/ui/ToggleButton.h
|
||||
src/ui/Theme.h
|
||||
src/ui/ThemeManager.h
|
||||
src/ui/UserProfile.h
|
||||
|
||||
src/notifications/Manager.h
|
||||
|
||||
|
|
|
@ -286,7 +286,10 @@ Page {
|
|||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: chat.model.openUserProfile(modelData.userId)
|
||||
onClicked: {
|
||||
userProfile.user_data = modelData
|
||||
userProfile.show()
|
||||
}
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
@ -300,7 +303,10 @@ Page {
|
|||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: chat.model.openUserProfile(section.split(" ")[0])
|
||||
onClicked: {
|
||||
userProfile.user_data = modelData
|
||||
userProfile.show()
|
||||
}
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
@ -314,6 +320,9 @@ Page {
|
|||
width: chat.delegateMaxWidth - parent.spacing*2 - userName.implicitWidth - avatarSize
|
||||
font.italic: true
|
||||
}
|
||||
UserProfile{
|
||||
id: userProfile
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
85
resources/qml/UserProfile.qml
Normal file
85
resources/qml/UserProfile.qml
Normal file
|
@ -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 }
|
||||
}
|
||||
}
|
|
@ -126,6 +126,7 @@
|
|||
<file>qml/TimelineRow.qml</file>
|
||||
<file>qml/emoji/EmojiButton.qml</file>
|
||||
<file>qml/emoji/EmojiPicker.qml</file>
|
||||
<file>qml/UserProfile.qml</file>
|
||||
<file>qml/delegates/MessageDelegate.qml</file>
|
||||
<file>qml/delegates/TextMessage.qml</file>
|
||||
<file>qml/delegates/NoticeMessage.qml</file>
|
||||
|
|
16
src/Olm.cpp
16
src/Olm.cpp
|
@ -52,6 +52,11 @@ handle_to_device_messages(const std::vector<mtx::events::collections::DeviceEven
|
|||
nhlog::crypto()->warn("validation error for olm message: {} {}",
|
||||
e.what(),
|
||||
j_msg.dump(2));
|
||||
|
||||
nhlog::crypto()->warn("validation error for olm message: {} {}",
|
||||
e.what(),
|
||||
j_msg.dump(2));
|
||||
|
||||
}
|
||||
|
||||
} else if (msg_type == to_string(mtx::events::EventType::RoomKeyRequest)) {
|
||||
|
@ -368,6 +373,10 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
|
|||
if (!cache::outboundMegolmSessionExists(req.content.room_id)) {
|
||||
nhlog::crypto()->warn("requested session not found in room: {}",
|
||||
req.content.room_id);
|
||||
|
||||
nhlog::crypto()->warn("requested session not found in room: {}",
|
||||
req.content.room_id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -390,6 +399,13 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
|
|||
}
|
||||
|
||||
if (!utils::respondsToKeyRequests(req.content.room_id)) {
|
||||
|
||||
nhlog::crypto()->debug("ignoring all key requests for room {}",
|
||||
req.content.room_id);
|
||||
|
||||
nhlog::crypto()->debug("ignoring all key requests for room {}",
|
||||
req.content.room_id);
|
||||
|
||||
nhlog::crypto()->debug("ignoring all key requests for room {}",
|
||||
req.content.room_id);
|
||||
return;
|
||||
|
|
58
src/ui/UserProfile.cpp
Normal file
58
src/ui/UserProfile.cpp
Normal file
|
@ -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;
|
||||
});
|
||||
});
|
||||
}
|
29
src/ui/UserProfile.h
Normal file
29
src/ui/UserProfile.h
Normal file
|
@ -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 a new issue