Files
amnezia-client/client/ui/qml/Pages2/PageSettingsServerProtocol.qml
T

270 lines
10 KiB
QML
Raw Normal View History

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import SortFilterProxyModel 0.2
import PageEnum 1.0
import ProtocolEnum 1.0
import ContainerEnum 1.0
import ContainerProps 1.0
2024-07-07 13:42:38 +03:00
import Style 1.0
import "./"
import "../Controls2"
import "../Controls2/TextTypes"
import "../Config"
import "../Components"
PageType {
id: root
2024-06-10 18:35:24 +07:00
property bool isClearCacheVisible: ServersModel.isProcessedServerHasWriteAccess() && !ContainersModel.isServiceContainer(ContainersModel.getProcessedContainerIndex())
ColumnLayout {
id: header
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: 20
BackButtonType {
2024-04-18 17:54:55 +04:00
id: backButton
}
2025-05-02 23:54:36 -07:00
BaseHeaderType {
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
Layout.bottomMargin: 32
headerText: ContainersModel.getProcessedContainerName() + qsTr(" settings")
}
ListView {
id: protocols
Layout.fillWidth: true
height: protocols.contentItem.height
clip: true
interactive: true
2024-12-31 04:16:52 +01:00
property bool isFocusable: true
2024-04-18 17:54:55 +04:00
2024-12-31 04:16:52 +01:00
Keys.onTabPressed: {
FocusController.nextKeyTabItem()
2024-04-18 17:54:55 +04:00
}
2024-12-31 04:16:52 +01:00
Keys.onBacktabPressed: {
FocusController.previousKeyTabItem()
2024-04-18 17:54:55 +04:00
}
2024-12-31 04:16:52 +01:00
Keys.onUpPressed: {
FocusController.nextKeyUpItem()
}
Keys.onDownPressed: {
FocusController.nextKeyDownItem()
}
Keys.onLeftPressed: {
FocusController.nextKeyLeftItem()
}
Keys.onRightPressed: {
FocusController.nextKeyRightItem()
}
2024-04-18 17:54:55 +04:00
2024-12-31 04:16:52 +01:00
model: ProtocolsModel
delegate: Item {
implicitWidth: protocols.width
implicitHeight: delegateContent.implicitHeight
ColumnLayout {
id: delegateContent
anchors.fill: parent
2024-09-13 12:38:48 +04:00
property bool isClientSettingsVisible: protocolIndex === ProtocolEnum.WireGuard || protocolIndex === ProtocolEnum.Awg
property bool isServerSettingsVisible: ServersModel.isProcessedServerHasWriteAccess()
LabelWithButtonType {
id: clientSettings
Layout.fillWidth: true
text: protocolName + qsTr(" connection settings")
rightImageSource: "qrc:/images/controls/chevron-right.svg"
visible: delegateContent.isClientSettingsVisible
clickedFunction: function() {
if (isClientProtocolExists) {
switch (protocolIndex) {
case ProtocolEnum.WireGuard: WireGuardConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Awg: AwgConfigModel.updateModel(ProtocolsModel.getConfig()); break;
}
PageController.goToPage(clientProtocolPage);
} else {
PageController.showNotificationMessage(qsTr("Click the \"connect\" button to create a connection configuration"))
}
}
MouseArea {
anchors.fill: clientSettings
cursorShape: Qt.PointingHandCursor
enabled: false
}
}
DividerType {
visible: delegateContent.isClientSettingsVisible
}
LabelWithButtonType {
2024-09-13 12:38:48 +04:00
id: serverSettings
Layout.fillWidth: true
2024-09-13 12:38:48 +04:00
text: protocolName + qsTr(" server settings")
rightImageSource: "qrc:/images/controls/chevron-right.svg"
2024-09-13 12:38:48 +04:00
visible: delegateContent.isServerSettingsVisible
clickedFunction: function() {
switch (protocolIndex) {
case ProtocolEnum.OpenVpn: OpenVpnConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.ShadowSocks: ShadowSocksConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Cloak: CloakConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.WireGuard: WireGuardConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Awg: AwgConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Xray: XrayConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Sftp: SftpConfigModel.updateModel(ProtocolsModel.getConfig()); break;
case ProtocolEnum.Ipsec: Ikev2ConfigModel.updateModel(ProtocolsModel.getConfig()); break;
2024-06-10 18:35:24 +07:00
case ProtocolEnum.Socks5Proxy: Socks5ProxyConfigModel.updateModel(ProtocolsModel.getConfig()); break;
}
2024-09-13 12:38:48 +04:00
PageController.goToPage(serverProtocolPage);
2023-06-13 20:03:20 +09:00
}
MouseArea {
2024-09-13 12:38:48 +04:00
anchors.fill: serverSettings
cursorShape: Qt.PointingHandCursor
enabled: false
}
2023-06-13 20:03:20 +09:00
}
2024-09-13 12:38:48 +04:00
DividerType {
visible: delegateContent.isServerSettingsVisible
}
2023-06-13 20:03:20 +09:00
}
}
2024-12-31 04:16:52 +01:00
footer: ColumnLayout {
width: header.width
2024-12-31 04:16:52 +01:00
LabelWithButtonType {
id: clearCacheButton
Layout.fillWidth: true
visible: root.isClearCacheVisible
2024-12-31 04:16:52 +01:00
text: qsTr("Clear profile")
2024-12-31 04:16:52 +01:00
clickedFunction: function() {
var headerText = qsTr("Clear %1 profile?").arg(ContainersModel.getProcessedContainerName())
var descriptionText = qsTr("The connection configuration will be deleted for this device only")
var yesButtonText = qsTr("Continue")
var noButtonText = qsTr("Cancel")
2024-12-31 04:16:52 +01:00
var yesButtonFunction = function() {
if (ConnectionController.isConnected && ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) {
var message = qsTr("Unable to clear %1 profile while there is an active connection").arg(ContainersModel.getProcessedContainerName())
PageController.showNotificationMessage(message)
return
}
PageController.showBusyIndicator(true)
InstallController.clearCachedProfile()
PageController.showBusyIndicator(false)
}
var noButtonFunction = function() {
// if (!GC.isMobile()) {
// focusItem.forceActiveFocus()
// }
}
2024-02-16 15:24:06 +05:00
2024-12-31 04:16:52 +01:00
showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction)
2024-04-18 14:49:57 +03:00
}
2024-12-31 04:16:52 +01:00
MouseArea {
anchors.fill: clearCacheButton
cursorShape: Qt.PointingHandCursor
enabled: false
2024-04-18 17:54:55 +04:00
}
}
2024-12-31 04:16:52 +01:00
DividerType {
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
2024-12-31 04:16:52 +01:00
visible: root.isClearCacheVisible
}
2024-12-31 04:16:52 +01:00
LabelWithButtonType {
id: removeButton
2024-12-31 04:16:52 +01:00
Layout.fillWidth: true
2024-12-31 04:16:52 +01:00
visible: ServersModel.isProcessedServerHasWriteAccess()
2024-12-31 04:16:52 +01:00
text: qsTr("Remove ")
textColor: AmneziaStyle.color.vibrantRed
clickedFunction: function() {
var headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getProcessedContainerName())
var descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it.")
var yesButtonText = qsTr("Continue")
var noButtonText = qsTr("Cancel")
var yesButtonFunction = function() {
if (ServersModel.isDefaultServerCurrentlyProcessed() && ConnectionController.isConnected
&& ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) {
PageController.showNotificationMessage(qsTr("Cannot remove active container"))
} else
{
PageController.goToPage(PageEnum.PageDeinstalling)
InstallController.removeProcessedContainer()
}
}
var noButtonFunction = function() {
if (!GC.isMobile()) {
focusItem.forceActiveFocus()
}
}
2024-12-31 04:16:52 +01:00
showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction)
}
2024-12-31 04:16:52 +01:00
MouseArea {
anchors.fill: removeButton
cursorShape: Qt.PointingHandCursor
enabled: false
2024-04-18 17:54:55 +04:00
}
}
2024-12-31 04:16:52 +01:00
DividerType {
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
2024-12-31 04:16:52 +01:00
visible: ServersModel.isProcessedServerHasWriteAccess()
}
}
2023-06-13 20:03:20 +09:00
}
}
}
2024-04-18 17:54:55 +04:00