2025-08-06 04:35:51 +02:00
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
2025-11-04 11:43:36 +08:00
anchors.topMargin: 20 + SettingsController . safeAreaTopMargin
2025-08-06 04:35:51 +02:00
onFocusChanged: {
if ( this . activeFocus ) {
listView . positionViewAtBeginning ( )
}
}
}
ListViewType {
id: listView
2025-08-27 16:41:11 +08:00
property string headerText: ""
property string configContentHeaderText: ""
2025-08-06 04:35:51 +02:00
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"
2025-11-26 06:07:24 +02:00
signal serverSelectorIndexChanged
2025-08-06 04:35:51 +02:00
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 ( )
2025-09-02 08:03:05 +03:00
if ( serverSelector . currentIndex !== serverSelectorListView . selectedIndex ) {
serverSelector . currentIndex = serverSelectorListView . selectedIndex
2025-12-26 22:55:57 +08:00
serverSelector . serverSelectorIndexChanged ( )
2025-08-06 04:35:51 +02:00
}
2025-08-27 16:41:11 +08:00
listView . headerText = qsTr ( "Accessing " ) + serverSelector . text
listView . configContentHeaderText = qsTr ( "File with accessing settings to " ) + serverSelector . text
2025-08-06 04:35:51 +02:00
serverSelector . closeTriggered ( )
}
Component.onCompleted: {
serverSelectorListView . currentIndex = ServersModel . isDefaultServerHasWriteAccess ( ) ?
proxyServersModel . mapFromSource ( ServersModel . defaultIndex ) : 0
serverSelectorListView . triggerCurrentItem ( )
}
function handler ( ) {
serverSelector . text = selectedText
2025-09-02 08:03:05 +03:00
ServersModel . processedIndex = proxyServersModel . mapToSource ( selectedIndex )
2025-08-06 04:35:51 +02:00
}
}
}
}
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 ( )
}
PageController . showBusyIndicator ( false )
2025-09-03 06:57:30 +03:00
PageController . goToShareConnectionPage ( listView . headerText , listView . configContentHeaderText , "" , ".vpn" , "amnezia_config" )
2025-08-06 04:35:51 +02:00
}
}
}
}
}