import QtQuick 2.0 import Sailfish.Silica 1.0 Page { id: page property string testResult: "" property bool testOk: false property bool testing: false property string languageNotice: "" SilicaFlickable { anchors.fill: parent contentHeight: column.height Column { id: column width: parent.width PageHeader { title: qsTr("Settings") } SectionHeader { text: qsTr("Server") } TextField { id: serverField anchors.left: parent.left anchors.right: parent.right label: qsTr("Calibre Web address") placeholderText: "https://calibre.example.com" text: appSettings.serverUrl inputMethodHints: Qt.ImhUrlCharactersOnly onTextChanged: appSettings.serverUrl = text } TextField { id: userField anchors.left: parent.left anchors.right: parent.right label: qsTr("User (empty = anonymous access)") text: appSettings.username onTextChanged: appSettings.username = text } TextField { id: passField anchors.left: parent.left anchors.right: parent.right label: qsTr("Password") text: appSettings.password echoMode: TextInput.Password onTextChanged: appSettings.password = text } TextSwitch { text: qsTr("Ignore SSL certificate errors") description: qsTr("Enable if the server uses a self-signed certificate") checked: appSettings.ignoreSslErrors onCheckedChanged: appSettings.ignoreSslErrors = checked } SectionHeader { text: qsTr("Reader") } Slider { id: marginSlider width: parent.width label: qsTr("Side margins") minimumValue: 0 maximumValue: 80 stepSize: 4 value: appSettings.readerMargin valueText: value + " px" onValueChanged: appSettings.readerMargin = value } Slider { id: marginVSlider width: parent.width label: qsTr("Top and bottom margin") minimumValue: 0 maximumValue: 80 stepSize: 4 value: appSettings.readerMarginV valueText: value + " px" onValueChanged: appSettings.readerMarginV = value } SectionHeader { text: qsTr("Connection") } Button { anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Test connection") enabled: !page.testing onClicked: testConnection() } Item { width: parent.width height: page.testing ? Theme.itemSizeSmall : 0 BusyIndicator { anchors.horizontalCenter: parent.horizontalCenter running: page.testing size: BusyIndicatorSize.Small } } Label { x: Theme.horizontalPageMargin width: parent.width - 2 * Theme.horizontalPageMargin text: page.testResult color: page.testOk ? Theme.secondaryHighlightColor : Theme.errorColor wrapMode: Text.Wrap visible: text.length > 0 } SectionHeader { text: qsTr("Language") } ComboBox { id: langBox width: parent.width label: qsTr("Language") currentIndex: appSettings.language === "it" ? 2 : (appSettings.language === "en" ? 1 : 0) menu: ContextMenu { MenuItem { text: qsTr("System (default)") } MenuItem { text: "English" } MenuItem { text: "Italiano" } } onCurrentIndexChanged: { var v = currentIndex === 2 ? "it" : (currentIndex === 1 ? "en" : "system") if (v !== appSettings.language) { appSettings.language = v page.languageNotice = qsTr("Language will be applied after restarting the app") langNoticeTimer.restart() } } } Label { x: Theme.horizontalPageMargin width: parent.width - 2 * Theme.horizontalPageMargin text: page.languageNotice color: Theme.highlightColor wrapMode: Text.Wrap visible: text.length > 0 } Timer { id: langNoticeTimer interval: 4000 onTriggered: page.languageNotice = "" } Item { width: 1; height: Theme.paddingLarge } } } function testConnection() { var base = appSettings.serverUrl.trim() if (base.length === 0) { page.testResult = qsTr("Enter the server address") page.testOk = false return } // normalizza: senza schema aggiunge https:// e lo salva nel campo if (base.indexOf("http://") !== 0 && base.indexOf("https://") !== 0) base = "https://" + base appSettings.serverUrl = base page.testing = true page.testResult = qsTr("Testing…") apiClient.getFeed(base + "/opds") } Connections { target: apiClient onFeedReady: { if (pageStack.currentPage !== page) return page.testing = false page.testOk = true page.testResult = qsTr("Connection OK: %1 sections found").arg(entries.length) } onFeedError: { if (pageStack.currentPage !== page) return page.testing = false page.testOk = false page.testResult = message } } }