import QtQuick import QtQuick.Controls import QtQuick.Layouts import QtQuick.Dialogs import SortFilterProxyModel 0.2 import PageEnum 1.0 import ContainerProps 1.0 import Style 1.0 import "./" import "../Controls2" import "../Controls2/TextTypes" import "../Components" import "../Config" PageType { id: root BackButtonType { id: backButton anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 onFocusChanged: { if (this.activeFocus) { listView.positionViewAtBeginning() } } } ListViewType { id: listView anchors.top: backButton.bottom anchors.bottom: parent.bottom anchors.right: parent.right anchors.left: parent.left header: ColumnLayout { width: listView.width BaseHeaderType { Layout.fillWidth: true Layout.leftMargin: 16 Layout.rightMargin: 16 Layout.topMargin: 24 headerText: qsTr("Full access to the server and VPN") } ParagraphTextType { Layout.fillWidth: true Layout.leftMargin: 16 Layout.rightMargin: 16 Layout.topMargin: 24 Layout.bottomMargin: 24 text: qsTr("We recommend that you use full access to the server only for your own additional devices.\n") + qsTr("If you share full access with other people, they can remove and add protocols and services to the server, which will cause the VPN to work incorrectly for all users. ") color: AmneziaStyle.color.mutedGray } DropDownType { id: serverSelector objectName: "serverSelector" signal severSelectorIndexChanged property int currentIndex: 0 Layout.fillWidth: true Layout.leftMargin: 16 Layout.rightMargin: 16 Layout.topMargin: 16 drawerHeight: 0.4375 drawerParent: root descriptionText: qsTr("Server") headerText: qsTr("Server") listView: ListViewWithRadioButtonType { id: serverSelectorListView rootWidth: root.width imageSource: "qrc:/images/controls/check.svg" model: SortFilterProxyModel { id: proxyServersModel sourceModel: ServersModel filters: [ ValueFilter { roleName: "hasWriteAccess" value: true } ] } clickedFunction: function() { handler() if (serverSelector.currentIndex !== serverSelectorListView.currentIndex) { serverSelector.currentIndex = serverSelectorListView.currentIndex } shareConnectionDrawer.headerText = qsTr("Accessing ") + serverSelector.text shareConnectionDrawer.configContentHeaderText = qsTr("File with accessing settings to ") + serverSelector.text serverSelector.closeTriggered() } Component.onCompleted: { serverSelectorListView.currentIndex = ServersModel.isDefaultServerHasWriteAccess() ? proxyServersModel.mapFromSource(ServersModel.defaultIndex) : 0 serverSelectorListView.triggerCurrentItem() } function handler() { serverSelector.text = selectedText ServersModel.processedIndex = proxyServersModel.mapToSource(currentIndex) } } } } model: 1 // fake model to force the ListView to be created without a model spacing: 0 delegate: ColumnLayout { width: listView.width BasicButtonType { id: shareButton Layout.fillWidth: true Layout.topMargin: 32 Layout.leftMargin: 16 Layout.rightMargin: 16 text: qsTr("Share") leftImageSource: "qrc:/images/controls/share-2.svg" clickedFunc: function() { PageController.showBusyIndicator(true) if (Qt.platform.os === "android" && !SystemController.isAuthenticated()) { PageController.showBusyIndicator(false) ExportController.exportErrorOccurred(qsTr("Access error!")) return } else { ExportController.generateFullAccessConfig() } const headerItem = listView.headerItem; if (!headerItem) { PageController.showBusyIndicator(false) console.error("Failed to share: header item not found in ListView") return } const serverSelectorItem = listView.findChildWithObjectName(headerItem.children, "serverSelector"); if (!serverSelectorItem) { PageController.showBusyIndicator(false) console.error("Failed to share: serverSelector item not found in ListView") return } shareConnectionDrawer.headerText = qsTr("Connection to ") + serverSelectorItem.text shareConnectionDrawer.configContentHeaderText = qsTr("File with connection settings to ") + serverSelectorItem.text shareConnectionDrawer.openTriggered() PageController.showBusyIndicator(false) } } } } ShareConnectionDrawer { id: shareConnectionDrawer anchors.fill: parent } }