Cleanup DevicesPage

This commit is contained in:
Tobias Fella
2025-10-09 17:17:27 +02:00
committed by Tobias Fella
parent f3c37e4304
commit cbde14d58b
3 changed files with 45 additions and 42 deletions

View File

@@ -19,6 +19,8 @@ FormCard.AbstractFormDelegate {
required property string displayName
required property int type
required property DevicesModel devicesModel
property bool editDeviceName: false
property bool showVerifyButton
@@ -77,12 +79,12 @@ FormCard.AbstractFormDelegate {
icon.name: "checkmark"
visible: nameField.text !== root.displayName
onTriggered: {
devicesModel.setName(root.id, nameField.text);
root.devicesModel.setName(root.id, nameField.text);
}
}
]
onAccepted: devicesModel.setName(root.id, nameField.text)
onAccepted: root.devicesModel.setName(root.id, nameField.text)
}
QQC2.ToolButton {
display: QQC2.AbstractButton.IconOnly
@@ -98,7 +100,7 @@ FormCard.AbstractFormDelegate {
visible: root.showVerifyButton && (root.type !== DevicesModel.Verified || NeoChatConfig.alwaysVerifyDevice)
text: i18nc("@action:button", "Verify device")
icon.name: "security-low-symbolic"
onClicked: devicesModel.connection.startKeyVerificationSession(devicesModel.connection.localUserId, root.id)
onClicked: root.devicesModel.connection.startKeyVerificationSession(root.devicesModel.connection.localUserId, root.id)
QQC2.ToolTip.text: text
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
@@ -133,4 +135,35 @@ FormCard.AbstractFormDelegate {
QQC2.ToolTip.visible: hovered
}
}
Kirigami.Dialog {
id: passwordSheet
property string deviceId
preferredWidth: Kirigami.Units.gridUnit * 24
title: i18nc("@title:dialog", "Remove device")
standardButtons: QQC2.Dialog.Cancel
Component.onCompleted: passwordField.forceActiveFocus()
contentItem: FormCard.FormTextFieldDelegate {
id: passwordField
label: i18n("Password:")
echoMode: TextInput.Password
}
customFooterActions: [
Kirigami.Action {
text: i18nc("@action:button As in 'Remove this device'", "Remove")
icon.name: "delete"
onTriggered: {
root.devicesModel.logout(passwordSheet.deviceId, passwordField.text);
passwordField.text = "";
passwordSheet.close();
}
}
]
}
}

View File

@@ -2,6 +2,8 @@
// SPDX-FileCopyrightText: 2022 James Graham <james.h.graham@protonmail.com>
// SPDX-License-Identifier: GPL-2.0-or-later
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
@@ -17,6 +19,7 @@ ColumnLayout {
required property string title
required property var type
required property bool showVerifyButton
required property DevicesModel devicesModel
visible: deviceRepeater.count > 0
@@ -30,17 +33,13 @@ ColumnLayout {
Repeater {
id: deviceRepeater
model: DevicesProxyModel {
sourceModel: devicesModel
sourceModel: root.devicesModel
type: root.type
}
Kirigami.LoadingPlaceholder {
visible: deviceModel.count === 0 // We can assume 0 means loading since there is at least one device
anchors.centerIn: parent
}
delegate: DeviceDelegate {
showVerifyButton: root.showVerifyButton
devicesModel: root.devicesModel
}
}
}

View File

@@ -33,6 +33,7 @@ FormCard.FormCardPage {
title: i18nc("@info:group", "This Device")
type: DevicesModel.This
showVerifyButton: false
devicesModel: root.devicesModel
FormCard.FormButtonDelegate {
icon.name: "security-low"
@@ -57,16 +58,19 @@ FormCard.FormCardPage {
title: i18nc("@info:group", "Verified Devices")
type: DevicesModel.Verified
showVerifyButton: true
devicesModel: root.devicesModel
}
DevicesCard {
title: i18nc("@info:group", "Unverified Devices")
type: DevicesModel.Unverified
showVerifyButton: true
devicesModel: root.devicesModel
}
DevicesCard {
title: i18nc("@info:group", "Devices without Encryption Support")
type: DevicesModel.Unencrypted
showVerifyButton: false
devicesModel: root.devicesModel
}
FormCard.AbstractFormDelegate {
@@ -83,37 +87,4 @@ FormCard.FormCardPage {
type: Kirigami.MessageType.Information
visible: !root.connection
}
property Kirigami.Dialog passwordSheet: Kirigami.Dialog {
id: passwordSheet
property string deviceId
preferredWidth: Kirigami.Units.gridUnit * 24
title: i18n("Remove device")
standardButtons: QQC2.Dialog.Cancel
Component.onCompleted: passwordField.forceActiveFocus()
FormCard.FormCard {
FormCard.FormTextFieldDelegate {
id: passwordField
label: i18n("Password:")
echoMode: TextInput.Password
}
}
customFooterActions: [
Kirigami.Action {
text: i18nc("As in 'Remove this device'", "Remove")
icon.name: "delete"
onTriggered: {
devicesModel.logout(passwordSheet.deviceId, passwordField.text);
passwordField.text = "";
passwordSheet.close();
}
}
]
}
}