diff --git a/lib/data/repository/config_options_store.dart b/lib/data/repository/config_options_store.dart index d6bfca70..53a27e79 100644 --- a/lib/data/repository/config_options_store.dart +++ b/lib/data/repository/config_options_store.dart @@ -42,6 +42,12 @@ final directDnsDomainStrategyStore = PrefNotifier.provider( final mixedPortStore = PrefNotifier.provider("mixed-port", _default.mixedPort); final localDnsPortStore = PrefNotifier.provider("localDns-port", _default.localDnsPort); +final tunImplementationStore = PrefNotifier.provider( + "tun-implementation", + _default.tunImplementation, + mapFrom: TunImplementation.values.byName, + mapTo: (value) => value.name, +); final mtuStore = PrefNotifier.provider("mtu", _default.mtu); final connectionTestUrlStore = PrefNotifier.provider("connection-test-url", _default.connectionTestUrl); @@ -67,6 +73,7 @@ ConfigOptions configOptions(ConfigOptionsRef ref) => ConfigOptions( directDnsDomainStrategy: ref.watch(directDnsDomainStrategyStore), mixedPort: ref.watch(mixedPortStore), localDnsPort: ref.watch(localDnsPortStore), + tunImplementation: ref.watch(tunImplementationStore), mtu: ref.watch(mtuStore), connectionTestUrl: ref.watch(connectionTestUrlStore), urlTestInterval: ref.watch(urlTestIntervalStore), diff --git a/lib/data/repository/core_facade_impl.dart b/lib/data/repository/core_facade_impl.dart index 9422b96d..19a15032 100644 --- a/lib/data/repository/core_facade_impl.dart +++ b/lib/data/repository/core_facade_impl.dart @@ -78,6 +78,7 @@ class CoreFacadeImpl with ExceptionHandler, InfraLogger implements CoreFacade { ) { return exceptionHandler( () { + loggy.debug("changing config options: $options"); return singbox .changeConfigOptions(options) .mapLeft(CoreServiceFailure.invalidConfigOptions) diff --git a/lib/domain/singbox/config_options.dart b/lib/domain/singbox/config_options.dart index 7fdce6c4..63ee8870 100644 --- a/lib/domain/singbox/config_options.dart +++ b/lib/domain/singbox/config_options.dart @@ -19,10 +19,11 @@ class ConfigOptions with _$ConfigOptions { @Default(DomainStrategy.auto) DomainStrategy directDnsDomainStrategy, @Default(2334) int mixedPort, @Default(6450) int localDnsPort, + @Default(TunImplementation.mixed) TunImplementation tunImplementation, @Default(9000) int mtu, @Default("https://www.gstatic.com/generate_204") String connectionTestUrl, @IntervalConverter() - @Default(Duration(minutes: 5)) + @Default(Duration(minutes: 10)) Duration urlTestInterval, @Default(true) bool enableClashApi, @Default(9090) int clashApiPort, @@ -83,6 +84,12 @@ enum DomainStrategy { }; } +enum TunImplementation { + mixed, + system, + gVisor; +} + class IntervalConverter implements JsonConverter { const IntervalConverter();