Fix issues with VPN toggle
- Move rate limit to UI only - Keep caption constant to "Enabled"
This commit is contained in:
parent
92b9c4cd9a
commit
ccde6a30cf
|
@ -140,7 +140,6 @@ class AppContext {
|
|||
}
|
||||
}
|
||||
providerManager.rateLimitMilliseconds = Constants.RateLimit.providerManager
|
||||
vpnManager.rateLimitMilliseconds = Constants.RateLimit.vpnManager
|
||||
vpnManager.isOnDemandRulesSupported = {
|
||||
self.isEligibleForOnDemandRules()
|
||||
}
|
||||
|
|
|
@ -139,7 +139,7 @@ extension Constants {
|
|||
enum RateLimit {
|
||||
static let providerManager = 10000
|
||||
|
||||
static let vpnManager = 500
|
||||
static let vpnToggle = 500
|
||||
}
|
||||
|
||||
enum Log {
|
||||
|
|
|
@ -44,6 +44,8 @@ extension ProfileView {
|
|||
|
||||
@State private var isLocallyEnabled = false
|
||||
|
||||
@State private var canToggle = true
|
||||
|
||||
private var isEnabled: Binding<Bool> {
|
||||
.init {
|
||||
isLocallyEnabled
|
||||
|
@ -101,7 +103,7 @@ extension ProfileView {
|
|||
isLocallyEnabled = currentVPNState.isEnabled
|
||||
}.onChange(of: currentVPNState.isEnabled) {
|
||||
isLocallyEnabled = $0
|
||||
}.disabled(vpnManager.isRateLimiting)
|
||||
}.disabled(!canToggle)
|
||||
|
||||
Text(L10n.Profile.Items.ConnectionStatus.caption)
|
||||
.withTrailingText(currentVPNState.localizedStatusDescription(
|
||||
|
@ -112,8 +114,9 @@ extension ProfileView {
|
|||
}
|
||||
|
||||
private var vpnToggleString: String {
|
||||
let V = L10n.Profile.Items.Vpn.self
|
||||
return currentVPNState.isEnabled ? V.TurnOff.caption : V.TurnOn.caption
|
||||
// let V = L10n.Profile.Items.Vpn.self
|
||||
// return currentVPNState.isEnabled ? V.TurnOff.caption : V.TurnOn.caption
|
||||
L10n.Global.Strings.enabled
|
||||
}
|
||||
|
||||
private var inactiveSubview: some View {
|
||||
|
@ -146,6 +149,12 @@ extension ProfileView {
|
|||
guard vpnManager.toggle() else {
|
||||
return
|
||||
}
|
||||
|
||||
// rate limit toggle actions
|
||||
canToggle = false
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(Constants.RateLimit.vpnToggle)) {
|
||||
canToggle = true
|
||||
}
|
||||
|
||||
// eligibility: donate intents if eligible for Siri
|
||||
if isEligibleForSiri {
|
||||
|
|
|
@ -29,7 +29,7 @@ import TunnelKitManager
|
|||
import TunnelKitOpenVPNManager
|
||||
|
||||
@MainActor
|
||||
public class VPNManager: ObservableObject, RateLimited {
|
||||
public class VPNManager: ObservableObject {
|
||||
|
||||
// MARK: Initialization
|
||||
|
||||
|
@ -81,20 +81,6 @@ public class VPNManager: ObservableObject, RateLimited {
|
|||
}
|
||||
|
||||
public func toggle() -> Bool {
|
||||
guard !isRateLimited("") else {
|
||||
return false
|
||||
}
|
||||
lastActionDate[""] = Date()
|
||||
|
||||
// signal rate limiting flag (e.g. for UI)
|
||||
if let rateLimitMilliseconds = rateLimitMilliseconds {
|
||||
isRateLimiting = true
|
||||
Task {
|
||||
try await Task.sleep(nanoseconds: UInt64(rateLimitMilliseconds) * NSEC_PER_MSEC)
|
||||
isRateLimiting = false
|
||||
}
|
||||
}
|
||||
|
||||
guard let configuration = vpnConfigurationWithCurrentProfile() else {
|
||||
return false
|
||||
}
|
||||
|
@ -141,14 +127,6 @@ public class VPNManager: ObservableObject, RateLimited {
|
|||
public func debugLogURL(forProtocol vpnProtocol: VPNProtocolType) -> URL? {
|
||||
return strategy.debugLogURL(forProtocol: vpnProtocol)
|
||||
}
|
||||
|
||||
// MARK: RateLimited
|
||||
|
||||
public var lastActionDate: [String: Date] = [:]
|
||||
|
||||
public var rateLimitMilliseconds: Int?
|
||||
|
||||
@Published public private(set) var isRateLimiting = false
|
||||
}
|
||||
|
||||
// MARK: Observation
|
||||
|
|
Loading…
Reference in New Issue