diff --git a/retroshare-qml-app/src/qml.qrc b/retroshare-qml-app/src/qml.qrc index 861577e60..9ba2e57f3 100644 --- a/retroshare-qml-app/src/qml.qrc +++ b/retroshare-qml-app/src/qml.qrc @@ -19,5 +19,6 @@ qml/icons/document-share.png qml/icons/application-menu.png qml/ContactSort.js + qml/icons/emblem-locked.png diff --git a/retroshare-qml-app/src/qml/Locations.qml b/retroshare-qml-app/src/qml/Locations.qml index 57f889a59..1d7b56830 100644 --- a/retroshare-qml-app/src/qml/Locations.qml +++ b/retroshare-qml-app/src/qml/Locations.qml @@ -50,8 +50,10 @@ Item buttonText: "Save" onSubmit: { - var jsonData = { pgp_name: login, ssl_name: login, pgp_password: password } - rsApi.request("/control/create_location/", JSON.stringify(jsonData)) + var jsonData = { pgp_name: login, ssl_name: login, + pgp_password: password } + rsApi.request("/control/create_location/", + JSON.stringify(jsonData)) locationView.state = "selectLocation" } } @@ -72,76 +74,40 @@ Item rsApi.request( "/control/login/", JSON.stringify({id: locationView.sslid}) ) locationView.attemptLogin = true - busyIndicator.running = true attemptTimer.start() } } } ] - function requestLocationsList() { rsApi.request("/control/locations/", "") } - - onFocusChanged: focus && requestLocationsList() - - LibresapiLocalClient + function requestLocationsListCB(par) { - id: rsApi - Component.onCompleted: + var jsonData = JSON.parse(par.response).data + if(jsonData.length === 1) { - openConnection(apiSocketPath) - locationView.requestLocationsList() + // There is only one location so we can jump selecting location + var location = jsonData[0] + loginView.login = location.name + locationView.sslid = location.peer_id + locationView.state = "login" } - onGoodResponseReceived: + else { - var jsonData = JSON.parse(msg) - - - if(jsonData) - { - if(jsonData.data) - { - if(jsonData.data[0] && jsonData.data[0].pgp_id) - { - // if location list update - locationsModel.json = msg - busyIndicator.running = false - } - if (jsonData.data.key_name) - { - if(jsonData.data.want_password) - { - // if Server requested password - var jsonPass = { password: locationView.password } - rsApi.request( "/control/password/", - JSON.stringify(jsonPass) ) - locationView.attemptLogin = false - console.debug("RS core asked for password") - } - else - { - // if Already logged in - bottomButton.enabled = false - bottomButton.text = "Already logged in" - locationView.attemptLogin = false - busyIndicator.running = false - locationView.state = "selectLocation" - locationsListView.enabled = false - console.debug("Already logged in") - } - } - } - } + // There is more then one location to choose from + locationsModel.json = par.response } } + function requestLocationsList() + { rsApi.request("/control/locations/", "", requestLocationsListCB) } - BusyIndicator { id: busyIndicator; anchors.centerIn: parent } + onFocusChanged: focus && requestLocationsList() + Component.onCompleted: requestLocationsList() JSONListModel { id: locationsModel query: "$.data[*]" } - ListView { id: locationsListView @@ -151,22 +117,23 @@ Item model: locationsModel.model delegate: Button { - text: model.name + text: model.name onClicked: { loginView.login = text locationView.sslid = model.id locationView.state = "login" } - } - visible: false + } + visible: false } - Button - { + Button + { id: bottomButton text: "Create new location" anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter onClicked: locationView.state = "createLocation" } @@ -177,19 +144,60 @@ Item anchors.fill: parent } + BusyIndicator + { + id: busyIndicator + anchors.centerIn: parent + running: false + + Connections + { + target: locationView + onAttemptLoginChanged: + if(locationView.attemptLogin) busyIndicator.running = true + } + } + + LibresapiLocalClient + { + id: loginApi + Component.onCompleted: openConnection(apiSocketPath) + onGoodResponseReceived: + { + var jsonData = JSON.parse(msg) + if(jsonData && jsonData.data && jsonData.data.key_name) + { + if(jsonData.data.want_password) + { + // if Server requested password + var jsonPass = { password: locationView.password } + request( "/control/password/", JSON.stringify(jsonPass) ) + locationView.attemptLogin = false + console.debug("RS core asked for password") + } + else + { + // if Already logged in + bottomButton.enabled = false + bottomButton.text = "Unlocking location..." + locationView.attemptLogin = false + locationView.state = "selectLocation" + locationsListView.enabled = false + console.debug("Already logged in") + } + } + } + } Timer { id: attemptTimer - interval: 500 + interval: 1000 repeat: true triggeredOnStart: true onTriggered: { - if(locationView.focus) - locationView.requestLocationsList() - if (locationView.attemptLogin) - rsApi.request("/control/password/", "") + loginApi.request("/control/password/", "") } } } diff --git a/retroshare-qml-app/src/qml/RsLoginPassView.qml b/retroshare-qml-app/src/qml/RsLoginPassView.qml index 8a80b8996..7b2fd3316 100644 --- a/retroshare-qml-app/src/qml/RsLoginPassView.qml +++ b/retroshare-qml-app/src/qml/RsLoginPassView.qml @@ -19,13 +19,12 @@ import QtQuick 2.0 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.0 -import QtQml 2.2 -import org.retroshare.qml_components.LibresapiLocalClient 1.0 +//import QtQml 2.2 Item { id: loginView - property string buttonText: "Login" + property string buttonText: "Unlock" property string login property string password signal submit(string login, string password) @@ -34,19 +33,54 @@ Item { id: inputView width: parent.width - anchors.top: parent.top - anchors.bottom: bottomButton.top + anchors.centerIn: parent - Row { Text {text: "Name:" } TextField { id: nameField; text: loginView.login } } - Row { Text {text: "Password:" } TextField { id: passwordField; text: loginView.password } } - } + Image + { + source: "qrc:/qml/icons/emblem-locked.png" + Layout.alignment: Qt.AlignHCenter + } - Button - { - id: bottomButton - text: loginView.buttonText - anchors.bottom: parent.bottom - anchors.right: parent.right - onClicked: loginView.submit(nameField.text, passwordField.text) + Text + { + text: "Login" + visible: loginView.login.length === 0 + Layout.alignment: Qt.AlignHCenter + anchors.bottom: nameField.top + anchors.bottomMargin: 5 + } + TextField + { + id: nameField; + text: loginView.login + visible: loginView.login.length === 0 + Layout.alignment: Qt.AlignHCenter + } + + Text + { + id: passLabel + text: nameField.visible ? + "Passphrase" : "Enter passphrase for " + loginView.login + Layout.alignment: Qt.AlignHCenter + anchors.bottom: passwordField.top + anchors.bottomMargin: 5 + } + TextField + { + id: passwordField + text: loginView.password + width: passLabel.width + echoMode: TextInput.Password + Layout.alignment: Qt.AlignHCenter + } + + Button + { + id: bottomButton + text: loginView.buttonText + onClicked: loginView.submit(nameField.text, passwordField.text) + Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom + } } } diff --git a/retroshare-qml-app/src/qml/icons/emblem-locked.png b/retroshare-qml-app/src/qml/icons/emblem-locked.png new file mode 100644 index 000000000..fb1ec9eb6 Binary files /dev/null and b/retroshare-qml-app/src/qml/icons/emblem-locked.png differ