diff --git a/client/ui/qml/Pages2/PageProtocolAwgClientSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgClientSettings.qml index 18db8119b..2db21d495 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgClientSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgClientSettings.qml @@ -34,7 +34,7 @@ PageType { ListViewType { id: listView - anchors.top: backButtonLayout.bottom + anchors.top: backButton.bottom anchors.bottom: saveButton.top anchors.right: parent.right anchors.left: parent.left diff --git a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml index 2140f740d..dcf57a375 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml @@ -37,7 +37,7 @@ PageType { ListViewType { id: listView - anchors.top: backButtonLayout.bottom + anchors.top: backButton.bottom anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right diff --git a/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml b/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml index 62cbd1f67..d2db90b0f 100644 --- a/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml @@ -17,428 +17,414 @@ import "../Components" PageType { id: root - ColumnLayout { - id: backButtonLayout + BackButtonType { + id: backButton anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right - anchors.topMargin: 20 - - BackButtonType { - id: backButton + + onActiveFocusChanged: { + if(backButton.enabled && backButton.activeFocus) { + listView.positionViewAtBeginning() + } } } - FlickableType { - id: fl - anchors.top: backButtonLayout.bottom + ListViewType { + id: listView + + anchors.top: backButton.bottom anchors.bottom: parent.bottom - contentHeight: content.implicitHeight + anchors.right: parent.right + anchors.left: parent.left - Column { - id: content + enabled: ServersModel.isProcessedServerHasWriteAccess() - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right + header: ColumnLayout { + width: listView.width - enabled: ServersModel.isProcessedServerHasWriteAccess() + BaseHeaderType { + id: header - ListView { - id: listview + Layout.fillWidth: true + Layout.rightMargin: 16 + Layout.leftMargin: 16 - width: parent.width - height: listview.contentItem.height + headerText: qsTr("OpenVPN Settings") + } + } - clip: true - interactive: false + model: OpenVpnConfigModel - model: OpenVpnConfigModel + delegate: ColumnLayout { + width: listView.width - delegate: Item { - id: delegateItem + spacing: 0 - property alias vpnAddressSubnetTextField: vpnAddressSubnetTextField - property bool isEnabled: ServersModel.isProcessedServerHasWriteAccess() + TextFieldWithHeaderType { + id: vpnAddressSubnetTextField - implicitWidth: listview.width - implicitHeight: col.implicitHeight + Layout.fillWidth: true + Layout.topMargin: 32 + Layout.leftMargin: 16 + Layout.rightMargin: 16 - ColumnLayout { - id: col + enabled: listView.enabled - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right + headerText: qsTr("VPN address subnet") + textField.text: subnetAddress - anchors.leftMargin: 16 - anchors.rightMargin: 16 + textField.onEditingFinished: { + if (textField.text !== subnetAddress) { + subnetAddress = textField.text + } + } - spacing: 0 + checkEmptyText: true + } - BaseHeaderType { - Layout.fillWidth: true - headerText: qsTr("OpenVPN settings") - } + ParagraphTextType { + Layout.fillWidth: true + Layout.topMargin: 32 + Layout.leftMargin: 16 + Layout.rightMargin: 16 - TextFieldWithHeaderType { - id: vpnAddressSubnetTextField + text: qsTr("Network protocol") + } - Layout.fillWidth: true - Layout.topMargin: 32 + TransportProtoSelector { + id: transportProtoSelector + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 - enabled: delegateItem.isEnabled + rootWidth: root.width - headerText: qsTr("VPN address subnet") - textField.text: subnetAddress + enabled: isTransportProtoEditable - parentFlickable: fl + currentIndex: { + return transportProto === "tcp" ? 1 : 0 + } - textField.onEditingFinished: { - if (textField.text !== subnetAddress) { - subnetAddress = textField.text - } + onCurrentIndexChanged: { + if (transportProto === "tcp" && currentIndex === 0) { + transportProto = "udp" + } else if (transportProto === "udp" && currentIndex === 1) { + transportProto = "tcp" + } + } + } + + TextFieldWithHeaderType { + id: portTextField + + Layout.fillWidth: true + Layout.topMargin: 40 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: listView.enabled + + headerText: qsTr("Port") + textField.text: port + textField.maximumLength: 5 + textField.validator: IntValidator { bottom: 1; top: 65535 } + + textField.onEditingFinished: { + if (textField.text !== port) { + port = textField.text + } + } + + checkEmptyText: true + } + + SwitcherType { + id: autoNegotiateEncryprionSwitcher + + Layout.fillWidth: true + Layout.topMargin: 24 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + text: qsTr("Auto-negotiate encryption") + checked: autoNegotiateEncryprion + + onCheckedChanged: { + if (checked !== autoNegotiateEncryprion) { + autoNegotiateEncryprion = checked + } + } + } + + DropDownType { + id: hashDropDown + Layout.fillWidth: true + Layout.topMargin: 20 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: !autoNegotiateEncryprionSwitcher.checked + + descriptionText: qsTr("Hash") + headerText: qsTr("Hash") + + drawerParent: root + + listView: ListViewWithRadioButtonType { + id: hashListView + + rootWidth: root.width + + model: ListModel { + ListElement { name : qsTr("SHA512") } + ListElement { name : qsTr("SHA384") } + ListElement { name : qsTr("SHA256") } + ListElement { name : qsTr("SHA3-512") } + ListElement { name : qsTr("SHA3-384") } + ListElement { name : qsTr("SHA3-256") } + ListElement { name : qsTr("whirlpool") } + ListElement { name : qsTr("BLAKE2b512") } + ListElement { name : qsTr("BLAKE2s256") } + ListElement { name : qsTr("SHA1") } + } + + clickedFunction: function() { + hashDropDown.text = selectedText + hash = hashDropDown.text + hashDropDown.closeTriggered() + } + + Component.onCompleted: { + hashDropDown.text = hash + + for (var i = 0; i < hashListView.model.count; i++) { + if (hashListView.model.get(i).name === hashDropDown.text) { + currentIndex = i } - - checkEmptyText: true - } - - ParagraphTextType { - Layout.fillWidth: true - Layout.topMargin: 32 - - text: qsTr("Network protocol") - } - - TransportProtoSelector { - id: transportProtoSelector - Layout.fillWidth: true - Layout.topMargin: 16 - rootWidth: root.width - - enabled: isTransportProtoEditable - - currentIndex: { - return transportProto === "tcp" ? 1 : 0 - } - - onCurrentIndexChanged: { - if (transportProto === "tcp" && currentIndex === 0) { - transportProto = "udp" - } else if (transportProto === "udp" && currentIndex === 1) { - transportProto = "tcp" - } - } - } - - TextFieldWithHeaderType { - id: portTextField - - Layout.fillWidth: true - Layout.topMargin: 40 - parentFlickable: fl - - enabled: delegateItem.isEnabled - - headerText: qsTr("Port") - textField.text: port - textField.maximumLength: 5 - textField.validator: IntValidator { bottom: 1; top: 65535 } - - textField.onEditingFinished: { - if (textField.text !== port) { - port = textField.text - } - } - - checkEmptyText: true - } - - SwitcherType { - id: autoNegotiateEncryprionSwitcher - - Layout.fillWidth: true - Layout.topMargin: 24 - parentFlickable: fl - - text: qsTr("Auto-negotiate encryption") - checked: autoNegotiateEncryprion - - onCheckedChanged: { - if (checked !== autoNegotiateEncryprion) { - autoNegotiateEncryprion = checked - } - } - } - - DropDownType { - id: hashDropDown - Layout.fillWidth: true - Layout.topMargin: 20 - - enabled: !autoNegotiateEncryprionSwitcher.checked - - descriptionText: qsTr("Hash") - headerText: qsTr("Hash") - - drawerParent: root - - listView: ListViewWithRadioButtonType { - id: hashListView - - rootWidth: root.width - - model: ListModel { - ListElement { name : qsTr("SHA512") } - ListElement { name : qsTr("SHA384") } - ListElement { name : qsTr("SHA256") } - ListElement { name : qsTr("SHA3-512") } - ListElement { name : qsTr("SHA3-384") } - ListElement { name : qsTr("SHA3-256") } - ListElement { name : qsTr("whirlpool") } - ListElement { name : qsTr("BLAKE2b512") } - ListElement { name : qsTr("BLAKE2s256") } - ListElement { name : qsTr("SHA1") } - } - - clickedFunction: function() { - hashDropDown.text = selectedText - hash = hashDropDown.text - hashDropDown.closeTriggered() - } - - Component.onCompleted: { - hashDropDown.text = hash - - for (var i = 0; i < hashListView.model.count; i++) { - if (hashListView.model.get(i).name === hashDropDown.text) { - currentIndex = i - } - } - } - } - } - - DropDownType { - id: cipherDropDown - Layout.fillWidth: true - Layout.topMargin: 16 - - enabled: !autoNegotiateEncryprionSwitcher.checked - - descriptionText: qsTr("Cipher") - headerText: qsTr("Cipher") - - drawerParent: root - - listView: ListViewWithRadioButtonType { - id: cipherListView - - rootWidth: root.width - - model: ListModel { - ListElement { name : qsTr("AES-256-GCM") } - ListElement { name : qsTr("AES-192-GCM") } - ListElement { name : qsTr("AES-128-GCM") } - ListElement { name : qsTr("AES-256-CBC") } - ListElement { name : qsTr("AES-192-CBC") } - ListElement { name : qsTr("AES-128-CBC") } - ListElement { name : qsTr("ChaCha20-Poly1305") } - ListElement { name : qsTr("ARIA-256-CBC") } - ListElement { name : qsTr("CAMELLIA-256-CBC") } - ListElement { name : qsTr("none") } - } - - clickedFunction: function() { - cipherDropDown.text = selectedText - cipher = cipherDropDown.text - cipherDropDown.closeTriggered() - } - - Component.onCompleted: { - cipherDropDown.text = cipher - - for (var i = 0; i < cipherListView.model.count; i++) { - if (cipherListView.model.get(i).name === cipherDropDown.text) { - currentIndex = i - } - } - } - } - } - - Rectangle { - id: contentRect - Layout.fillWidth: true - Layout.topMargin: 32 - Layout.preferredHeight: checkboxLayout.implicitHeight - color: AmneziaStyle.color.onyxBlack - radius: 16 - - Connections { - target: tlsAuthCheckBox - enabled: !GC.isMobile() - - function onFocusChanged() { - if (tlsAuthCheckBox.activeFocus) { - fl.ensureVisible(contentRect) - } - } - } - - ColumnLayout { - id: checkboxLayout - - anchors.fill: parent - CheckBoxType { - id: tlsAuthCheckBox - Layout.fillWidth: true - - text: qsTr("TLS auth") - checked: tlsAuth - - onCheckedChanged: { - if (checked !== tlsAuth) { - console.log("tlsAuth changed to: " + checked) - tlsAuth = checked - } - } - } - - DividerType {} - - CheckBoxType { - id: blockDnsCheckBox - Layout.fillWidth: true - - text: qsTr("Block DNS requests outside of VPN") - checked: blockDns - - onCheckedChanged: { - if (checked !== blockDns) { - blockDns = checked - } - } - } - } - } - - SwitcherType { - id: additionalClientCommandsSwitcher - Layout.fillWidth: true - Layout.topMargin: 32 - parentFlickable: fl - - checked: additionalClientCommands !== "" - - text: qsTr("Additional client configuration commands") - - onCheckedChanged: { - if (!checked) { - additionalClientCommands = "" - } - } - } - - TextAreaType { - id: additionalClientCommandsTextArea - Layout.fillWidth: true - Layout.topMargin: 16 - - visible: additionalClientCommandsSwitcher.checked - - parentFlickable: fl - - textAreaText: additionalClientCommands - placeholderText: qsTr("Commands:") - - textArea.onEditingFinished: { - if (additionalClientCommands !== textAreaText) { - additionalClientCommands = textAreaText - } - } - } - - SwitcherType { - id: additionalServerCommandsSwitcher - Layout.fillWidth: true - Layout.topMargin: 16 - parentFlickable: fl - - checked: additionalServerCommands !== "" - - text: qsTr("Additional server configuration commands") - - onCheckedChanged: { - if (!checked) { - additionalServerCommands = "" - } - } - } - - TextAreaType { - id: additionalServerCommandsTextArea - Layout.fillWidth: true - Layout.topMargin: 16 - - visible: additionalServerCommandsSwitcher.checked - - textAreaText: additionalServerCommands - placeholderText: qsTr("Commands:") - parentFlickable: fl - textArea.onEditingFinished: { - if (additionalServerCommands !== textAreaText) { - additionalServerCommands = textAreaText - } - } - } - - BasicButtonType { - id: saveButton - - Layout.fillWidth: true - Layout.topMargin: 24 - Layout.bottomMargin: 24 - - enabled: vpnAddressSubnetTextField.errorText === "" && - portTextField.errorText === "" - - text: qsTr("Save") - parentFlickable: fl - - onClicked: function() { - forceActiveFocus() - - var headerText = qsTr("Save settings?") - var descriptionText = qsTr("All users with whom you shared a connection with will no longer be able to connect to it.") - var yesButtonText = qsTr("Continue") - var noButtonText = qsTr("Cancel") - - var yesButtonFunction = function() { - if (ConnectionController.isConnected && ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) { - PageController.showNotificationMessage(qsTr("Unable change settings while there is an active connection")) - return - } - - PageController.goToPage(PageEnum.PageSetupWizardInstalling); - InstallController.updateContainer(OpenVpnConfigModel.getConfig()) - } - var noButtonFunction = function() { - if (!GC.isMobile()) { - saveButton.forceActiveFocus() - } - } - showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) - } - - Keys.onEnterPressed: saveButton.clicked() - Keys.onReturnPressed: saveButton.clicked() } } } } + + DropDownType { + id: cipherDropDown + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: !autoNegotiateEncryprionSwitcher.checked + + descriptionText: qsTr("Cipher") + headerText: qsTr("Cipher") + + drawerParent: root + + listView: ListViewWithRadioButtonType { + id: cipherListView + + rootWidth: root.width + + model: ListModel { + ListElement { name : qsTr("AES-256-GCM") } + ListElement { name : qsTr("AES-192-GCM") } + ListElement { name : qsTr("AES-128-GCM") } + ListElement { name : qsTr("AES-256-CBC") } + ListElement { name : qsTr("AES-192-CBC") } + ListElement { name : qsTr("AES-128-CBC") } + ListElement { name : qsTr("ChaCha20-Poly1305") } + ListElement { name : qsTr("ARIA-256-CBC") } + ListElement { name : qsTr("CAMELLIA-256-CBC") } + ListElement { name : qsTr("none") } + } + + clickedFunction: function() { + cipherDropDown.text = selectedText + cipher = cipherDropDown.text + cipherDropDown.closeTriggered() + } + + Component.onCompleted: { + cipherDropDown.text = cipher + + for (var i = 0; i < cipherListView.model.count; i++) { + if (cipherListView.model.get(i).name === cipherDropDown.text) { + currentIndex = i + } + } + } + } + } + + Rectangle { + id: contentRect + Layout.fillWidth: true + Layout.topMargin: 32 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + Layout.preferredHeight: checkboxLayout.implicitHeight + color: AmneziaStyle.color.onyxBlack + radius: 16 + + ColumnLayout { + id: checkboxLayout + + anchors.fill: parent + + CheckBoxType { + id: tlsAuthCheckBox + Layout.fillWidth: true + + text: qsTr("TLS auth") + checked: tlsAuth + + onCheckedChanged: { + if (checked !== tlsAuth) { + console.log("tlsAuth changed to: " + checked) + tlsAuth = checked + } + } + } + + DividerType {} + + CheckBoxType { + id: blockDnsCheckBox + Layout.fillWidth: true + + text: qsTr("Block DNS requests outside of VPN") + checked: blockDns + + onCheckedChanged: { + if (checked !== blockDns) { + blockDns = checked + } + } + } + } + } + + SwitcherType { + id: additionalClientCommandsSwitcher + Layout.fillWidth: true + Layout.topMargin: 32 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + checked: additionalClientCommands !== "" + + text: qsTr("Additional client configuration commands") + + onCheckedChanged: { + if (!checked) { + additionalClientCommands = "" + } + } + } + + TextAreaType { + id: additionalClientCommandsTextArea + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + visible: additionalClientCommandsSwitcher.checked + + textAreaText: additionalClientCommands + placeholderText: qsTr("Commands:") + + textArea.onEditingFinished: { + if (additionalClientCommands !== textAreaText) { + additionalClientCommands = textAreaText + } + } + } + + SwitcherType { + id: additionalServerCommandsSwitcher + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + checked: additionalServerCommands !== "" + + text: qsTr("Additional server configuration commands") + + onCheckedChanged: { + if (!checked) { + additionalServerCommands = "" + } + } + } + + TextAreaType { + id: additionalServerCommandsTextArea + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + visible: additionalServerCommandsSwitcher.checked + + textAreaText: additionalServerCommands + placeholderText: qsTr("Commands:") + + textArea.onEditingFinished: { + if (additionalServerCommands !== textAreaText) { + additionalServerCommands = textAreaText + } + } + } + + BasicButtonType { + id: saveButton + + Layout.fillWidth: true + Layout.topMargin: 24 + Layout.bottomMargin: 24 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: vpnAddressSubnetTextField.errorText === "" && + portTextField.errorText === "" + + text: qsTr("Save") + + onClicked: function() { + forceActiveFocus() + + var headerText = qsTr("Save settings?") + var descriptionText = qsTr("All users with whom you shared a connection with will no longer be able to connect to it.") + var yesButtonText = qsTr("Continue") + var noButtonText = qsTr("Cancel") + + var yesButtonFunction = function() { + if (ConnectionController.isConnected && ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) { + PageController.showNotificationMessage(qsTr("Unable change settings while there is an active connection")) + return + } + + PageController.goToPage(PageEnum.PageSetupWizardInstalling); + InstallController.updateContainer(OpenVpnConfigModel.getConfig()) + } + var noButtonFunction = function() { + if (!GC.isMobile()) { + saveButton.forceActiveFocus() + } + } + showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) + } + + Keys.onEnterPressed: saveButton.clicked() + Keys.onReturnPressed: saveButton.clicked() + } } } } diff --git a/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml b/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml index d8ea1d954..e07e54e34 100644 --- a/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml @@ -66,8 +66,6 @@ PageType { Layout.leftMargin: 16 Layout.rightMargin: 16 - enabled: delegateItem.isEnabled - headerText: qsTr("VPN address subnet") textField.text: subnetAddress @@ -87,8 +85,6 @@ PageType { Layout.leftMargin: 16 Layout.rightMargin: 16 - enabled: delegateItem.isEnabled - headerText: qsTr("Port") textField.text: port textField.maximumLength: 5 diff --git a/client/ui/qml/Pages2/PageSettings.qml b/client/ui/qml/Pages2/PageSettings.qml index f331f9125..de8a00413 100644 --- a/client/ui/qml/Pages2/PageSettings.qml +++ b/client/ui/qml/Pages2/PageSettings.qml @@ -43,8 +43,6 @@ PageType { LabelWithButtonType { Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 visible: isVisible @@ -68,8 +66,6 @@ PageType { visible: GC.isDesktop() Layout.fillWidth: true - Layout.leftMargin: 16 - Layout.rightMargin: 16 text: qsTr("Close application") leftImageSource: "qrc:/images/controls/x-circle.svg" diff --git a/client/ui/qml/Pages2/PageSettingsDns.qml b/client/ui/qml/Pages2/PageSettingsDns.qml index a510f9289..e8e1d8f19 100644 --- a/client/ui/qml/Pages2/PageSettingsDns.qml +++ b/client/ui/qml/Pages2/PageSettingsDns.qml @@ -66,6 +66,13 @@ PageType { text: qsTr("If AmneziaDNS is not used or installed") } + } + + model: 1 // fake model to force the ListView to be created without a model + + delegate: ColumnLayout { + width: listView.width + spacing: 16 TextFieldWithHeaderType { id: primaryDns @@ -96,13 +103,6 @@ PageType { regularExpression: InstallController.ipAddressRegExp() } } - } - - model: 1 // fake model to force the ListView to be created without a model - spacing: 16 - - delegate: ColumnLayout { - width: listView.width BasicButtonType { id: restoreDefaultButton @@ -139,10 +139,6 @@ PageType { showQuestionDrawer(headerText, "", yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) } } - } - - footer: ColumnLayout { - width: listView.width BasicButtonType { id: saveButton diff --git a/client/ui/qml/Pages2/PageSettingsServerData.qml b/client/ui/qml/Pages2/PageSettingsServerData.qml index 1a496b5b7..b744a6da8 100644 --- a/client/ui/qml/Pages2/PageSettingsServerData.qml +++ b/client/ui/qml/Pages2/PageSettingsServerData.qml @@ -18,6 +18,8 @@ PageType { signal lastItemTabClickedSignal() + property bool isServerWithWriteAccess: ServersModel.isProcessedServerHasWriteAccess() + Connections { target: InstallController @@ -59,15 +61,13 @@ PageType { target: ServersModel function onProcessedServerIndexChanged() { - listView.isServerWithWriteAccess = ServersModel.isProcessedServerHasWriteAccess() + root.isServerWithWriteAccess = ServersModel.isProcessedServerHasWriteAccess() } } ListViewType { id: listView - property bool isServerWithWriteAccess: ServersModel.isProcessedServerHasWriteAccess() - anchors.fill: parent model: serverActions @@ -107,7 +107,7 @@ PageType { QtObject { id: check - property bool isVisible: true + property bool isVisible: root.isServerWithWriteAccess readonly property string title: qsTr("Check the server for previously installed Amnezia services") readonly property string description: qsTr("Add them to the application if they were not displayed") readonly property var tColor: AmneziaStyle.color.paleGray @@ -121,7 +121,7 @@ PageType { QtObject { id: reboot - property bool isVisible: true + property bool isVisible: root.isServerWithWriteAccess readonly property string title: qsTr("Reboot server") readonly property string description: "" readonly property var tColor: AmneziaStyle.color.vibrantRed @@ -181,7 +181,7 @@ PageType { QtObject { id: clear - property bool isVisible: true + property bool isVisible: root.isServerWithWriteAccess readonly property string title: qsTr("Clear server from Amnezia software") readonly property string description: "" readonly property var tColor: AmneziaStyle.color.vibrantRed @@ -240,7 +240,7 @@ PageType { QtObject { id: switch_to_premium - property bool isVisible: ServersModel.getProcessedServerData("isServerFromTelegramApi") + property bool isVisible: ServersModel.getProcessedServerData("isServerFromTelegramApi") && ServersModel.processedServerIsPremium readonly property string title: qsTr("Switch to the new Amnezia Premium subscription") readonly property string description: "" readonly property var tColor: AmneziaStyle.color.vibrantRed diff --git a/client/ui/qml/Pages2/PageShareFullAccess.qml b/client/ui/qml/Pages2/PageShareFullAccess.qml index 8a6b7a28d..1465459fa 100644 --- a/client/ui/qml/Pages2/PageShareFullAccess.qml +++ b/client/ui/qml/Pages2/PageShareFullAccess.qml @@ -161,10 +161,4 @@ PageType { } } } - - ShareConnectionDrawer { - id: shareConnectionDrawer - - anchors.fill: parent - } }