From b7fafa1bf9fc22c09c34d81193733b206abed8c9 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:33:07 +0800 Subject: [PATCH] Optimize MmkvManager --- .../com/v2ray/ang/util/AngConfigManager.kt | 19 +++++++++- .../kotlin/com/v2ray/ang/util/MmkvManager.kt | 35 ------------------- .../com/v2ray/ang/viewmodel/MainViewModel.kt | 17 ++++++++- 3 files changed, 34 insertions(+), 37 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 8e0d592f..87e3e74e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -15,6 +15,7 @@ import com.v2ray.ang.R import com.v2ray.ang.dto.* import com.v2ray.ang.util.MmkvManager.serverRawStorage import com.v2ray.ang.util.MmkvManager.settingsStorage +import com.v2ray.ang.util.MmkvManager.subStorage import com.v2ray.ang.util.fmt.ShadowsocksFmt import com.v2ray.ang.util.fmt.SocksFmt import com.v2ray.ang.util.fmt.TrojanFmt @@ -22,6 +23,7 @@ import com.v2ray.ang.util.fmt.VlessFmt import com.v2ray.ang.util.fmt.VmessFmt import com.v2ray.ang.util.fmt.WireguardFmt import java.lang.reflect.Type +import java.net.URI import java.util.* object AngConfigManager { @@ -397,7 +399,7 @@ object AngConfigManager { servers.lines() .forEach { str -> if (str.startsWith(AppConfig.PROTOCOL_HTTP) || str.startsWith(AppConfig.PROTOCOL_HTTPS)) { - count += MmkvManager.importUrlAsSubscription(str) + count += importUrlAsSubscription(str) } } return count @@ -577,4 +579,19 @@ object AngConfigManager { } return count } + + private fun importUrlAsSubscription(url: String): Int { + val subscriptions = MmkvManager.decodeSubscriptions() + subscriptions.forEach { + if (it.second.url == url) { + return 0 + } + } + val uri = URI(Utils.fixIllegalUrl(url)) + val subItem = SubscriptionItem() + subItem.remarks = uri.fragment ?: "import sub" + subItem.url = url + subStorage.encode(Utils.getUuid(), Gson().toJson(subItem)) + return 1 + } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/MmkvManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/MmkvManager.kt index 57ad0c9b..2215a2ba 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/MmkvManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/MmkvManager.kt @@ -7,7 +7,6 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.ServerAffiliationInfo import com.v2ray.ang.dto.ServerConfig import com.v2ray.ang.dto.SubscriptionItem -import java.net.URI object MmkvManager { private const val ID_MAIN = "MAIN" @@ -152,21 +151,6 @@ object MmkvManager { } } - fun importUrlAsSubscription(url: String): Int { - val subscriptions = decodeSubscriptions() - subscriptions.forEach { - if (it.second.url == url) { - return 0 - } - } - val uri = URI(Utils.fixIllegalUrl(url)) - val subItem = SubscriptionItem() - subItem.remarks = uri.fragment ?: "import sub" - subItem.url = url - subStorage.encode(Utils.getUuid(), Gson().toJson(subItem)) - return 1 - } - fun decodeSubscriptions(): List> { val subscriptions = mutableListOf>() subStorage.allKeys()?.forEach { key -> @@ -228,25 +212,6 @@ object MmkvManager { } } - fun sortByTestResults() { - data class ServerDelay(var guid: String, var testDelayMillis: Long) - - val serverDelays = mutableListOf() - val serverList = decodeServerList() - serverList.forEach { key -> - val delay = decodeServerAffiliationInfo(key)?.testDelayMillis ?: 0L - serverDelays.add(ServerDelay(key, if (delay <= 0L) 999999 else delay)) - } - serverDelays.sortBy { it.testDelayMillis } - - serverDelays.forEach { - serverList.remove(it.guid) - serverList.add(it.guid) - } - - encodeServerList(serverList) - } - fun getServerViaRemarks(remarks: String?): ServerConfig? { if (remarks == null) { return null 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 e4b9d7c4..fe9c692a 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 @@ -310,7 +310,22 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } fun sortByTestResults() { - MmkvManager.sortByTestResults() + data class ServerDelay(var guid: String, var testDelayMillis: Long) + + val serverDelays = mutableListOf() + val serverList = MmkvManager.decodeServerList() + serverList.forEach { key -> + val delay = MmkvManager.decodeServerAffiliationInfo(key)?.testDelayMillis ?: 0L + serverDelays.add(ServerDelay(key, if (delay <= 0L) 999999 else delay)) + } + serverDelays.sortBy { it.testDelayMillis } + + serverDelays.forEach { + serverList.remove(it.guid) + serverList.add(it.guid) + } + + MmkvManager.encodeServerList(serverList) }