JJ_MKVMaker/lib/app/settings/network_settings.dart

44 lines
1.9 KiB
Dart

import '../../core/dns_resolver.dart';
import 'settings_group.dart';
/// 약속 (설정 A): 환경 설정 > 네트워크 · DNS (사용자 요청 10/10) - 자기 키 (이름 · 처음 값 · 읽기 · 쓰기) 를 스스로 갖는다.
/// 설정 하나를 더할 때는 이 파일만 고친다. 저장 파일의 키 이름은 예전 그대로 (평평한 키)
class NetworkSettings implements SettingsGroup {
/// 'system' 기기 DNS (끄기) · 'custom' 직접 지정 (기본) · 'doh' DNS over HTTPS
String mode = DnsConfig.defaultMode;
String primary = DnsConfig.defaultPrimary;
String secondary = DnsConfig.defaultSecondary;
String dohUrl = DnsConfig.defaultDohUrl;
DnsConfig get config => DnsConfig(mode: mode, primary: primary, secondary: secondary, dohUrl: dohUrl);
@override
void write(Map<String, Object?> j, {required bool plainSecrets}) {
j['dnsMode'] = mode;
j['dnsPrimary'] = primary;
j['dnsSecondary'] = secondary;
j['dnsDohUrl'] = dohUrl;
}
@override
void read(Map<String, dynamic> j) {
// 값이 없거나 틀리면 처음 값 (사용자가 정한 기본: 직접 지정 8.8.8.8 · 8.8.4.4). 보조는 비워 둘 수 있다
mode = DnsConfig.modes.contains(j['dnsMode']) ? j['dnsMode'] as String : DnsConfig.defaultMode;
primary = j['dnsPrimary'] is String && parseDnsServer(j['dnsPrimary'] as String) != null
? (j['dnsPrimary'] as String).trim()
: DnsConfig.defaultPrimary;
secondary = j['dnsSecondary'] is String
? (parseDnsServer(j['dnsSecondary'] as String) != null || (j['dnsSecondary'] as String).trim().isEmpty
? (j['dnsSecondary'] as String).trim()
: DnsConfig.defaultSecondary)
: DnsConfig.defaultSecondary;
dohUrl = j['dnsDohUrl'] is String && isValidDohUrl(j['dnsDohUrl'] as String)
? (j['dnsDohUrl'] as String).trim()
: DnsConfig.defaultDohUrl;
}
}