From fe4b451988482b201972b55fe0ea9c0a8c875b6a Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:06:20 +0800 Subject: [PATCH] Bug fix for sort --- .../com/v2ray/ang/viewmodel/MainViewModel.kt | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt index 668c5aef..303a31f1 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/MainViewModel.kt @@ -379,24 +379,36 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { * Sorts servers by their test results. */ fun sortByTestResults() { + if (subscriptionId.isEmpty()) { + val subscriptions = MmkvManager.decodeSubscriptions() + subscriptions.forEach { sub -> + sortByTestResultsForSub(sub.guid) + } + } else { + sortByTestResultsForSub(subscriptionId) + } + } + + /** + * Sorts servers by their test results for a specific subscription. + * @param subId The subscription ID to sort servers for. + */ + private fun sortByTestResultsForSub(subId: String) { data class ServerDelay(var guid: String, var testDelayMillis: Long) val serverDelays = mutableListOf() - // Use current subscription filter - val serverListToSort = MmkvManager.decodeServerList(subscriptionId) + val serverListToSort = MmkvManager.decodeServerList(subId) + serverListToSort.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) - } + val sortedServerList = serverDelays.map { it.guid }.toMutableList() - // Save to appropriate list based on subscriptionId - MmkvManager.encodeServerList(serverList, subscriptionId) + // Save the sorted list for this subscription + MmkvManager.encodeServerList(sortedServerList, subId) } /**