134 lines
3.9 KiB
QML
134 lines
3.9 KiB
QML
import QtQuick 2.5
|
|
import QtQuick.Controls 2.1
|
|
import QtQuick.Controls.Material 2.1
|
|
import QtQuick.Layouts 1.1
|
|
import Nymea 1.0
|
|
import "../components"
|
|
|
|
SettingsPageBase {
|
|
id: root
|
|
title: qsTr("User settings")
|
|
|
|
UserManager {
|
|
id: userManager
|
|
engine: _engine
|
|
|
|
onChangePasswordResponse: {
|
|
if (error != UserManager.UserErrorNoError) {
|
|
var component = Qt.createComponent("../components/ErrorDialog.qml")
|
|
var text;
|
|
switch (error) {
|
|
case UserManager.UserErrorBadPassword:
|
|
text = qsTr("The given password is not valid.");
|
|
break;
|
|
case UserManager.UserErrorPermissionDenied:
|
|
text = qsTr("Permission denied.");
|
|
break;
|
|
case UserManager.UserErrorBackendError:
|
|
text = qsTr("The new password could not be stored.")
|
|
break;
|
|
default:
|
|
text = qsTr("Un unexpected error happened when changing the password. We're sorry for this. (Error code: %1)").arg(error);
|
|
break;
|
|
}
|
|
|
|
var popup = component.createObject(app, {text: text});
|
|
popup.open()
|
|
}
|
|
}
|
|
}
|
|
|
|
SettingsPageSectionHeader {
|
|
text: qsTr("User info")
|
|
}
|
|
|
|
NymeaSwipeDelegate {
|
|
Layout.fillWidth: true
|
|
text: userManager.userInfo.username
|
|
subText: qsTr("Username")
|
|
progressive: false
|
|
prominentSubText: false
|
|
iconName: "../images/account.svg"
|
|
}
|
|
|
|
NymeaSwipeDelegate {
|
|
Layout.fillWidth: true
|
|
text: qsTr("Change password")
|
|
iconName: "../images/key.svg"
|
|
onClicked: {
|
|
var page = pageStack.push(changePasswordComponent)
|
|
page.confirmed.connect(function(newPassword) {
|
|
userManager.changePassword(newPassword)
|
|
})
|
|
}
|
|
}
|
|
|
|
SettingsPageSectionHeader {
|
|
text: qsTr("Devices / Apps accessing nymea:core")
|
|
}
|
|
|
|
Repeater {
|
|
model: userManager.tokenInfos
|
|
|
|
delegate: NymeaSwipeDelegate {
|
|
Layout.fillWidth: true
|
|
text: model.deviceName
|
|
subText: qsTr("Created on %1").arg(Qt.formatDateTime(model.creationTime, Qt.DefaultLocaleShortDate))
|
|
prominentSubText: false
|
|
progressive: false
|
|
canDelete: true
|
|
|
|
onDeleteClicked: {
|
|
userManager.removeToken(model.id)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Component {
|
|
id: changePasswordComponent
|
|
SettingsPageBase {
|
|
id: changePasswordPage
|
|
title: qsTr("Change password")
|
|
|
|
signal confirmed(string newPassword)
|
|
|
|
SettingsPageSectionHeader {
|
|
text: qsTr("Change password")
|
|
}
|
|
|
|
Label {
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: app.margins
|
|
Layout.rightMargin: app.margins
|
|
text: qsTr("Please enter the new password for %1").arg(userManager.userInfo.username)
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
|
|
PasswordTextField {
|
|
id: passwordTextField
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: app.margins
|
|
Layout.rightMargin: app.margins
|
|
minPasswordLength: 8
|
|
requireLowerCaseLetter: true
|
|
requireUpperCaseLetter: true
|
|
requireNumber: true
|
|
requireSpecialChar: false
|
|
signup: true
|
|
}
|
|
|
|
Button {
|
|
text: qsTr("OK")
|
|
Layout.fillWidth: true
|
|
Layout.margins: app.margins
|
|
enabled: passwordTextField.isValid
|
|
onClicked: {
|
|
changePasswordPage.confirmed(passwordTextField.password)
|
|
pageStack.pop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|