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 + PageController.safeAreaTopMargin onFocusChanged: { if (this.activeFocus) { listView.positionViewAtBeginning() } } } ListViewType { id: listView property string headerText: "" property string configContentHeaderText: "" 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.selectedIndex) { serverSelector.currentIndex = serverSelectorListView.selectedIndex serverSelector.severSelectorIndexChanged() } listView.headerText = qsTr("Accessing ") + serverSelector.text listView.configContentHeaderText = qsTr("File with accessing settings to ") + serverSelector.text serverSelector.closeTriggered() } Component.onCompleted: { serverSelectorListView.currentIndex = ServersUiController.isServerHasWriteAccess(ServersUiController.defaultServerId) ? proxyServersModel.mapFromSource(ServersUiController.getServerIndexById(ServersUiController.defaultServerId)) : 0 serverSelectorListView.triggerCurrentItem() } function handler() { serverSelector.text = selectedText ServersUiController.setProcessedServerId(ServersUiController.getServerId(proxyServersModel.mapToSource(selectedIndex))) } } } } 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(ServersUiController.processedServerId) } PageController.showBusyIndicator(false) PageController.goToShareConnectionPage(listView.headerText, listView.configContentHeaderText, "", ".vpn", "amnezia_config") } } } } }