mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-01 02:10:47 +03:00
96f791daf1
See also: https://daniel.haxx.se/blog/2023/01/08/copyright-without-years/ https://hynek.me/til/copyright-years/
193 lines
6.6 KiB
QML
193 lines
6.6 KiB
QML
// SPDX-FileCopyrightText: Nheko Contributors
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Layouts 1.2
|
|
import QtQuick.Window 2.15
|
|
import im.nheko 1.0
|
|
import "../components/"
|
|
import "../ui/"
|
|
import "../"
|
|
|
|
Item {
|
|
id: loginPage
|
|
property int maxExpansion: 400
|
|
|
|
property string error: login.error
|
|
|
|
Login {
|
|
id: login
|
|
}
|
|
|
|
ScrollView {
|
|
id: scroll
|
|
|
|
clip: false
|
|
palette: Nheko.colors
|
|
ScrollBar.horizontal.visible: false
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
height: Math.min(loginPage.height, col.implicitHeight)
|
|
anchors.margins: Nheko.paddingLarge
|
|
|
|
contentWidth: availableWidth
|
|
|
|
ColumnLayout {
|
|
id: col
|
|
|
|
spacing: Nheko.paddingMedium
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: Math.min(loginPage.maxExpansion, scroll.width- Nheko.paddingLarge*2)
|
|
|
|
Image {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
source: "qrc:/logos/login.png"
|
|
height: 128
|
|
width: 128
|
|
}
|
|
|
|
RowLayout {
|
|
spacing: Nheko.paddingLarge
|
|
|
|
Layout.fillWidth: true
|
|
MatrixTextField {
|
|
id: matrixIdLabel
|
|
label: qsTr("Matrix ID")
|
|
placeholderText: qsTr("e.g @joe:matrix.org")
|
|
onEditingFinished: login.mxid = text
|
|
|
|
ToolTip.text: qsTr("Your login name. A mxid should start with @ followed by the user ID. After the user ID you need to include your server name after a :.\nYou can also put your homeserver address there if your server doesn't support .well-known lookup.\nExample: @user:server.my\nIf Nheko fails to discover your homeserver, it will show you a field to enter the server manually.")
|
|
Keys.forwardTo: [pwBtn, ssoRepeater]
|
|
}
|
|
|
|
|
|
Spinner {
|
|
height: matrixIdLabel.height/2
|
|
Layout.alignment: Qt.AlignBottom
|
|
|
|
visible: running
|
|
running: login.lookingUpHs
|
|
foreground: Nheko.colors.mid
|
|
}
|
|
}
|
|
|
|
MatrixText {
|
|
Layout.fillWidth: true
|
|
textFormat: Text.PlainText
|
|
color: Nheko.theme.error
|
|
text: login.mxidError
|
|
visible: text
|
|
wrapMode: TextEdit.Wrap
|
|
}
|
|
|
|
MatrixTextField {
|
|
id: passwordLabel
|
|
Layout.fillWidth: true
|
|
label: qsTr("Password")
|
|
echoMode: TextInput.Password
|
|
ToolTip.text: qsTr("Your password.")
|
|
visible: login.passwordSupported
|
|
Keys.forwardTo: [pwBtn, ssoRepeater]
|
|
}
|
|
|
|
MatrixTextField {
|
|
id: deviceNameLabel
|
|
Layout.fillWidth: true
|
|
label: qsTr("Device name")
|
|
placeholderText: login.initialDeviceName()
|
|
ToolTip.text: qsTr("A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used.")
|
|
Keys.forwardTo: [pwBtn, ssoRepeater]
|
|
}
|
|
|
|
MatrixTextField {
|
|
id: hsLabel
|
|
enabled: visible
|
|
visible: login.homeserverNeeded
|
|
|
|
Layout.fillWidth: true
|
|
label: qsTr("Homeserver address")
|
|
placeholderText: qsTr("server.my:8787")
|
|
text: login.homeserver
|
|
onEditingFinished: login.homeserver = text
|
|
ToolTip.text: qsTr("The address that can be used to contact you homeserver's client API.\nExample: https://server.my:8787")
|
|
Keys.forwardTo: [pwBtn, ssoRepeater]
|
|
}
|
|
|
|
Item {
|
|
height: Nheko.avatarSize
|
|
Layout.fillWidth: true
|
|
|
|
Spinner {
|
|
height: parent.height
|
|
anchors.centerIn: parent
|
|
|
|
visible: running
|
|
running: login.loggingIn
|
|
foreground: Nheko.colors.mid
|
|
}
|
|
}
|
|
|
|
MatrixText {
|
|
Layout.fillWidth: true
|
|
textFormat: Text.PlainText
|
|
color: Nheko.theme.error
|
|
text: loginPage.error
|
|
visible: text
|
|
wrapMode: TextEdit.Wrap
|
|
}
|
|
|
|
FlatButton {
|
|
id: pwBtn
|
|
visible: login.passwordSupported
|
|
enabled: login.homeserverValid && matrixIdLabel.text == login.mxid && login.homeserver == hsLabel.text
|
|
Layout.alignment: Qt.AlignHCenter
|
|
text: qsTr("LOGIN")
|
|
function pwLogin() {
|
|
login.onLoginButtonClicked(Login.Password, matrixIdLabel.text, passwordLabel.text, deviceNameLabel.text)
|
|
}
|
|
onClicked: pwBtn.pwLogin()
|
|
Keys.onEnterPressed: pwBtn.pwLogin()
|
|
Keys.onReturnPressed: pwBtn.pwLogin()
|
|
Keys.enabled: pwBtn.enabled && login.passwordSupported
|
|
}
|
|
|
|
Repeater {
|
|
id: ssoRepeater
|
|
|
|
model: login.identityProviders
|
|
|
|
delegate: FlatButton {
|
|
id: ssoBtn
|
|
visible: login.ssoSupported
|
|
enabled: login.homeserverValid && matrixIdLabel.text == login.mxid && login.homeserver == hsLabel.text
|
|
Layout.alignment: Qt.AlignHCenter
|
|
text: modelData.name
|
|
iconImage: modelData.avatarUrl.replace("mxc://", "image://MxcImage/")
|
|
function ssoLogin() {
|
|
login.onLoginButtonClicked(Login.SSO, matrixIdLabel.text, modelData.id, deviceNameLabel.text)
|
|
}
|
|
onClicked: ssoBtn.ssoLogin()
|
|
Keys.onEnterPressed: ssoBtn.ssoLogin()
|
|
Keys.onReturnPressed: ssoBtn.ssoLogin()
|
|
Keys.enabled: ssoBtn.enabled && !login.passwordSupported
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ImageButton {
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.margins: Nheko.paddingMedium
|
|
width: Nheko.avatarSize
|
|
height: Nheko.avatarSize
|
|
image: ":/icons/icons/ui/angle-arrow-left.svg"
|
|
ToolTip.visible: hovered
|
|
ToolTip.text: qsTr("Back")
|
|
onClicked: mainWindow.pop()
|
|
}
|
|
}
|