From 70d43abd52775f581e9a6400342d93e349985378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Fri, 2 Feb 2024 11:33:19 +0800 Subject: [PATCH] Add option to ignore device sleep --- ApplicationLibrary/Views/Setting/SettingView.swift | 9 +++++++++ Library/Database/SharedPreferences.swift | 1 + Library/Network/ExtensionProvider.swift | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/ApplicationLibrary/Views/Setting/SettingView.swift b/ApplicationLibrary/Views/Setting/SettingView.swift index 121f29d..8b01521 100644 --- a/ApplicationLibrary/Views/Setting/SettingView.swift +++ b/ApplicationLibrary/Views/Setting/SettingView.swift @@ -28,6 +28,8 @@ public struct SettingView: View { @State private var includeAllNetworks = false #endif + @State private var ignoreDeviceSleep = false + @State private var version = "" @State private var dataSize = "" @State private var taiwanFlagAvailable = false @@ -94,6 +96,12 @@ public struct SettingView: View { } } #endif + Toggle("Ignore Device Sleep", isOn: $ignoreDeviceSleep) + .onChangeCompat(of: ignoreDeviceSleep) { newValue in + Task { + await SharedPreferences.ignoreDeviceSleep.set(newValue) + } + } #if os(macOS) if Variant.useSystemExtension { HStack { @@ -219,6 +227,7 @@ public struct SettingView: View { #if !os(tvOS) includeAllNetworks = await SharedPreferences.includeAllNetworks.get() #endif + ignoreDeviceSleep = await SharedPreferences.ignoreDeviceSleep.get() if ApplicationLibrary.inPreview { version = "" dataSize = LibboxFormatBytes(1000 * 1000 * 10) diff --git a/Library/Database/SharedPreferences.swift b/Library/Database/SharedPreferences.swift index d47ebe7..a0e64a1 100644 --- a/Library/Database/SharedPreferences.swift +++ b/Library/Database/SharedPreferences.swift @@ -17,6 +17,7 @@ public enum SharedPreferences { public static let maxLogLines = Preference("max_log_lines", defaultValue: 300) public static let alwaysOn = Preference("always_on", defaultValue: false) + public static let ignoreDeviceSleep = Preference("ignore_device_sleep", defaultValue: false) #if os(macOS) public static let showMenuBarExtra = Preference("show_menu_bar_extra", defaultValue: true) diff --git a/Library/Network/ExtensionProvider.swift b/Library/Network/ExtensionProvider.swift index 639574d..c7bcfad 100644 --- a/Library/Network/ExtensionProvider.swift +++ b/Library/Network/ExtensionProvider.swift @@ -6,6 +6,7 @@ open class ExtensionProvider: NEPacketTunnelProvider { public var username: String? = nil private var commandServer: LibboxCommandServer! private var boxService: LibboxBoxService! + private var ignoreDeviceSleep = false private var systemProxyAvailable = false private var systemProxyEnabled = false private var platformInterface: ExtensionPlatformInterface! @@ -35,6 +36,7 @@ open class ExtensionProvider: NEPacketTunnelProvider { } await LibboxSetMemoryLimit(!SharedPreferences.disableMemoryLimit.get()) + ignoreDeviceSleep = await SharedPreferences.ignoreDeviceSleep.get() if platformInterface == nil { platformInterface = ExtensionPlatformInterface(self) @@ -159,12 +161,18 @@ open class ExtensionProvider: NEPacketTunnelProvider { } override open func sleep() async { + if ignoreDeviceSleep { + return + } if let boxService { boxService.sleep() } } override open func wake() { + if ignoreDeviceSleep { + return + } if let boxService { boxService.wake() }