Warning, /network/neochat/src/qml/AccountEditorPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2020 Tobias Fella <tobias.fella@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 import QtQuick
0006 import QtQuick.Controls as QQC2
0007 import QtQuick.Layouts
0008 import Qt.labs.platform
0009 import QtQuick.Window
0010 
0011 import org.kde.kirigami as Kirigami
0012 import org.kde.kirigamiaddons.formcard as FormCard
0013 import org.kde.kirigamiaddons.components as KirigamiComponents
0014 import org.kde.neochat
0015 
0016 FormCard.FormCardPage {
0017     id: root
0018 
0019     title: i18n("Edit Account")
0020     property NeoChatConnection connection
0021 
0022     KirigamiComponents.AvatarButton {
0023         id: avatar
0024 
0025         property OpenFileDialog fileDialog: null
0026 
0027         Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0028         Layout.topMargin: Kirigami.Units.largeSpacing
0029 
0030         // Square button
0031         implicitWidth: Kirigami.Units.gridUnit * 5
0032         implicitHeight: implicitWidth
0033 
0034         padding: 0
0035 
0036         source: root.connection && root.connection.localUser.avatarMediaId ? ("image://mxc/" + root.connection.localUser.avatarMediaId) : ""
0037         name: root.connection.localUser.displayName
0038 
0039         onClicked: {
0040             if (fileDialog) {
0041                 return;
0042             }
0043             fileDialog = openFileDialog.createObject(this);
0044             fileDialog.chosen.connect(receivedSource => {
0045                 if (!receivedSource) {
0046                     return;
0047                 }
0048                 source = receivedSource;
0049             });
0050             fileDialog.open();
0051         }
0052 
0053         QQC2.Button {
0054             anchors {
0055                 bottom: parent.bottom
0056                 right: parent.right
0057             }
0058             visible: avatar.source.toString().length === 0
0059             icon.name: "cloud-upload"
0060             text: i18n("Upload new avatar")
0061             display: QQC2.AbstractButton.IconOnly
0062 
0063             onClicked: parent.clicked()
0064 
0065             QQC2.ToolTip.text: text
0066             QQC2.ToolTip.visible: hovered
0067             QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0068         }
0069 
0070         QQC2.Button {
0071             anchors {
0072                 bottom: parent.bottom
0073                 right: parent.right
0074             }
0075             visible: avatar.source.toString().length !== 0
0076             icon.name: "edit-clear"
0077             text: i18n("Remove current avatar")
0078             display: QQC2.AbstractButton.IconOnly
0079 
0080             onClicked: avatar.source = ""
0081 
0082             QQC2.ToolTip.text: text
0083             QQC2.ToolTip.visible: hovered
0084             QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0085         }
0086         Component {
0087             id: openFileDialog
0088 
0089             OpenFileDialog {
0090                 currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
0091                 parentWindow: root.Window.window
0092 
0093                 onAccepted: destroy()
0094                 onRejected: destroy()
0095             }
0096         }
0097     }
0098 
0099     FormCard.FormHeader {
0100         title: i18n("User information")
0101     }
0102     FormCard.FormCard {
0103         FormCard.FormTextFieldDelegate {
0104             id: name
0105             label: i18n("Name:")
0106             text: root.connection ? root.connection.localUser.displayName : ""
0107         }
0108         FormCard.FormDelegateSeparator {}
0109         FormCard.FormTextFieldDelegate {
0110             id: accountLabel
0111             label: i18n("Label:")
0112             text: root.connection ? root.connection.label : ""
0113         }
0114         FormCard.FormDelegateSeparator {}
0115         FormCard.FormButtonDelegate {
0116             text: i18n("Save")
0117             onClicked: {
0118                 if (!root.connection.setAvatar(avatar.source)) {
0119                     showPassiveNotification("The Avatar could not be set");
0120                 }
0121                 if (root.connection.localUser.displayName !== name.text) {
0122                     root.connection.localUser.rename(name.text);
0123                 }
0124                 if (root.connection.label !== accountLabel.text) {
0125                     root.connection.label = accountLabel.text;
0126                 }
0127             }
0128         }
0129     }
0130 
0131     FormCard.FormHeader {
0132         title: i18n("Password")
0133     }
0134     FormCard.FormCard {
0135         FormCard.FormTextDelegate {
0136             visible: root.connection !== undefined && root.connection.canChangePassword === false
0137             text: i18n("Your server doesn't support changing your password")
0138         }
0139         FormCard.FormDelegateSeparator {
0140             visible: root.connection !== undefined && root.connection.canChangePassword === false
0141         }
0142         FormCard.FormTextFieldDelegate {
0143             id: currentPassword
0144             label: i18n("Current Password:")
0145             enabled: root.connection !== undefined && root.connection.canChangePassword !== false
0146             echoMode: TextInput.Password
0147         }
0148         FormCard.FormDelegateSeparator {}
0149         FormCard.FormTextFieldDelegate {
0150             id: newPassword
0151             label: i18n("New Password:")
0152             enabled: root.connection !== undefined && root.connection.canChangePassword !== false
0153             echoMode: TextInput.Password
0154         }
0155         FormCard.FormDelegateSeparator {}
0156         FormCard.FormTextFieldDelegate {
0157             id: confirmPassword
0158             label: i18n("Confirm new Password:")
0159             enabled: root.connection !== undefined && root.connection.canChangePassword !== false
0160             echoMode: TextInput.Password
0161             onTextChanged: if (newPassword.text !== confirmPassword.text && confirmPassword.text.length > 0) {
0162                 confirmPassword.status = FormCard.AbstractFormDelegate.Status.Error;
0163                 confirmPassword.statusMessage = i18n("Passwords don't match");
0164             } else {
0165                 confirmPassword.status = FormCard.AbstractFormDelegate.Status.Default;
0166                 confirmPassword.statusMessage = '';
0167             }
0168         }
0169         FormCard.FormDelegateSeparator {}
0170         FormCard.FormButtonDelegate {
0171             text: i18n("Save")
0172             enabled: currentPassword.text.length > 0 && newPassword.text.length > 0 && confirmPassword.text.length > 0
0173             onClicked: {
0174                 if (newPassword.text === confirmPassword.text) {
0175                     root.connection.changePassword(currentPassword.text, newPassword.text);
0176                 } else {
0177                     showPassiveNotification(i18n("Passwords do not match"));
0178                 }
0179             }
0180         }
0181     }
0182 
0183     FormCard.FormHeader {
0184         Layout.fillWidth: true
0185         title: i18n("Server Information")
0186     }
0187     FormCard.FormCard {
0188         FormCard.FormTextDelegate {
0189             text: i18n("Homeserver url")
0190             description: root.connection.homeserver
0191         }
0192 
0193         /* TODO but needs first some api in Quotient
0194         FormCard.FormTextDelegate {
0195             text: i18n("Server file upload limit")
0196             description: root.connection.homeserver
0197         }
0198 
0199         FormCard.FormTextDelegate {
0200             text: i18n("Server name")
0201             description: root.connection.homeserver
0202         }
0203 
0204         FormCard.FormTextDelegate {
0205             text: i18n("Server version")
0206             description: root.connection.homeserver
0207         }*/
0208     }
0209     FormCard.FormHeader {
0210         title: i18nc("@title", "Account Management")
0211     }
0212     FormCard.FormCard {
0213         FormCard.FormButtonDelegate {
0214             id: deactivateAccountButton
0215             text: i18n("Deactivate Account")
0216             onClicked: pageStack.pushDialogLayer("qrc:/org/kde/neochat/qml/ConfirmDeactivateAccountDialog.qml", {
0217                 connection: root.connection
0218             }, {
0219                 title: i18nc("@title", "Confirm Deactivating Account")
0220             })
0221         }
0222     }
0223 
0224     data: Connections {
0225         target: root.connection
0226         function onPasswordStatus(status) {
0227             if (status === NeoChatConnection.Success) {
0228                 showPassiveNotification(i18n("Password changed successfully"));
0229             } else if (status === NeoChatConnection.Wrong) {
0230                 showPassiveNotification(i18n("Wrong password entered"));
0231             } else {
0232                 showPassiveNotification(i18n("Unknown problem while trying to change password"));
0233             }
0234         }
0235     }
0236 }