
* Add allowed DNS list for killswitch * Windows killswitch strict mode backend part * Killswitch strict mode for Linux and MacOS * Windows fixes * feature: Add Kill Switch settings page with strict mode option * fix windows build after merge * Refresh killswitch mode when it toggled * Use HLM to store strictMode flag * Some Linux updates * feat: Enhance VerticalRadioButton with improved styling and disabled states * Refresh killSwitch state update * Fix build * refactor: Modularize header components * Change kill switch radio button styling * Fix strict kill switch mode handling * Refactor: Replace HeaderType with new Types for headers in QML pages * Remove deprecated HeaderType QML component * Refresh strict mode killswitch after global toggle change * Implement model, controller and UI for killswitch dns exceptions * Connect backend part and UI * Change label text to DNS exceptions * Remove HeaderType from PageSettingsApiDevices * Some pretty fixes * Fix problem with definition sequence of PageSettingsKillSwitchExceptions.pml elements * Add exclusion method for Windows firewall * Change ubuntu version in deploy script * Update ubuntu version in GH actions * Add confirmation popup for strict killswitch mode * Add qt standard path for build script * Add method to killswitch for expanding strickt mode exceptions list and fix allowTrafficTo() for Windows. Also Added cache in KillSwitch class for exceptions * Add insertion of gateway address to strict killswitch exceptions * Review fixes * buildfix and naming --------- Co-authored-by: aiamnezia <ai@amnezia.org>
105 lines
3.3 KiB
QML
105 lines
3.3 KiB
QML
import QtQuick
|
||
import QtQuick.Controls
|
||
import QtQuick.Layouts
|
||
import QtQuick.Dialogs
|
||
|
||
import QtCore
|
||
|
||
import SortFilterProxyModel 0.2
|
||
|
||
import PageEnum 1.0
|
||
import Style 1.0
|
||
|
||
import "./"
|
||
import "../Controls2"
|
||
import "../Controls2/TextTypes"
|
||
import "../Config"
|
||
import "../Components"
|
||
|
||
PageType {
|
||
id: root
|
||
|
||
ListViewType {
|
||
id: listView
|
||
|
||
anchors.fill: parent
|
||
anchors.topMargin: 20
|
||
anchors.bottomMargin: 24
|
||
|
||
model: ApiDevicesModel
|
||
|
||
header: ColumnLayout {
|
||
width: listView.width
|
||
|
||
BackButtonType {
|
||
id: backButton
|
||
}
|
||
|
||
BaseHeaderType {
|
||
id: header
|
||
|
||
Layout.fillWidth: true
|
||
Layout.rightMargin: 16
|
||
Layout.leftMargin: 16
|
||
|
||
headerText: qsTr("Active Devices")
|
||
descriptionText: qsTr("Manage currently connected devices")
|
||
}
|
||
|
||
WarningType {
|
||
Layout.topMargin: 16
|
||
Layout.rightMargin: 16
|
||
Layout.leftMargin: 16
|
||
Layout.fillWidth: true
|
||
|
||
textString: qsTr("You can find the identifier on the Support tab or, for older versions of the app, "
|
||
+ "by tapping '+' and then the three dots at the top of the page.")
|
||
|
||
iconPath: "qrc:/images/controls/alert-circle.svg"
|
||
}
|
||
}
|
||
|
||
delegate: ColumnLayout {
|
||
width: listView.width
|
||
|
||
LabelWithButtonType {
|
||
Layout.fillWidth: true
|
||
Layout.topMargin: 6
|
||
|
||
text: osVersion + (isCurrentDevice ? qsTr(" (current device)") : "")
|
||
descriptionText: qsTr("Support tag: ") + "\n" + supportTag + "\n" + qsTr("Last updated: ") + lastUpdate
|
||
rightImageSource: "qrc:/images/controls/trash.svg"
|
||
|
||
clickedFunction: function() {
|
||
if (isCurrentDevice && ServersModel.isDefaultServerCurrentlyProcessed() && ConnectionController.isConnected) {
|
||
PageController.showNotificationMessage(qsTr("Cannot unlink device during active connection"))
|
||
return
|
||
}
|
||
|
||
var headerText = qsTr("Are you sure you want to unlink this device?")
|
||
var descriptionText = qsTr("This will unlink the device from your subscription. You can reconnect it anytime by pressing Connect.")
|
||
var yesButtonText = qsTr("Continue")
|
||
var noButtonText = qsTr("Cancel")
|
||
|
||
var yesButtonFunction = function() {
|
||
Qt.callLater(deactivateExternalDevice, supportTag, countryCode)
|
||
}
|
||
var noButtonFunction = function() {
|
||
}
|
||
|
||
showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction)
|
||
}
|
||
}
|
||
|
||
DividerType {}
|
||
}
|
||
}
|
||
|
||
function deactivateExternalDevice(supportTag, countryCode) {
|
||
PageController.showBusyIndicator(true)
|
||
if (ApiConfigsController.deactivateExternalDevice(supportTag, countryCode)) {
|
||
ApiSettingsController.getAccountInfo(true)
|
||
}
|
||
PageController.showBusyIndicator(false)
|
||
}
|
||
}
|