From 28e4c16839172d7fe9c3efcc6582879f8668e04a Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Mon, 10 Apr 2023 09:41:57 +0900 Subject: [PATCH] auto bypass domain of ConfigBean --- .../nekohasekai/sagernet/fmt/ConfigBuilder.kt | 7 +++++++ .../java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt | 12 ++++++++++++ .../nb4a/proxy/config/ConfigSettingActivity.kt | 17 +++-------------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt index 705b53a..fe983a6 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -654,6 +654,13 @@ fun buildConfig( if (it is HysteriaBean && it.isMultiPort()) { serverAddr = it.serverAddress.substringBeforeLast(":") } + if (it is ConfigBean) { + var config = mutableMapOf() + config = gson.fromJson(it.config, config.javaClass) + config["server"]?.apply { + serverAddr = toString() + } + } if (!serverAddr.isIpAddress()) { domainListDNSDirectForce.add("full:${serverAddr}") diff --git a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt index 1be2a4b..e4186d9 100644 --- a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt +++ b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt @@ -34,6 +34,11 @@ fun SingBoxOptions.DNSRule_DefaultOptions.makeSingBoxRule(list: List) { domain.plusAssign(it.lowercase()) } } + geosite?.removeIf { it.isNullOrBlank() } + domain?.removeIf { it.isNullOrBlank() } + domain_suffix?.removeIf { it.isNullOrBlank() } + domain_regex?.removeIf { it.isNullOrBlank() } + domain_keyword?.removeIf { it.isNullOrBlank() } if (geosite?.isEmpty() == true) geosite = null if (domain?.isEmpty() == true) domain = null if (domain_suffix?.isEmpty() == true) domain_suffix = null @@ -86,6 +91,13 @@ fun SingBoxOptions.Rule_DefaultOptions.makeSingBoxRule(list: List, isIP: domain.plusAssign(it.lowercase()) } } + ip_cidr?.removeIf { it.isNullOrBlank() } + geoip?.removeIf { it.isNullOrBlank() } + geosite?.removeIf { it.isNullOrBlank() } + domain?.removeIf { it.isNullOrBlank() } + domain_suffix?.removeIf { it.isNullOrBlank() } + domain_regex?.removeIf { it.isNullOrBlank() } + domain_keyword?.removeIf { it.isNullOrBlank() } if (ip_cidr?.isEmpty() == true) ip_cidr = null if (geoip?.isEmpty() == true) geoip = null if (geosite?.isEmpty() == true) geosite = null diff --git a/app/src/main/java/moe/matsuri/nb4a/proxy/config/ConfigSettingActivity.kt b/app/src/main/java/moe/matsuri/nb4a/proxy/config/ConfigSettingActivity.kt index 7c0472b..a380e8d 100644 --- a/app/src/main/java/moe/matsuri/nb4a/proxy/config/ConfigSettingActivity.kt +++ b/app/src/main/java/moe/matsuri/nb4a/proxy/config/ConfigSettingActivity.kt @@ -3,7 +3,6 @@ package moe.matsuri.nb4a.proxy.config import android.os.Bundle import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference import io.nekohasekai.sagernet.Key import io.nekohasekai.sagernet.R import io.nekohasekai.sagernet.database.DataStore @@ -15,36 +14,28 @@ class ConfigSettingActivity : ProfileSettingsActivity(), OnPreferenceDataStoreChangeListener { - private var beanType: Int = 0 + private val isOutboundOnlyKey = "isOutboundOnly" override fun createEntity() = ConfigBean() override fun ConfigBean.init() { // CustomBean to input - beanType = type + DataStore.profileCacheStore.putBoolean(isOutboundOnlyKey, type == 1) DataStore.profileName = name DataStore.serverConfig = config } override fun ConfigBean.serialize() { // CustomBean from input - type = beanType + type = if (DataStore.profileCacheStore.getBoolean(isOutboundOnlyKey, false)) 1 else 0 name = DataStore.profileName config = DataStore.serverConfig } - override fun onCreate(savedInstanceState: Bundle?) { - intent?.getIntExtra("type", 0)?.apply { beanType = this } - super.onCreate(savedInstanceState) - } - override fun onPreferenceDataStoreChanged(store: PreferenceDataStore, key: String) { if (key != Key.PROFILE_DIRTY) { DataStore.dirty = true } - if (key == "isOutboundOnly") { - beanType = if (store.getBoolean(key, false)) 1 else 0 - } } private lateinit var editConfigPreference: EditConfigPreference @@ -56,8 +47,6 @@ class ConfigSettingActivity : addPreferencesFromResource(R.xml.config_preferences) editConfigPreference = findPreference(Key.SERVER_CONFIG)!! - - findPreference("isOutboundOnly")!!.isChecked = beanType == 1 } override fun onResume() {