diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml
index e5d01625..36c8586d 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 516bc74a..ca21f484 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 9b260892..2c6e9c1e 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<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(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<std::string> 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<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(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<std::string> 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 588d6969..6aa4deff 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 c37e23ae..ad92d182 100644
--- a/src/ui/UserProfile.h
+++ b/src/ui/UserProfile.h
@@ -5,7 +5,6 @@
#include <QVector>
#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();
|