mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2024-11-22 01:05:17 +00:00
Convert tabs to spaces
This commit is contained in:
parent
7bb1fdddba
commit
7eb9dba6d0
|
@ -45,17 +45,17 @@ Page {
|
|||
|
||||
Connections {
|
||||
target: ApiClient
|
||||
onConnectionSuccess: {
|
||||
console.log("Login success: " + loginMessage);
|
||||
pageStack.replace(Qt.resolvedUrl("LoginDialog.qml"), {"loginMessage": loginMessage, "firstPage": firstPage});
|
||||
}
|
||||
onConnectionFailed: function(error) {
|
||||
console.log("Connection failed : " + error)
|
||||
pageStack.pop();
|
||||
}
|
||||
onNetworkError: {
|
||||
console.log("ConnectingPage: popping page!")
|
||||
pageStack.pop();
|
||||
}
|
||||
}
|
||||
onConnectionSuccess: {
|
||||
console.log("Login success: " + loginMessage);
|
||||
pageStack.replace(Qt.resolvedUrl("LoginDialog.qml"), {"loginMessage": loginMessage, "firstPage": firstPage});
|
||||
}
|
||||
onConnectionFailed: function(error) {
|
||||
console.log("Connection failed : " + error)
|
||||
pageStack.pop();
|
||||
}
|
||||
onNetworkError: {
|
||||
console.log("ConnectingPage: popping page!")
|
||||
pageStack.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,58 +56,58 @@ Dialog {
|
|||
|
||||
ComboBox {
|
||||
id: serverSelect
|
||||
label: qsTr("Server")
|
||||
description: qsTr("Sailfin will try to search for Jellyfin servers on your local network automatically")
|
||||
|
||||
menu: ContextMenu {
|
||||
MenuItem {
|
||||
// Special values are cool, aren't they?
|
||||
readonly property string _address: manualAddress.text
|
||||
readonly property string _name: manualAddress.text
|
||||
text: qsTr("enter address manually")
|
||||
}
|
||||
Repeater {
|
||||
model: serverModel
|
||||
delegate: MenuItem {
|
||||
readonly property string _address: address
|
||||
readonly property string _name: name
|
||||
text: qsTr("%1 - %2").arg(name).arg(address)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: manualAddress
|
||||
width: parent.width
|
||||
clip: true
|
||||
|
||||
label: qsTr("Server address")
|
||||
placeholderText: qsTr("e.g. https://demo.jellyfin.org")
|
||||
|
||||
enabled: serverSelect.currentIndex == 0
|
||||
visible: enabled
|
||||
|
||||
inputMethodHints: Qt.ImhUrlCharactersOnly
|
||||
validator: RegExpValidator {
|
||||
regExp: /^https?:\/\/[a-zA-Z0-9-._~:/?#\[\]\@\!\$\&\'\(\)\*\+\,\;\=]+$/m
|
||||
}
|
||||
|
||||
EnterKey.enabled: addressCorrect
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-accept"
|
||||
label: qsTr("Server")
|
||||
description: qsTr("Sailfin will try to search for Jellyfin servers on your local network automatically")
|
||||
|
||||
menu: ContextMenu {
|
||||
MenuItem {
|
||||
// Special values are cool, aren't they?
|
||||
readonly property string _address: manualAddress.text
|
||||
readonly property string _name: manualAddress.text
|
||||
text: qsTr("enter address manually")
|
||||
}
|
||||
Repeater {
|
||||
model: serverModel
|
||||
delegate: MenuItem {
|
||||
readonly property string _address: address
|
||||
readonly property string _name: name
|
||||
text: qsTr("%1 - %2").arg(name).arg(address)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: manualAddress
|
||||
width: parent.width
|
||||
clip: true
|
||||
|
||||
label: qsTr("Server address")
|
||||
placeholderText: qsTr("e.g. https://demo.jellyfin.org")
|
||||
|
||||
enabled: serverSelect.currentIndex == 0
|
||||
visible: enabled
|
||||
|
||||
inputMethodHints: Qt.ImhUrlCharactersOnly
|
||||
validator: RegExpValidator {
|
||||
regExp: /^https?:\/\/[a-zA-Z0-9-._~:/?#\[\]\@\!\$\&\'\(\)\*\+\,\;\=]+$/m
|
||||
}
|
||||
|
||||
EnterKey.enabled: addressCorrect
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-accept"
|
||||
EnterKey.onClicked: accept()
|
||||
}
|
||||
}
|
||||
|
||||
onOpened: serverModel.refresh()
|
||||
canAccept: addressCorrect
|
||||
|
||||
function tryConnect() {
|
||||
console.log("Hi there!")
|
||||
ApiClient.baseUrl = address;
|
||||
//ApiClient.setupConnection()
|
||||
//fakeTimer.start()
|
||||
}
|
||||
|
||||
onDone: tryConnect()
|
||||
}
|
||||
}
|
||||
|
||||
onOpened: serverModel.refresh()
|
||||
canAccept: addressCorrect
|
||||
|
||||
function tryConnect() {
|
||||
console.log("Hi there!")
|
||||
ApiClient.baseUrl = address;
|
||||
//ApiClient.setupConnection()
|
||||
//fakeTimer.start()
|
||||
}
|
||||
|
||||
onDone: tryConnect()
|
||||
}
|
||||
|
|
|
@ -29,113 +29,113 @@ import "../../components"
|
|||
|
||||
Dialog {
|
||||
id: loginDialog
|
||||
property string loginMessage
|
||||
property Page firstPage
|
||||
property string loginMessage
|
||||
property Page firstPage
|
||||
|
||||
property string error
|
||||
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
|
||||
acceptDestination: Page {
|
||||
BusyLabel {
|
||||
text: qsTr("Logging in as %1").arg(username.text)
|
||||
running: true
|
||||
}
|
||||
onStatusChanged: {
|
||||
if(status == PageStatus.Active) {
|
||||
ApiClient.authenticate(username.text, password.text, true)
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: ApiClient
|
||||
onAuthenticatedChanged: {
|
||||
if (ApiClient.authenticated) {
|
||||
console.log("authenticated!")
|
||||
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
|
||||
acceptDestination: Page {
|
||||
BusyLabel {
|
||||
text: qsTr("Logging in as %1").arg(username.text)
|
||||
running: true
|
||||
}
|
||||
onStatusChanged: {
|
||||
if(status == PageStatus.Active) {
|
||||
ApiClient.authenticate(username.text, password.text, true)
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: ApiClient
|
||||
onAuthenticatedChanged: {
|
||||
if (ApiClient.authenticated) {
|
||||
console.log("authenticated!")
|
||||
pageStack.replaceAbove(null, Qt.resolvedUrl("../MainPage.qml"))
|
||||
}
|
||||
}
|
||||
onAuthenticationError: {
|
||||
}
|
||||
}
|
||||
onAuthenticationError: {
|
||||
loginDialog.error = qsTr("Invalid username or password")
|
||||
pageStack.completeAnimation()
|
||||
pageStack.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PublicUserModel {
|
||||
id: userModel
|
||||
apiClient: ApiClient
|
||||
Component.onCompleted: reload();
|
||||
}
|
||||
|
||||
DialogHeader {
|
||||
id: dialogHeader
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
pageStack.completeAnimation()
|
||||
pageStack.pop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PublicUserModel {
|
||||
id: userModel
|
||||
apiClient: ApiClient
|
||||
Component.onCompleted: reload();
|
||||
}
|
||||
|
||||
DialogHeader {
|
||||
id: dialogHeader
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
//: Dialog action
|
||||
acceptText: qsTr("Login");
|
||||
}
|
||||
SilicaFlickable {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: dialogHeader.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: column.height
|
||||
clip: true
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
|
||||
Column {
|
||||
id: column
|
||||
width: parent.width
|
||||
|
||||
Flow {
|
||||
width: parent.width
|
||||
Repeater {
|
||||
model: userModel
|
||||
delegate: UserGridDelegate {
|
||||
name: model.name
|
||||
acceptText: qsTr("Login");
|
||||
}
|
||||
SilicaFlickable {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: dialogHeader.bottom
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: column.height
|
||||
clip: true
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
|
||||
Column {
|
||||
id: column
|
||||
width: parent.width
|
||||
|
||||
Flow {
|
||||
width: parent.width
|
||||
Repeater {
|
||||
model: userModel
|
||||
delegate: UserGridDelegate {
|
||||
name: model.name
|
||||
image: model.primaryImageTag ? "%1/Users/%2/Images/Primary?tag=%3".arg(ApiClient.baseUrl).arg(model.id).arg(model.primaryImageTag) : ""
|
||||
highlighted: model.name === username.text
|
||||
onClicked: {
|
||||
username.text = model.name
|
||||
password.focus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
onClicked: {
|
||||
username.text = model.name
|
||||
password.focus = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
//: Section header for entering username and password
|
||||
text: qsTr("Credentials")
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
width: parent.width
|
||||
text: qsTr("Credentials")
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
width: parent.width
|
||||
//: Label placeholder for username field
|
||||
placeholderText: qsTr("Username")
|
||||
placeholderText: qsTr("Username")
|
||||
label: placeholderText
|
||||
errorHighlight: error
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-next"
|
||||
EnterKey.onClicked: password.focus = true
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: password
|
||||
width: parent.width
|
||||
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-next"
|
||||
EnterKey.onClicked: password.focus = true
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: password
|
||||
width: parent.width
|
||||
|
||||
//: Label placeholder for password field
|
||||
placeholderText: qsTr("Password")
|
||||
placeholderText: qsTr("Password")
|
||||
label: placeholderText
|
||||
echoMode: TextInput.Password
|
||||
echoMode: TextInput.Password
|
||||
errorHighlight: error
|
||||
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-accept"
|
||||
EnterKey.iconSource: "image://theme/icon-m-enter-accept"
|
||||
EnterKey.onClicked: accept()
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
anchors {
|
||||
|
@ -148,25 +148,25 @@ Dialog {
|
|||
color: Theme.errorColor
|
||||
visible: error
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
|
||||
SectionHeader {
|
||||
//: Message shown on login, configured by the server owner. Some form of a MOTD
|
||||
text: qsTr("Login message")
|
||||
text: qsTr("Login message")
|
||||
visible: loginMessage
|
||||
}
|
||||
Label {
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
leftMargin: Theme.horizontalPageMargin
|
||||
rightMargin: Theme.horizontalPageMargin
|
||||
}
|
||||
}
|
||||
Label {
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
leftMargin: Theme.horizontalPageMargin
|
||||
rightMargin: Theme.horizontalPageMargin
|
||||
}
|
||||
visible: loginMessage
|
||||
text: loginMessage
|
||||
wrapMode: Text.WordWrap
|
||||
color: Theme.highlightColor
|
||||
}
|
||||
}
|
||||
}
|
||||
wrapMode: Text.WordWrap
|
||||
color: Theme.highlightColor
|
||||
}
|
||||
}
|
||||
}
|
||||
canAccept: username.text
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue