Skip to content

Commit

Permalink
Rewrite UserProfile in qml
Browse files Browse the repository at this point in the history
  • Loading branch information
Chethan2k1 committed May 17, 2020
1 parent c4a0a85 commit d1b5365
Show file tree
Hide file tree
Showing 7 changed files with 194 additions and 6 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,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
Expand Down Expand Up @@ -473,6 +474,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

Expand Down
14 changes: 12 additions & 2 deletions resources/qml/TimelineView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,10 @@ Page {

MouseArea {
anchors.fill: parent
onClicked: chat.model.openUserProfile(modelData.userId)
onClicked: {
userProfile.user_data = modelData
userProfile.show()
}
cursorShape: Qt.PointingHandCursor
propagateComposedEvents: true
}
Expand All @@ -285,11 +288,18 @@ Page {

MouseArea {
anchors.fill: parent
onClicked: chat.model.openUserProfile(section.split(" ")[0])
onClicked: {
userProfile.user_data = modelData
userProfile.show()
}
cursorShape: Qt.PointingHandCursor
propagateComposedEvents: true
}
}

UserProfile{
id: userProfile
}
}
}
}
Expand Down
85 changes: 85 additions & 0 deletions resources/qml/UserProfile.qml
Original file line number Diff line number Diff line change
@@ -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 }
}
}
1 change: 1 addition & 0 deletions resources/res.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
<file>qml/Reactions.qml</file>
<file>qml/ScrollHelper.qml</file>
<file>qml/TimelineRow.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>
Expand Down
11 changes: 7 additions & 4 deletions src/Olm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,9 @@ handle_to_device_messages(const std::vector<mtx::events::collections::DeviceEven
e.what(),
j_msg.dump(2));
=======
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));
>>>>>>> minor fixes
=======
nhlog::crypto()->warn("validation error for olm message: {} {}",
Expand Down Expand Up @@ -381,7 +382,8 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
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);
nhlog::crypto()->warn("requested session not found in room: {}",
req.content.room_id);
>>>>>>> minor fixes
=======
nhlog::crypto()->warn("requested session not found in room: {}",
Expand Down Expand Up @@ -414,7 +416,8 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
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);
>>>>>>> minor fixes
=======
nhlog::crypto()->debug("ignoring all key requests for room {}",
Expand Down
58 changes: 58 additions & 0 deletions src/ui/UserProfile.cpp
Original file line number Diff line number Diff line change
@@ -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 changes: 29 additions & 0 deletions src/ui/UserProfile.h
Original file line number Diff line number Diff line change
@@ -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;
};

0 comments on commit d1b5365

Please sign in to comment.