From 1a36218c8034b1629f150218b103edeb3516eac4 Mon Sep 17 00:00:00 2001
From: kr328 <kr328app@outlook.com>
Date: Mon, 24 May 2021 12:04:40 +0800
Subject: [PATCH] Feature: add nameserver-policy override

---
 .../kr328/clash/core/model/ConfigurationOverride.kt   |  5 ++++-
 .../kr328/clash/design/OverrideSettingsDesign.kt      |  9 +++++++++
 design/src/main/res/values-zh-rHK/strings.xml         |  3 +++
 design/src/main/res/values-zh-rTW/strings.xml         |  3 +++
 design/src/main/res/values-zh/strings.xml             |  1 +
 design/src/main/res/values/strings.xml                |  1 +
 .../kr328/clash/design/OverrideSettingsDesign.kt      | 11 ++++++++++-
 7 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt b/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
index 6332ce35..8d384067 100644
--- a/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
+++ b/core/src/main/java/com/github/kr328/clash/core/model/ConfigurationOverride.kt
@@ -80,7 +80,10 @@ data class ConfigurationOverride(
         var fakeIpFilter: List<String>? = null,
 
         @SerialName("fallback-filter")
-        val fallbackFilter: DnsFallbackFilter = DnsFallbackFilter()
+        val fallbackFilter: DnsFallbackFilter = DnsFallbackFilter(),
+
+        @SerialName("nameserver-policy")
+        var nameserverPolicy: Map<String, String>? = null,
     )
 
     @Serializable
diff --git a/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt b/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
index 4df91153..80c2a92e 100644
--- a/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
+++ b/design/src/foss/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
@@ -378,6 +378,15 @@ class OverrideSettingsDesign(
                 configure = dnsDependencies::add,
             )
 
+            editableTextMap(
+                value = configuration.dns::nameserverPolicy,
+                keyAdapter = TextAdapter.String,
+                valueAdapter = TextAdapter.String,
+                title = R.string.name_server_policy,
+                placeholder = R.string.dont_modify,
+                configure = dnsDependencies::add,
+            )
+
             dns.listener?.onChanged()
         }
 
diff --git a/design/src/main/res/values-zh-rHK/strings.xml b/design/src/main/res/values-zh-rHK/strings.xml
index b5e420bb..26686598 100644
--- a/design/src/main/res/values-zh-rHK/strings.xml
+++ b/design/src/main/res/values-zh-rHK/strings.xml
@@ -208,4 +208,7 @@
     <string name="active_unsaved_tips">配置文件需要在激活之前保存</string>
     <string name="mode_switch_tips">僅在本次會話中有效</string>
     <string name="import_">å°Žå…¥</string>
+    <string name="sources">源代碼</string>
+    <string name="clash_core">Clash 核心</string>
+    <string name="name_server_policy">Name Server ç­–ç•¥</string>
 </resources>
\ No newline at end of file
diff --git a/design/src/main/res/values-zh-rTW/strings.xml b/design/src/main/res/values-zh-rTW/strings.xml
index e91dda22..eb7b62e4 100644
--- a/design/src/main/res/values-zh-rTW/strings.xml
+++ b/design/src/main/res/values-zh-rTW/strings.xml
@@ -208,4 +208,7 @@
     <string name="active_unsaved_tips">配置文件需要在激活之前保存</string>
     <string name="mode_switch_tips">僅在本次會話中有效</string>
     <string name="import_">å°Žå…¥</string>
+    <string name="sources">源代碼</string>
+    <string name="clash_core">Clash 核心</string>
+    <string name="name_server_policy">Name Server ç­–ç•¥</string>
 </resources>
\ No newline at end of file
diff --git a/design/src/main/res/values-zh/strings.xml b/design/src/main/res/values-zh/strings.xml
index cfdbb80a..9bddcbae 100644
--- a/design/src/main/res/values-zh/strings.xml
+++ b/design/src/main/res/values-zh/strings.xml
@@ -210,4 +210,5 @@
     <string name="import_">导入</string>
     <string name="sources">源代码</string>
     <string name="clash_core">Clash 核心</string>
+    <string name="name_server_policy">Name Server ç­–ç•¥</string>
 </resources>
\ No newline at end of file
diff --git a/design/src/main/res/values/strings.xml b/design/src/main/res/values/strings.xml
index 045856e8..b2c71329 100644
--- a/design/src/main/res/values/strings.xml
+++ b/design/src/main/res/values/strings.xml
@@ -159,6 +159,7 @@
     <string name="geoip_fallback">GeoIP Fallback</string>
     <string name="ipcidr_fallback">IPCIDR Fallback</string>
     <string name="domain_fallback">Domain Fallback</string>
+    <string name="name_server_policy">Name Server Policy</string>
 
     <string name="dont_modify">Do not modify</string>
     <string name="empty">Empty</string>
diff --git a/design/src/premium/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt b/design/src/premium/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
index 6850917d..95e2ce0c 100644
--- a/design/src/premium/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
+++ b/design/src/premium/java/com/github/kr328/clash/design/OverrideSettingsDesign.kt
@@ -379,6 +379,15 @@ class OverrideSettingsDesign(
                 placeholder = R.string.dont_modify,
                 configure = dnsDependencies::add,
             )
+            
+            editableTextMap(
+                value = configuration.dns::nameserverPolicy,
+                keyAdapter = TextAdapter.String,
+                valueAdapter = TextAdapter.String,
+                title = R.string.name_server_policy,
+                placeholder = R.string.dont_modify,
+                configure = dnsDependencies::add,
+            )
 
             dns.listener?.onChanged()
         }
@@ -389,4 +398,4 @@ class OverrideSettingsDesign(
     fun requestClear() {
         requests.offer(Request.ResetOverride)
     }
-}
\ No newline at end of file
+}
-- 
GitLab