mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-23 03:18:49 +03:00
Add some Userprofile buttons
This commit is contained in:
parent
75efa5d3a2
commit
00e36b6068
5 changed files with 145 additions and 46 deletions
|
@ -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,6 +82,60 @@ 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
|
||||||
|
@ -151,6 +205,8 @@ ApplicationWindow{
|
||||||
text:"OK"
|
text:"OK"
|
||||||
onClicked: userProfileDialog.close()
|
onClicked: userProfileDialog.close()
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
|
||||||
Layout.margins : {
|
Layout.margins : {
|
||||||
right : 10
|
right : 10
|
||||||
bottom : 10
|
bottom : 10
|
||||||
|
|
|
@ -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 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
|
|
@ -14,6 +14,7 @@ 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,35 +135,37 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(ChatPage::instance(),
|
connect(
|
||||||
|
ChatPage::instance(),
|
||||||
&ChatPage::recievedDeviceVerificationMac,
|
&ChatPage::recievedDeviceVerificationMac,
|
||||||
this,
|
this,
|
||||||
[this](const mtx::events::collections::DeviceEvents &message) {
|
[this](const mtx::events::collections::DeviceEvents &message) {
|
||||||
auto msg =
|
auto msg = std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message);
|
||||||
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) {
|
||||||
|
key_string += mac.first + ",";
|
||||||
|
if (device_keys[mac.first] != "") {
|
||||||
if (mac.second ==
|
if (mac.second ==
|
||||||
this->sas->calculate_mac(this->device_keys[mac.first],
|
this->sas->calculate_mac(this->device_keys[mac.first],
|
||||||
info + mac.first)) {
|
info + mac.first)) {
|
||||||
key_string += mac.first;
|
|
||||||
} else {
|
} else {
|
||||||
this->cancelVerification();
|
this->cancelVerification();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
key_string = key_string.substr(0, key_string.length() - 1);
|
||||||
if (msg.content.keys ==
|
if (msg.content.keys ==
|
||||||
this->sas->calculate_mac(key_string, info + "KEY_IDS")) {
|
this->sas->calculate_mac(key_string, info + "KEY_IDS")) {
|
||||||
// uncomment this in future to be compatible with the
|
// uncomment this in future to be compatible with the
|
||||||
// MSC2366 this->sendVerificationDone(); and remoeve the
|
// MSC2366 this->sendVerificationDone(); and remove the
|
||||||
// below line
|
// below line
|
||||||
if (this->isMacVerified == true)
|
if (this->isMacVerified == true)
|
||||||
emit this->deviceVerified();
|
emit this->deviceVerified();
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue