From 4483a85df27c65b6833634ac1752dad7cc52a9f5 Mon Sep 17 00:00:00 2001 From: armv9 <48624112+arm64v8a@users.noreply.github.com> Date: Sun, 23 Feb 2025 19:35:41 +0900 Subject: [PATCH] Subscription: parse sing-box outbound --- .../nekohasekai/sagernet/group/RawUpdater.kt | 22 ++++++++++++++++--- .../main/java/moe/matsuri/nb4a/Protocols.kt | 4 ++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt index 02041af..e2d0f72 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt @@ -760,9 +760,25 @@ object RawUpdater : GroupUpdater() { } json.has("outbounds") -> { - return listOf(ConfigBean().applyDefaultValues().apply { - config = json.toStringPretty() - }) + return json.getJSONArray("outbounds") + .filterIsInstance() + .mapNotNull { + val ty = it.getStr("type") + if (ty == null || ty == "" || + ty == "dns" || ty == "block" || ty == "direct" || ty == "selector" || ty == "urltest" + ) { + null + } else { + it + } + }.map { + ConfigBean().apply { + applyDefaultValues() + type = 1 + config = it.toStringPretty() + name = it.getStr("tag") + } + } } json.has("server") && json.has("server_port") -> { diff --git a/app/src/main/java/moe/matsuri/nb4a/Protocols.kt b/app/src/main/java/moe/matsuri/nb4a/Protocols.kt index 2bbafbf..e280d6f 100644 --- a/app/src/main/java/moe/matsuri/nb4a/Protocols.kt +++ b/app/src/main/java/moe/matsuri/nb4a/Protocols.kt @@ -6,6 +6,7 @@ import io.nekohasekai.sagernet.database.ProxyEntity.Companion.TYPE_NEKO import io.nekohasekai.sagernet.fmt.AbstractBean import io.nekohasekai.sagernet.ktx.app import io.nekohasekai.sagernet.ktx.getColorAttr +import moe.matsuri.nb4a.proxy.config.ConfigBean // Settings for all protocols, built-in or plugin object Protocols { @@ -17,6 +18,9 @@ object Protocols { ) { fun hash(): String { + if (bean is ConfigBean) { + return bean.config + } return bean.serverAddress + bean.serverPort + type }