From 00e36b6068786d64812135a4d505501134ebc214 Mon Sep 17 00:00:00 2001 From: CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> Date: Fri, 26 Jun 2020 04:24:42 +0530 Subject: [PATCH] Add some Userprofile buttons --- resources/qml/UserProfile.qml | 62 +++++++++++++- .../DeviceVerification.qml | 15 +++- src/DeviceVerificationFlow.cpp | 83 ++++++++++--------- src/ui/UserProfile.cpp | 28 +++++++ src/ui/UserProfile.h | 5 +- 5 files changed, 146 insertions(+), 47 deletions(-) diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index e5d0162..36c8586 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -12,7 +12,7 @@ ApplicationWindow{ property var colors: currentActivePalette id:userProfileDialog - height: 500 + height: 650 width: 420 modality:Qt.WindowModal Layout.alignment: Qt.AlignHCenter @@ -43,7 +43,7 @@ ApplicationWindow{ width: userProfileDialog.width height: userProfileDialog.height - Layout.fillHeight : true + // Layout.fillHeight : true ColumnLayout{ anchors.fill: userProfileItem @@ -82,8 +82,62 @@ ApplicationWindow{ Layout.alignment: Qt.AlignHCenter } + RowLayout{ + Layout.alignment: Qt.AlignHCenter + ImageButton{ + image:":/icons/icons/ui/do-not-disturb-rounded-sign.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Ban the user") + onClicked : { + userProfileList.banUser() + } + } + // ImageButton{ + // image:":/icons/icons/ui/volume-off-indicator.png" + // Layout.margins: { + // left: 5 + // right: 5 + // } + // ToolTip.visible: hovered + // ToolTip.text: qsTr("Ignore messages from this user") + // onClicked : { + // userProfileList.ignoreUser() + // } + // } + + ImageButton{ + image:":/icons/icons/ui/round-remove-button.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Kick the user") + onClicked : { + userProfileList.kickUser() + } + } + + ImageButton{ + image:":/icons/icons/ui/black-bubble-speech.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Start a conversation") + onClicked : { + userProfileList.startChat() + } + } + } + ScrollView { - implicitHeight: userProfileDialog.height/2+20 + implicitHeight: userProfileDialog.height/2 + 20 implicitWidth: userProfileDialog.width-20 clip: true Layout.alignment: Qt.AlignHCenter @@ -150,6 +204,8 @@ ApplicationWindow{ id: okbutton text:"OK" onClicked: userProfileDialog.close() + + Layout.alignment: Qt.AlignRight Layout.margins : { right : 10 diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml index 516bc74..ca21f48 100644 --- a/resources/qml/device-verification/DeviceVerification.qml +++ b/resources/qml/device-verification/DeviceVerification.qml @@ -82,8 +82,6 @@ ApplicationWindow { } onClicked: { dialog.close(); - flow.cancelVerification(); - deviceVerificationList.remove(flow.tranId); delete flow; } } @@ -128,16 +126,26 @@ ApplicationWindow { RowLayout { RadioButton { + id: decimalRadio Layout.alignment: Qt.AlignLeft text: qsTr("Decimal") + contentItem: Text { + text: decimalRadio.text + color: colors.text + } onClicked: { flow.method = DeviceVerificationFlow.Decimal } } Item { Layout.fillWidth: true } RadioButton { + id: emojiRadio Layout.alignment: Qt.AlignRight text: qsTr("Emoji") + contentItem: Text { + text: emojiRadio.text + color: colors.text + } onClicked: { flow.method = DeviceVerificationFlow.Emoji } } } @@ -156,7 +164,7 @@ ApplicationWindow { verticalAlignment: Text.AlignVCenter } onClicked: { - dialog.close(); + dialog.close(); flow.cancelVerification(); deviceVerificationList.remove(flow.tranId); delete flow; @@ -411,6 +419,7 @@ ApplicationWindow { text: col.emoji.emoji font.pixelSize: Qt.application.font.pixelSize * 2 font.family: Settings.emojiFont + color:colors.text } Label { Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom diff --git a/src/DeviceVerificationFlow.cpp b/src/DeviceVerificationFlow.cpp index 9b26089..2c6e9c1 100644 --- a/src/DeviceVerificationFlow.cpp +++ b/src/DeviceVerificationFlow.cpp @@ -13,7 +13,8 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *) { timeout = new QTimer(this); timeout->setSingleShot(true); - this->sas = olm::client()->sas_init(); + this->sas = olm::client()->sas_init(); + this->isMacVerified = false; connect(timeout, &QTimer::timeout, this, [this]() { emit timedout(); this->deleteLater(); @@ -134,45 +135,47 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *) } } }); - connect(ChatPage::instance(), - &ChatPage::recievedDeviceVerificationMac, - this, - [this](const mtx::events::collections::DeviceEvents &message) { - auto msg = - std::get>(message); - if (msg.content.transaction_id == this->transaction_id) { - std::string info = - "MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() + - this->deviceId.toStdString() + - http::client()->user_id().to_string() + - http::client()->device_id() + this->transaction_id; - - std::vector key_list; - std::string key_string; - for (auto mac : msg.content.mac) { - if (mac.second == - this->sas->calculate_mac(this->device_keys[mac.first], - info + mac.first)) { - key_string += mac.first; - } else { - this->cancelVerification(); - return; - } - } - if (msg.content.keys == - this->sas->calculate_mac(key_string, info + "KEY_IDS")) { - // uncomment this in future to be compatible with the - // MSC2366 this->sendVerificationDone(); and remoeve the - // below line - if (this->isMacVerified == true) - emit this->deviceVerified(); - else - this->isMacVerified = true; - } else { - this->cancelVerification(); - } - } - }); + connect( + ChatPage::instance(), + &ChatPage::recievedDeviceVerificationMac, + this, + [this](const mtx::events::collections::DeviceEvents &message) { + auto msg = std::get>(message); + if (msg.content.transaction_id == this->transaction_id) { + std::string info = + "MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() + + this->deviceId.toStdString() + http::client()->user_id().to_string() + + http::client()->device_id() + this->transaction_id; + + std::vector key_list; + std::string key_string; + for (auto mac : msg.content.mac) { + key_string += mac.first + ","; + if (device_keys[mac.first] != "") { + if (mac.second == + this->sas->calculate_mac(this->device_keys[mac.first], + info + mac.first)) { + } else { + this->cancelVerification(); + return; + } + } + } + key_string = key_string.substr(0, key_string.length() - 1); + if (msg.content.keys == + this->sas->calculate_mac(key_string, info + "KEY_IDS")) { + // uncomment this in future to be compatible with the + // MSC2366 this->sendVerificationDone(); and remove the + // below line + if (this->isMacVerified == true) + emit this->deviceVerified(); + else + this->isMacVerified = true; + } else { + this->cancelVerification(); + } + } + }); connect(ChatPage::instance(), &ChatPage::recievedDeviceVerificationReady, this, diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index 588d696..6aa4def 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -1,4 +1,5 @@ #include "UserProfile.h" +#include "ChatPage.h" #include "Logging.h" #include "Utils.h" #include "mtx/responses/crypto.hpp" @@ -86,3 +87,30 @@ UserProfile::updateDeviceList() { fetchDeviceList(this->userId); } + +void +UserProfile::banUser() +{ + ChatPage::instance()->banUser(this->userId, ""); +} + +// void ignoreUser(){ + +// } + +void +UserProfile::kickUser() +{ + ChatPage::instance()->kickUser(this->userId, ""); +} + +void +UserProfile::startChat() +{ + mtx::requests::CreateRoom req; + req.preset = mtx::requests::Preset::PrivateChat; + req.visibility = mtx::requests::Visibility::Private; + if (utils::localUser() != this->userId) + req.invite = {this->userId.toStdString()}; + emit ChatPage::instance()->createRoom(req); +} diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h index c37e23a..ad92d18 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h @@ -5,7 +5,6 @@ #include #include "MatrixClient.h" - class DeviceInfo { public: @@ -36,6 +35,10 @@ public: Q_INVOKABLE void fetchDeviceList(const QString &userID); Q_INVOKABLE void updateDeviceList(); + Q_INVOKABLE void banUser(); + // Q_INVOKABLE void ignoreUser(); + Q_INVOKABLE void kickUser(); + Q_INVOKABLE void startChat(); signals: void userIdChanged();