diff --git a/lib/models/clash_config.dart b/lib/models/clash_config.dart index f1d3b20f..cc3c19ed 100644 --- a/lib/models/clash_config.dart +++ b/lib/models/clash_config.dart @@ -300,6 +300,8 @@ abstract class Dns with _$Dns { Map nameserverPolicy, @Default(['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query']) List nameserver, + @JsonKey(name: 'direct-nameserver', includeIfNull: false) + List? directNameserver, @Default(['tls://8.8.4.4', 'tls://1.1.1.1']) List fallback, @Default(['https://doh.pub/dns-query']) @JsonKey(name: 'proxy-server-nameserver') diff --git a/lib/models/generated/clash_config.freezed.dart b/lib/models/generated/clash_config.freezed.dart index 7363fc32..9f13e2c5 100644 --- a/lib/models/generated/clash_config.freezed.dart +++ b/lib/models/generated/clash_config.freezed.dart @@ -2644,7 +2644,7 @@ as List, /// @nodoc mixin _$Dns { - bool get enable; String get listen;@JsonKey(name: 'prefer-h3') bool get preferH3;@JsonKey(name: 'use-hosts') bool get useHosts;@JsonKey(name: 'use-system-hosts') bool get useSystemHosts;@JsonKey(name: 'respect-rules') bool get respectRules; bool get ipv6;@JsonKey(name: 'default-nameserver') List get defaultNameserver;@JsonKey(name: 'enhanced-mode') DnsMode get enhancedMode;@JsonKey(name: 'fake-ip-range') String get fakeIpRange;@JsonKey(name: 'fake-ip-filter') List get fakeIpFilter;@JsonKey(name: 'nameserver-policy') Map get nameserverPolicy; List get nameserver; List get fallback;@JsonKey(name: 'proxy-server-nameserver') List get proxyServerNameserver;@JsonKey(name: 'fallback-filter') FallbackFilter get fallbackFilter; + bool get enable; String get listen;@JsonKey(name: 'prefer-h3') bool get preferH3;@JsonKey(name: 'use-hosts') bool get useHosts;@JsonKey(name: 'use-system-hosts') bool get useSystemHosts;@JsonKey(name: 'respect-rules') bool get respectRules; bool get ipv6;@JsonKey(name: 'default-nameserver') List get defaultNameserver;@JsonKey(name: 'enhanced-mode') DnsMode get enhancedMode;@JsonKey(name: 'fake-ip-range') String get fakeIpRange;@JsonKey(name: 'fake-ip-filter') List get fakeIpFilter;@JsonKey(name: 'nameserver-policy') Map get nameserverPolicy; List get nameserver;@JsonKey(name: 'direct-nameserver', includeIfNull: false) List? get directNameserver; List get fallback;@JsonKey(name: 'proxy-server-nameserver') List get proxyServerNameserver;@JsonKey(name: 'fallback-filter') FallbackFilter get fallbackFilter; /// Create a copy of Dns /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -2657,16 +2657,16 @@ $DnsCopyWith get copyWith => _$DnsCopyWithImpl(this as Dns, _$identity @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is Dns&&(identical(other.enable, enable) || other.enable == enable)&&(identical(other.listen, listen) || other.listen == listen)&&(identical(other.preferH3, preferH3) || other.preferH3 == preferH3)&&(identical(other.useHosts, useHosts) || other.useHosts == useHosts)&&(identical(other.useSystemHosts, useSystemHosts) || other.useSystemHosts == useSystemHosts)&&(identical(other.respectRules, respectRules) || other.respectRules == respectRules)&&(identical(other.ipv6, ipv6) || other.ipv6 == ipv6)&&const DeepCollectionEquality().equals(other.defaultNameserver, defaultNameserver)&&(identical(other.enhancedMode, enhancedMode) || other.enhancedMode == enhancedMode)&&(identical(other.fakeIpRange, fakeIpRange) || other.fakeIpRange == fakeIpRange)&&const DeepCollectionEquality().equals(other.fakeIpFilter, fakeIpFilter)&&const DeepCollectionEquality().equals(other.nameserverPolicy, nameserverPolicy)&&const DeepCollectionEquality().equals(other.nameserver, nameserver)&&const DeepCollectionEquality().equals(other.fallback, fallback)&&const DeepCollectionEquality().equals(other.proxyServerNameserver, proxyServerNameserver)&&(identical(other.fallbackFilter, fallbackFilter) || other.fallbackFilter == fallbackFilter)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is Dns&&(identical(other.enable, enable) || other.enable == enable)&&(identical(other.listen, listen) || other.listen == listen)&&(identical(other.preferH3, preferH3) || other.preferH3 == preferH3)&&(identical(other.useHosts, useHosts) || other.useHosts == useHosts)&&(identical(other.useSystemHosts, useSystemHosts) || other.useSystemHosts == useSystemHosts)&&(identical(other.respectRules, respectRules) || other.respectRules == respectRules)&&(identical(other.ipv6, ipv6) || other.ipv6 == ipv6)&&const DeepCollectionEquality().equals(other.defaultNameserver, defaultNameserver)&&(identical(other.enhancedMode, enhancedMode) || other.enhancedMode == enhancedMode)&&(identical(other.fakeIpRange, fakeIpRange) || other.fakeIpRange == fakeIpRange)&&const DeepCollectionEquality().equals(other.fakeIpFilter, fakeIpFilter)&&const DeepCollectionEquality().equals(other.nameserverPolicy, nameserverPolicy)&&const DeepCollectionEquality().equals(other.nameserver, nameserver)&&const DeepCollectionEquality().equals(other.directNameserver, directNameserver)&&const DeepCollectionEquality().equals(other.fallback, fallback)&&const DeepCollectionEquality().equals(other.proxyServerNameserver, proxyServerNameserver)&&(identical(other.fallbackFilter, fallbackFilter) || other.fallbackFilter == fallbackFilter)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,enable,listen,preferH3,useHosts,useSystemHosts,respectRules,ipv6,const DeepCollectionEquality().hash(defaultNameserver),enhancedMode,fakeIpRange,const DeepCollectionEquality().hash(fakeIpFilter),const DeepCollectionEquality().hash(nameserverPolicy),const DeepCollectionEquality().hash(nameserver),const DeepCollectionEquality().hash(fallback),const DeepCollectionEquality().hash(proxyServerNameserver),fallbackFilter); +int get hashCode => Object.hash(runtimeType,enable,listen,preferH3,useHosts,useSystemHosts,respectRules,ipv6,const DeepCollectionEquality().hash(defaultNameserver),enhancedMode,fakeIpRange,const DeepCollectionEquality().hash(fakeIpFilter),const DeepCollectionEquality().hash(nameserverPolicy),const DeepCollectionEquality().hash(nameserver),const DeepCollectionEquality().hash(directNameserver),const DeepCollectionEquality().hash(fallback),const DeepCollectionEquality().hash(proxyServerNameserver),fallbackFilter); @override String toString() { - return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)'; + return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, directNameserver: $directNameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)'; } @@ -2677,7 +2677,7 @@ abstract mixin class $DnsCopyWith<$Res> { factory $DnsCopyWith(Dns value, $Res Function(Dns) _then) = _$DnsCopyWithImpl; @useResult $Res call({ - bool enable, String listen,@JsonKey(name: 'prefer-h3') bool preferH3,@JsonKey(name: 'use-hosts') bool useHosts,@JsonKey(name: 'use-system-hosts') bool useSystemHosts,@JsonKey(name: 'respect-rules') bool respectRules, bool ipv6,@JsonKey(name: 'default-nameserver') List defaultNameserver,@JsonKey(name: 'enhanced-mode') DnsMode enhancedMode,@JsonKey(name: 'fake-ip-range') String fakeIpRange,@JsonKey(name: 'fake-ip-filter') List fakeIpFilter,@JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, List fallback,@JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver,@JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter + bool enable, String listen,@JsonKey(name: 'prefer-h3') bool preferH3,@JsonKey(name: 'use-hosts') bool useHosts,@JsonKey(name: 'use-system-hosts') bool useSystemHosts,@JsonKey(name: 'respect-rules') bool respectRules, bool ipv6,@JsonKey(name: 'default-nameserver') List defaultNameserver,@JsonKey(name: 'enhanced-mode') DnsMode enhancedMode,@JsonKey(name: 'fake-ip-range') String fakeIpRange,@JsonKey(name: 'fake-ip-filter') List fakeIpFilter,@JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver,@JsonKey(name: 'direct-nameserver', includeIfNull: false) List? directNameserver, List fallback,@JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver,@JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter }); @@ -2694,7 +2694,7 @@ class _$DnsCopyWithImpl<$Res> /// Create a copy of Dns /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? enable = null,Object? listen = null,Object? preferH3 = null,Object? useHosts = null,Object? useSystemHosts = null,Object? respectRules = null,Object? ipv6 = null,Object? defaultNameserver = null,Object? enhancedMode = null,Object? fakeIpRange = null,Object? fakeIpFilter = null,Object? nameserverPolicy = null,Object? nameserver = null,Object? fallback = null,Object? proxyServerNameserver = null,Object? fallbackFilter = null,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? enable = null,Object? listen = null,Object? preferH3 = null,Object? useHosts = null,Object? useSystemHosts = null,Object? respectRules = null,Object? ipv6 = null,Object? defaultNameserver = null,Object? enhancedMode = null,Object? fakeIpRange = null,Object? fakeIpFilter = null,Object? nameserverPolicy = null,Object? nameserver = null,Object? directNameserver = freezed,Object? fallback = null,Object? proxyServerNameserver = null,Object? fallbackFilter = null,}) { return _then(_self.copyWith( enable: null == enable ? _self.enable : enable // ignore: cast_nullable_to_non_nullable as bool,listen: null == listen ? _self.listen : listen // ignore: cast_nullable_to_non_nullable @@ -2709,7 +2709,8 @@ as DnsMode,fakeIpRange: null == fakeIpRange ? _self.fakeIpRange : fakeIpRange // as String,fakeIpFilter: null == fakeIpFilter ? _self.fakeIpFilter : fakeIpFilter // ignore: cast_nullable_to_non_nullable as List,nameserverPolicy: null == nameserverPolicy ? _self.nameserverPolicy : nameserverPolicy // ignore: cast_nullable_to_non_nullable as Map,nameserver: null == nameserver ? _self.nameserver : nameserver // ignore: cast_nullable_to_non_nullable -as List,fallback: null == fallback ? _self.fallback : fallback // ignore: cast_nullable_to_non_nullable +as List,directNameserver: freezed == directNameserver ? _self.directNameserver : directNameserver // ignore: cast_nullable_to_non_nullable +as List?,fallback: null == fallback ? _self.fallback : fallback // ignore: cast_nullable_to_non_nullable as List,proxyServerNameserver: null == proxyServerNameserver ? _self.proxyServerNameserver : proxyServerNameserver // ignore: cast_nullable_to_non_nullable as List,fallbackFilter: null == fallbackFilter ? _self.fallbackFilter : fallbackFilter // ignore: cast_nullable_to_non_nullable as FallbackFilter, @@ -2806,10 +2807,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, @JsonKey(name: 'direct-nameserver', includeIfNull: false) List? directNameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _Dns() when $default != null: -return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: +return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.directNameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: return orElse(); } @@ -2827,10 +2828,10 @@ return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.us /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, @JsonKey(name: 'direct-nameserver', includeIfNull: false) List? directNameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter) $default,) {final _that = this; switch (_that) { case _Dns(): -return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: +return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.directNameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: throw StateError('Unexpected subclass'); } @@ -2847,10 +2848,10 @@ return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.us /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( bool enable, String listen, @JsonKey(name: 'prefer-h3') bool preferH3, @JsonKey(name: 'use-hosts') bool useHosts, @JsonKey(name: 'use-system-hosts') bool useSystemHosts, @JsonKey(name: 'respect-rules') bool respectRules, bool ipv6, @JsonKey(name: 'default-nameserver') List defaultNameserver, @JsonKey(name: 'enhanced-mode') DnsMode enhancedMode, @JsonKey(name: 'fake-ip-range') String fakeIpRange, @JsonKey(name: 'fake-ip-filter') List fakeIpFilter, @JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, @JsonKey(name: 'direct-nameserver', includeIfNull: false) List? directNameserver, List fallback, @JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver, @JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter)? $default,) {final _that = this; switch (_that) { case _Dns() when $default != null: -return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: +return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.useSystemHosts,_that.respectRules,_that.ipv6,_that.defaultNameserver,_that.enhancedMode,_that.fakeIpRange,_that.fakeIpFilter,_that.nameserverPolicy,_that.nameserver,_that.directNameserver,_that.fallback,_that.proxyServerNameserver,_that.fallbackFilter);case _: return null; } @@ -2862,7 +2863,7 @@ return $default(_that.enable,_that.listen,_that.preferH3,_that.useHosts,_that.us @JsonSerializable() class _Dns implements Dns { - const _Dns({this.enable = true, this.listen = '0.0.0.0:1053', @JsonKey(name: 'prefer-h3') this.preferH3 = false, @JsonKey(name: 'use-hosts') this.useHosts = true, @JsonKey(name: 'use-system-hosts') this.useSystemHosts = true, @JsonKey(name: 'respect-rules') this.respectRules = false, this.ipv6 = false, @JsonKey(name: 'default-nameserver') final List defaultNameserver = const ['223.5.5.5'], @JsonKey(name: 'enhanced-mode') this.enhancedMode = DnsMode.fakeIp, @JsonKey(name: 'fake-ip-range') this.fakeIpRange = '198.18.0.1/16', @JsonKey(name: 'fake-ip-filter') final List fakeIpFilter = const ['*.lan', 'localhost.ptlogin2.qq.com'], @JsonKey(name: 'nameserver-policy') final Map nameserverPolicy = const {'www.baidu.com' : '114.114.114.114', '+.internal.crop.com' : '10.0.0.1', 'geosite:cn' : 'https://doh.pub/dns-query'}, final List nameserver = const ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'], final List fallback = const ['tls://8.8.4.4', 'tls://1.1.1.1'], @JsonKey(name: 'proxy-server-nameserver') final List proxyServerNameserver = const ['https://doh.pub/dns-query'], @JsonKey(name: 'fallback-filter') this.fallbackFilter = const FallbackFilter()}): _defaultNameserver = defaultNameserver,_fakeIpFilter = fakeIpFilter,_nameserverPolicy = nameserverPolicy,_nameserver = nameserver,_fallback = fallback,_proxyServerNameserver = proxyServerNameserver; + const _Dns({this.enable = true, this.listen = '0.0.0.0:1053', @JsonKey(name: 'prefer-h3') this.preferH3 = false, @JsonKey(name: 'use-hosts') this.useHosts = true, @JsonKey(name: 'use-system-hosts') this.useSystemHosts = true, @JsonKey(name: 'respect-rules') this.respectRules = false, this.ipv6 = false, @JsonKey(name: 'default-nameserver') final List defaultNameserver = const ['223.5.5.5'], @JsonKey(name: 'enhanced-mode') this.enhancedMode = DnsMode.fakeIp, @JsonKey(name: 'fake-ip-range') this.fakeIpRange = '198.18.0.1/16', @JsonKey(name: 'fake-ip-filter') final List fakeIpFilter = const ['*.lan', 'localhost.ptlogin2.qq.com'], @JsonKey(name: 'nameserver-policy') final Map nameserverPolicy = const {'www.baidu.com' : '114.114.114.114', '+.internal.crop.com' : '10.0.0.1', 'geosite:cn' : 'https://doh.pub/dns-query'}, final List nameserver = const ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'], @JsonKey(name: 'direct-nameserver', includeIfNull: false) final List? directNameserver, final List fallback = const ['tls://8.8.4.4', 'tls://1.1.1.1'], @JsonKey(name: 'proxy-server-nameserver') final List proxyServerNameserver = const ['https://doh.pub/dns-query'], @JsonKey(name: 'fallback-filter') this.fallbackFilter = const FallbackFilter()}): _defaultNameserver = defaultNameserver,_fakeIpFilter = fakeIpFilter,_nameserverPolicy = nameserverPolicy,_nameserver = nameserver,_directNameserver = directNameserver,_fallback = fallback,_proxyServerNameserver = proxyServerNameserver; factory _Dns.fromJson(Map json) => _$DnsFromJson(json); @override@JsonKey() final bool enable; @@ -2902,6 +2903,15 @@ class _Dns implements Dns { return EqualUnmodifiableListView(_nameserver); } + final List? _directNameserver; +@override@JsonKey(name: 'direct-nameserver', includeIfNull: false) List? get directNameserver { + final value = _directNameserver; + if (value == null) return null; + if (_directNameserver is EqualUnmodifiableListView) return _directNameserver; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(value); +} + final List _fallback; @override@JsonKey() List get fallback { if (_fallback is EqualUnmodifiableListView) return _fallback; @@ -2931,16 +2941,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _Dns&&(identical(other.enable, enable) || other.enable == enable)&&(identical(other.listen, listen) || other.listen == listen)&&(identical(other.preferH3, preferH3) || other.preferH3 == preferH3)&&(identical(other.useHosts, useHosts) || other.useHosts == useHosts)&&(identical(other.useSystemHosts, useSystemHosts) || other.useSystemHosts == useSystemHosts)&&(identical(other.respectRules, respectRules) || other.respectRules == respectRules)&&(identical(other.ipv6, ipv6) || other.ipv6 == ipv6)&&const DeepCollectionEquality().equals(other._defaultNameserver, _defaultNameserver)&&(identical(other.enhancedMode, enhancedMode) || other.enhancedMode == enhancedMode)&&(identical(other.fakeIpRange, fakeIpRange) || other.fakeIpRange == fakeIpRange)&&const DeepCollectionEquality().equals(other._fakeIpFilter, _fakeIpFilter)&&const DeepCollectionEquality().equals(other._nameserverPolicy, _nameserverPolicy)&&const DeepCollectionEquality().equals(other._nameserver, _nameserver)&&const DeepCollectionEquality().equals(other._fallback, _fallback)&&const DeepCollectionEquality().equals(other._proxyServerNameserver, _proxyServerNameserver)&&(identical(other.fallbackFilter, fallbackFilter) || other.fallbackFilter == fallbackFilter)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _Dns&&(identical(other.enable, enable) || other.enable == enable)&&(identical(other.listen, listen) || other.listen == listen)&&(identical(other.preferH3, preferH3) || other.preferH3 == preferH3)&&(identical(other.useHosts, useHosts) || other.useHosts == useHosts)&&(identical(other.useSystemHosts, useSystemHosts) || other.useSystemHosts == useSystemHosts)&&(identical(other.respectRules, respectRules) || other.respectRules == respectRules)&&(identical(other.ipv6, ipv6) || other.ipv6 == ipv6)&&const DeepCollectionEquality().equals(other._defaultNameserver, _defaultNameserver)&&(identical(other.enhancedMode, enhancedMode) || other.enhancedMode == enhancedMode)&&(identical(other.fakeIpRange, fakeIpRange) || other.fakeIpRange == fakeIpRange)&&const DeepCollectionEquality().equals(other._fakeIpFilter, _fakeIpFilter)&&const DeepCollectionEquality().equals(other._nameserverPolicy, _nameserverPolicy)&&const DeepCollectionEquality().equals(other._nameserver, _nameserver)&&const DeepCollectionEquality().equals(other._directNameserver, _directNameserver)&&const DeepCollectionEquality().equals(other._fallback, _fallback)&&const DeepCollectionEquality().equals(other._proxyServerNameserver, _proxyServerNameserver)&&(identical(other.fallbackFilter, fallbackFilter) || other.fallbackFilter == fallbackFilter)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,enable,listen,preferH3,useHosts,useSystemHosts,respectRules,ipv6,const DeepCollectionEquality().hash(_defaultNameserver),enhancedMode,fakeIpRange,const DeepCollectionEquality().hash(_fakeIpFilter),const DeepCollectionEquality().hash(_nameserverPolicy),const DeepCollectionEquality().hash(_nameserver),const DeepCollectionEquality().hash(_fallback),const DeepCollectionEquality().hash(_proxyServerNameserver),fallbackFilter); +int get hashCode => Object.hash(runtimeType,enable,listen,preferH3,useHosts,useSystemHosts,respectRules,ipv6,const DeepCollectionEquality().hash(_defaultNameserver),enhancedMode,fakeIpRange,const DeepCollectionEquality().hash(_fakeIpFilter),const DeepCollectionEquality().hash(_nameserverPolicy),const DeepCollectionEquality().hash(_nameserver),const DeepCollectionEquality().hash(_directNameserver),const DeepCollectionEquality().hash(_fallback),const DeepCollectionEquality().hash(_proxyServerNameserver),fallbackFilter); @override String toString() { - return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)'; + return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, directNameserver: $directNameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)'; } @@ -2951,7 +2961,7 @@ abstract mixin class _$DnsCopyWith<$Res> implements $DnsCopyWith<$Res> { factory _$DnsCopyWith(_Dns value, $Res Function(_Dns) _then) = __$DnsCopyWithImpl; @override @useResult $Res call({ - bool enable, String listen,@JsonKey(name: 'prefer-h3') bool preferH3,@JsonKey(name: 'use-hosts') bool useHosts,@JsonKey(name: 'use-system-hosts') bool useSystemHosts,@JsonKey(name: 'respect-rules') bool respectRules, bool ipv6,@JsonKey(name: 'default-nameserver') List defaultNameserver,@JsonKey(name: 'enhanced-mode') DnsMode enhancedMode,@JsonKey(name: 'fake-ip-range') String fakeIpRange,@JsonKey(name: 'fake-ip-filter') List fakeIpFilter,@JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver, List fallback,@JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver,@JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter + bool enable, String listen,@JsonKey(name: 'prefer-h3') bool preferH3,@JsonKey(name: 'use-hosts') bool useHosts,@JsonKey(name: 'use-system-hosts') bool useSystemHosts,@JsonKey(name: 'respect-rules') bool respectRules, bool ipv6,@JsonKey(name: 'default-nameserver') List defaultNameserver,@JsonKey(name: 'enhanced-mode') DnsMode enhancedMode,@JsonKey(name: 'fake-ip-range') String fakeIpRange,@JsonKey(name: 'fake-ip-filter') List fakeIpFilter,@JsonKey(name: 'nameserver-policy') Map nameserverPolicy, List nameserver,@JsonKey(name: 'direct-nameserver', includeIfNull: false) List? directNameserver, List fallback,@JsonKey(name: 'proxy-server-nameserver') List proxyServerNameserver,@JsonKey(name: 'fallback-filter') FallbackFilter fallbackFilter }); @@ -2968,7 +2978,7 @@ class __$DnsCopyWithImpl<$Res> /// Create a copy of Dns /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? enable = null,Object? listen = null,Object? preferH3 = null,Object? useHosts = null,Object? useSystemHosts = null,Object? respectRules = null,Object? ipv6 = null,Object? defaultNameserver = null,Object? enhancedMode = null,Object? fakeIpRange = null,Object? fakeIpFilter = null,Object? nameserverPolicy = null,Object? nameserver = null,Object? fallback = null,Object? proxyServerNameserver = null,Object? fallbackFilter = null,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? enable = null,Object? listen = null,Object? preferH3 = null,Object? useHosts = null,Object? useSystemHosts = null,Object? respectRules = null,Object? ipv6 = null,Object? defaultNameserver = null,Object? enhancedMode = null,Object? fakeIpRange = null,Object? fakeIpFilter = null,Object? nameserverPolicy = null,Object? nameserver = null,Object? directNameserver = freezed,Object? fallback = null,Object? proxyServerNameserver = null,Object? fallbackFilter = null,}) { return _then(_Dns( enable: null == enable ? _self.enable : enable // ignore: cast_nullable_to_non_nullable as bool,listen: null == listen ? _self.listen : listen // ignore: cast_nullable_to_non_nullable @@ -2983,7 +2993,8 @@ as DnsMode,fakeIpRange: null == fakeIpRange ? _self.fakeIpRange : fakeIpRange // as String,fakeIpFilter: null == fakeIpFilter ? _self._fakeIpFilter : fakeIpFilter // ignore: cast_nullable_to_non_nullable as List,nameserverPolicy: null == nameserverPolicy ? _self._nameserverPolicy : nameserverPolicy // ignore: cast_nullable_to_non_nullable as Map,nameserver: null == nameserver ? _self._nameserver : nameserver // ignore: cast_nullable_to_non_nullable -as List,fallback: null == fallback ? _self._fallback : fallback // ignore: cast_nullable_to_non_nullable +as List,directNameserver: freezed == directNameserver ? _self._directNameserver : directNameserver // ignore: cast_nullable_to_non_nullable +as List?,fallback: null == fallback ? _self._fallback : fallback // ignore: cast_nullable_to_non_nullable as List,proxyServerNameserver: null == proxyServerNameserver ? _self._proxyServerNameserver : proxyServerNameserver // ignore: cast_nullable_to_non_nullable as List,fallbackFilter: null == fallbackFilter ? _self.fallbackFilter : fallbackFilter // ignore: cast_nullable_to_non_nullable as FallbackFilter, diff --git a/lib/models/generated/clash_config.g.dart b/lib/models/generated/clash_config.g.dart index 2ee0f851..3690fcd9 100644 --- a/lib/models/generated/clash_config.g.dart +++ b/lib/models/generated/clash_config.g.dart @@ -256,6 +256,9 @@ _Dns _$DnsFromJson(Map json) => _Dns( ?.map((e) => e as String) .toList() ?? const ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'], + directNameserver: (json['direct-nameserver'] as List?) + ?.map((e) => e as String) + .toList(), fallback: (json['fallback'] as List?)?.map((e) => e as String).toList() ?? const ['tls://8.8.4.4', 'tls://1.1.1.1'], @@ -285,6 +288,7 @@ Map _$DnsToJson(_Dns instance) => { 'fake-ip-filter': instance.fakeIpFilter, 'nameserver-policy': instance.nameserverPolicy, 'nameserver': instance.nameserver, + 'direct-nameserver': ?instance.directNameserver, 'fallback': instance.fallback, 'proxy-server-nameserver': instance.proxyServerNameserver, 'fallback-filter': instance.fallbackFilter, diff --git a/test/common/task_test.dart b/test/common/task_test.dart index 6e6f488c..7c5aaec4 100644 --- a/test/common/task_test.dart +++ b/test/common/task_test.dart @@ -377,4 +377,53 @@ void main() { expect(urls['geoip'], defaultGeoXUrl[GeoResource.GEOIP]); expect(urls['geosite'], defaultGeoXUrl[GeoResource.GEOSITE]); }); + + test('DNS override preserves direct nameservers', () async { + final profile = await makeRealProfileTask( + const MakeRealProfileState( + profilesPath: '/tmp/flclash-direct-nameserver-test', + profileId: 12, + rawConfig: { + 'dns': { + 'enable': true, + 'direct-nameserver': ['223.5.5.5', '119.29.29.29'], + }, + }, + realPatchConfig: PatchClashConfig( + dns: Dns(directNameserver: ['223.5.5.5', '119.29.29.29']), + ), + overrideDns: true, + appendSystemDns: false, + proxyGroups: [], + rules: [], + addedRules: [], + defaultUA: 'FlClash-Test', + ), + ); + + expect(profile.a, contains('direct-nameserver:')); + expect(profile.a, contains('- "223.5.5.5"')); + expect(profile.a, contains('- "119.29.29.29"')); + }); + + test('DNS override does not add an unset direct nameserver', () async { + final profile = await makeRealProfileTask( + const MakeRealProfileState( + profilesPath: '/tmp/flclash-direct-nameserver-test', + profileId: 13, + rawConfig: { + 'dns': {'enable': true}, + }, + realPatchConfig: PatchClashConfig(), + overrideDns: true, + appendSystemDns: false, + proxyGroups: [], + rules: [], + addedRules: [], + defaultUA: 'FlClash-Test', + ), + ); + + expect(profile.a, isNot(contains('direct-nameserver:'))); + }); }