diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSync.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSync.kt index a03e6d619..fe2efdfe1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSync.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/eventsync/EventSync.kt @@ -155,11 +155,21 @@ class EventSync( val inboxTargets: Map = emptyMap(), val dmTargets: Map = emptyMap(), ) { - companion object { - val DefaultOrder = compareByDescending { it.eventsFound.value }.thenByDescending { it.status.value == ConnectionStatus.Completed } - } + val sortedCompletedRelays = + completedRelays.values.let { + // precompute to avoid: Comparison method violates its general contract - val sortedCompletedRelays = completedRelays.values.sortedWith(DefaultOrder) + val orderCacheEventsFound = it.associateWith { it.eventsFound.value } + val orderCacheCompleted = it.associateWith { it.status.value == ConnectionStatus.Completed } + val orderComparator = + compareByDescending { + orderCacheEventsFound[it] + }.thenByDescending { + orderCacheCompleted[it] + } + + it.sortedWith(orderComparator) + } constructor( runningRelays: List,