Skip to content
Snippets Groups Projects
UserProfile.qml 4.51 KiB
Newer Older
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.3

import im.nheko 1.0

import "./device-verification"

ApplicationWindow{
Nicolas Werner's avatar
Nicolas Werner committed
	property var profile

	id: userProfileDialog
	height: 650
	width: 420
	minimumHeight: 420

Nicolas Werner's avatar
Nicolas Werner committed
	modality: Qt.WindowModal
	palette: colors

	Connections{
		target: deviceVerificationList
		function onUpdateProfile() {
			profile.fetchDeviceList(profile.userid)
		}
	}

Nicolas Werner's avatar
Nicolas Werner committed
	Component {
		id: deviceVerificationDialog
		DeviceVerification {}
	}
Nicolas Werner's avatar
Nicolas Werner committed
	Component{
		id: deviceVerificationFlow
		DeviceVerificationFlow {}
	}

	ColumnLayout{
		id: contentL
		anchors.fill: parent
		anchors.margins: 10
		spacing: 10
		Avatar {
			url: profile.avatarUrl.replace("mxc://", "image://MxcImage/")
			height: 130
			width: 130
			displayName: profile.displayName
			userid: profile.userid
			Layout.alignment: Qt.AlignHCenter
		}
		Label {
			text: profile.displayName
			fontSizeMode: Text.HorizontalFit
			font.pixelSize: 20
			color: TimelineManager.userColor(profile.userid, colors.window)
			font.bold: true
			Layout.alignment: Qt.AlignHCenter
		}
		MatrixText {
			text: profile.userid
			font.pixelSize: 15
			Layout.alignment: Qt.AlignHCenter
		}
		Button {
			id: verifyUserButton
			text: "Verify"
			Layout.alignment: Qt.AlignHCenter
			enabled: !profile.isUserVerified
			visible: !profile.isUserVerified

			onClicked: {
				var newFlow = profile.createFlow(true);
				newFlow.userId = profile.userid;
				newFlow.sender = true;
				deviceVerificationList.add(newFlow.tranId);
				var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest: true,tran_id: newFlow.tranId});
				dialog.show();
		RowLayout {
			Layout.alignment: Qt.AlignHCenter
			spacing: 8

			ImageButton {
				image:":/icons/icons/ui/do-not-disturb-rounded-sign.png"
				hoverEnabled: true
				ToolTip.visible: hovered
				ToolTip.text: qsTr("Ban the user")
				onClicked: profile.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 : {
			//         profile.ignoreUser()
			//     }
			// }
			ImageButton{
				image:":/icons/icons/ui/black-bubble-speech.png"
				hoverEnabled: true
				ToolTip.visible: hovered
				ToolTip.text: qsTr("Start a private chat")
				onClicked: profile.startChat()
			}
			ImageButton{
				image:":/icons/icons/ui/round-remove-button.png"
				hoverEnabled: true
				ToolTip.visible: hovered
				ToolTip.text: qsTr("Kick the user")
				onClicked: profile.kickUser()
		ListView{
			id: devicelist
			Layout.fillHeight: true
			Layout.minimumHeight: 200
			Layout.fillWidth: true
			clip: true
			spacing: 8
			boundsBehavior: Flickable.StopAtBounds
			model: profile.deviceList
			delegate: RowLayout{
				width: parent.width
				spacing: 4
				ColumnLayout{
					spacing: 0
					Text{
						Layout.fillWidth: true
						Layout.alignment: Qt.AlignLeft
						elide: Text.ElideRight
						font.bold: true
						color: colors.text
						text: model.deviceId
					}
					Text{
						Layout.fillWidth: true
						Layout.alignment: Qt.AlignRight
						elide: Text.ElideRight
						color: colors.text
						text: model.deviceName
					}
				Image{
					Layout.preferredHeight: 16
					Layout.preferredWidth: 16

					source: ((model.verificationStatus == VerificationStatus.VERIFIED)?"image://colorimage/:/icons/icons/ui/lock.png?green":
					((model.verificationStatus == VerificationStatus.UNVERIFIED)?"image://colorimage/:/icons/icons/ui/unlock.png?yellow":
					"image://colorimage/:/icons/icons/ui/unlock.png?red"))
				}
				Button{
					id: verifyButton
					text: (model.verificationStatus != VerificationStatus.VERIFIED)?"Verify":"Unverify"
					onClicked: {
						var newFlow = profile.createFlow(false);
						newFlow.userId = profile.userid;
						newFlow.sender = true;
						newFlow.deviceId = model.deviceId;
						if(model.verificationStatus == VerificationStatus.VERIFIED){
							newFlow.unverify();
							deviceVerificationList.updateProfile(newFlow.userId);
						}else{
							deviceVerificationList.add(newFlow.tranId);
							var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest:false,tran_id: newFlow.tranId});
							dialog.show();
						}
					}
	}

	footer: DialogButtonBox {
		standardButtons: DialogButtonBox.Ok
		onAccepted: userProfileDialog.close()