Add some Userprofile buttons

This commit is contained in:
CH Chethan Reddy 2020-06-26 04:24:42 +05:30
parent 75efa5d3a2
commit 00e36b6068
5 changed files with 145 additions and 46 deletions

View file

@ -12,7 +12,7 @@ ApplicationWindow{
property var colors: currentActivePalette property var colors: currentActivePalette
id:userProfileDialog id:userProfileDialog
height: 500 height: 650
width: 420 width: 420
modality:Qt.WindowModal modality:Qt.WindowModal
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
@ -43,7 +43,7 @@ ApplicationWindow{
width: userProfileDialog.width width: userProfileDialog.width
height: userProfileDialog.height height: userProfileDialog.height
Layout.fillHeight : true // Layout.fillHeight : true
ColumnLayout{ ColumnLayout{
anchors.fill: userProfileItem anchors.fill: userProfileItem
@ -82,8 +82,62 @@ ApplicationWindow{
Layout.alignment: Qt.AlignHCenter 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 { ScrollView {
implicitHeight: userProfileDialog.height/2+20 implicitHeight: userProfileDialog.height/2 + 20
implicitWidth: userProfileDialog.width-20 implicitWidth: userProfileDialog.width-20
clip: true clip: true
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
@ -150,6 +204,8 @@ ApplicationWindow{
id: okbutton id: okbutton
text:"OK" text:"OK"
onClicked: userProfileDialog.close() onClicked: userProfileDialog.close()
Layout.alignment: Qt.AlignRight
Layout.margins : { Layout.margins : {
right : 10 right : 10

View file

@ -82,8 +82,6 @@ ApplicationWindow {
} }
onClicked: { onClicked: {
dialog.close(); dialog.close();
flow.cancelVerification();
deviceVerificationList.remove(flow.tranId);
delete flow; delete flow;
} }
} }
@ -128,16 +126,26 @@ ApplicationWindow {
RowLayout { RowLayout {
RadioButton { RadioButton {
id: decimalRadio
Layout.alignment: Qt.AlignLeft Layout.alignment: Qt.AlignLeft
text: qsTr("Decimal") text: qsTr("Decimal")
contentItem: Text {
text: decimalRadio.text
color: colors.text
}
onClicked: { flow.method = DeviceVerificationFlow.Decimal } onClicked: { flow.method = DeviceVerificationFlow.Decimal }
} }
Item { Item {
Layout.fillWidth: true Layout.fillWidth: true
} }
RadioButton { RadioButton {
id: emojiRadio
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Emoji") text: qsTr("Emoji")
contentItem: Text {
text: emojiRadio.text
color: colors.text
}
onClicked: { flow.method = DeviceVerificationFlow.Emoji } onClicked: { flow.method = DeviceVerificationFlow.Emoji }
} }
} }
@ -156,7 +164,7 @@ ApplicationWindow {
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
} }
onClicked: { onClicked: {
dialog.close(); dialog.close();
flow.cancelVerification(); flow.cancelVerification();
deviceVerificationList.remove(flow.tranId); deviceVerificationList.remove(flow.tranId);
delete flow; delete flow;
@ -411,6 +419,7 @@ ApplicationWindow {
text: col.emoji.emoji text: col.emoji.emoji
font.pixelSize: Qt.application.font.pixelSize * 2 font.pixelSize: Qt.application.font.pixelSize * 2
font.family: Settings.emojiFont font.family: Settings.emojiFont
color:colors.text
} }
Label { Label {
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom

View file

@ -13,7 +13,8 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *)
{ {
timeout = new QTimer(this); timeout = new QTimer(this);
timeout->setSingleShot(true); timeout->setSingleShot(true);
this->sas = olm::client()->sas_init(); this->sas = olm::client()->sas_init();
this->isMacVerified = false;
connect(timeout, &QTimer::timeout, this, [this]() { connect(timeout, &QTimer::timeout, this, [this]() {
emit timedout(); emit timedout();
this->deleteLater(); this->deleteLater();
@ -134,45 +135,47 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *)
} }
} }
}); });
connect(ChatPage::instance(), connect(
&ChatPage::recievedDeviceVerificationMac, ChatPage::instance(),
this, &ChatPage::recievedDeviceVerificationMac,
[this](const mtx::events::collections::DeviceEvents &message) { this,
auto msg = [this](const mtx::events::collections::DeviceEvents &message) {
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message); auto msg = std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message);
if (msg.content.transaction_id == this->transaction_id) { if (msg.content.transaction_id == this->transaction_id) {
std::string info = std::string info =
"MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() + "MATRIX_KEY_VERIFICATION_MAC" + this->toClient.to_string() +
this->deviceId.toStdString() + this->deviceId.toStdString() + http::client()->user_id().to_string() +
http::client()->user_id().to_string() + http::client()->device_id() + this->transaction_id;
http::client()->device_id() + this->transaction_id;
std::vector<std::string> key_list; std::vector<std::string> key_list;
std::string key_string; std::string key_string;
for (auto mac : msg.content.mac) { for (auto mac : msg.content.mac) {
if (mac.second == key_string += mac.first + ",";
this->sas->calculate_mac(this->device_keys[mac.first], if (device_keys[mac.first] != "") {
info + mac.first)) { if (mac.second ==
key_string += mac.first; this->sas->calculate_mac(this->device_keys[mac.first],
} else { info + mac.first)) {
this->cancelVerification(); } else {
return; 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 key_string = key_string.substr(0, key_string.length() - 1);
// MSC2366 this->sendVerificationDone(); and remoeve the if (msg.content.keys ==
// below line this->sas->calculate_mac(key_string, info + "KEY_IDS")) {
if (this->isMacVerified == true) // uncomment this in future to be compatible with the
emit this->deviceVerified(); // MSC2366 this->sendVerificationDone(); and remove the
else // below line
this->isMacVerified = true; if (this->isMacVerified == true)
} else { emit this->deviceVerified();
this->cancelVerification(); else
} this->isMacVerified = true;
} } else {
}); this->cancelVerification();
}
}
});
connect(ChatPage::instance(), connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationReady, &ChatPage::recievedDeviceVerificationReady,
this, this,

View file

@ -1,4 +1,5 @@
#include "UserProfile.h" #include "UserProfile.h"
#include "ChatPage.h"
#include "Logging.h" #include "Logging.h"
#include "Utils.h" #include "Utils.h"
#include "mtx/responses/crypto.hpp" #include "mtx/responses/crypto.hpp"
@ -86,3 +87,30 @@ UserProfile::updateDeviceList()
{ {
fetchDeviceList(this->userId); 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);
}

View file

@ -5,7 +5,6 @@
#include <QVector> #include <QVector>
#include "MatrixClient.h" #include "MatrixClient.h"
class DeviceInfo class DeviceInfo
{ {
public: public:
@ -36,6 +35,10 @@ public:
Q_INVOKABLE void fetchDeviceList(const QString &userID); Q_INVOKABLE void fetchDeviceList(const QString &userID);
Q_INVOKABLE void updateDeviceList(); Q_INVOKABLE void updateDeviceList();
Q_INVOKABLE void banUser();
// Q_INVOKABLE void ignoreUser();
Q_INVOKABLE void kickUser();
Q_INVOKABLE void startChat();
signals: signals:
void userIdChanged(); void userIdChanged();