From 2d803e009c350ddb5cfa6cc2670547d83d9e6df5 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 29 May 2024 17:41:58 +0800 Subject: [PATCH] Bug fix https://github.com/2dust/v2rayNG/issues/3168 --- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 2 +- .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 10 ++++--- .../com/v2ray/ang/viewmodel/MainViewModel.kt | 29 +++++++++++++------ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index a7376498..27000dbb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -495,7 +495,7 @@ data class V2rayConfig( var poolSize: Int = 10000) // roughly 10 times smaller than total ip pool fun getProxyOutbound(): OutboundBean? { - outbounds.forEach { outbound -> + outbounds?.forEach { outbound -> EConfigType.entries.forEach { if (outbound.protocol.equals(it.name, true)) { return outbound diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 81b708c2..2f3aefea 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -629,16 +629,18 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList toast(R.string.toast_none_data) return } - mainViewModel.appendCustomConfigServer(server) - mainViewModel.reloadServerList() - toast(R.string.toast_success) + if (mainViewModel.appendCustomConfigServer(server)) { + mainViewModel.reloadServerList() + toast(R.string.toast_success) + } else { + toast(R.string.toast_failure) + } //adapter.notifyItemInserted(mainViewModel.serverList.lastIndex) } catch (e: Exception) { ToastCompat.makeText(this, "${getString(R.string.toast_malformed_josn)} ${e.cause?.message}", Toast.LENGTH_LONG).show() e.printStackTrace() return } - } fun setTestState(content: String?) { binding.tvTestState.text = content diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt index 8af4a1bf..08e4b5ea 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt @@ -110,15 +110,26 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } } - fun appendCustomConfigServer(server: String) { - val config = ServerConfig.create(EConfigType.CUSTOM) - config.subscriptionId = subscriptionId - config.fullConfig = Gson().fromJson(server, V2rayConfig::class.java) - config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString() - val key = MmkvManager.encodeServerConfig("", config) - serverRawStorage?.encode(key, server) - serverList.add(0, key) - serversCache.add(0, ServersCache(key, config)) + fun appendCustomConfigServer(server: String): Boolean { + if (server.contains("inbounds") + && server.contains("outbounds") + && server.contains("routing") + ) { + try { + val config = ServerConfig.create(EConfigType.CUSTOM) + config.subscriptionId = subscriptionId + config.fullConfig = Gson().fromJson(server, V2rayConfig::class.java) + config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString() + val key = MmkvManager.encodeServerConfig("", config) + serverRawStorage?.encode(key, server) + serverList.add(0, key) + serversCache.add(0, ServersCache(key, config)) + return true + } catch (e: Exception) { + e.printStackTrace() + } + } + return false } fun swapServer(fromPosition: Int, toPosition: Int) {