From 95ac046a095bf00f53d61f28d03bc7fbb6a3b44e Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 23 Jul 2023 18:37:37 -0400 Subject: [PATCH] Simplifying relay connection status --- .../vitorpamplona/amethyst/model/Account.kt | 1 - .../amethyst/service/relays/RelayPool.kt | 2 +- .../amethyst/ui/navigation/DrawerContent.kt | 26 ++++++------------- .../amethyst/ui/screen/RelayPoolViewModel.kt | 15 ++++++----- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index e566f64c1..430f0a16c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -7,7 +7,6 @@ import androidx.compose.runtime.Stable import androidx.core.os.ConfigurationCompat import androidx.lifecycle.LiveData import androidx.lifecycle.distinctUntilChanged -import androidx.lifecycle.map import com.vitorpamplona.amethyst.OptOutFromFilters import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.NostrLnZapPaymentResponseDataSource diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt index e42293631..d2562529f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt @@ -24,7 +24,7 @@ object RelayPool : Relay.Listener { } fun connectedRelays(): Int { - return relays.filter { it.isConnected() }.size + return relays.count { it.isConnected() } } fun getRelay(url: String): Relay? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt index 6ee8194a0..5995d5ec4 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/DrawerContent.kt @@ -34,7 +34,6 @@ import androidx.compose.material.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf @@ -53,6 +52,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage import com.vitorpamplona.amethyst.BuildConfig @@ -296,8 +296,10 @@ fun ListContent( modifier: Modifier, accountViewModel: AccountViewModel ) { - val accountState by accountViewModel.accountLiveData.observeAsState() - val account = remember(accountState) { accountState?.account } ?: return + val route = remember(accountViewModel) { + "User/${accountViewModel.userProfile().pubkeyHex}" + } + val coroutineScope = rememberCoroutineScope() val relayViewModel: RelayPoolViewModel = viewModel { RelayPoolViewModel() } var wantsToEditRelays by remember { @@ -322,7 +324,7 @@ fun ListContent( tint = MaterialTheme.colors.primary, nav = nav, scaffoldState = scaffoldState, - route = "User/${account.userProfile().pubkeyHex}" + route = route ) NavigationRow( @@ -481,20 +483,8 @@ private fun enableTor( private fun RelayStatus( relayViewModel: RelayPoolViewModel ) { - val connectedRelaysLiveData = relayViewModel.connectedRelaysLiveData.observeAsState() - val availableRelaysLiveData = relayViewModel.availableRelaysLiveData.observeAsState() - - val connectedRelaysText by remember(connectedRelaysLiveData, availableRelaysLiveData) { - derivedStateOf { - "${connectedRelaysLiveData.value ?: "--"}/${availableRelaysLiveData.value ?: "--"}" - } - } - - val isConnected by remember(connectedRelaysLiveData) { - derivedStateOf { - (connectedRelaysLiveData.value ?: 0) > 0 - } - } + val connectedRelaysText by relayViewModel.connectionStatus.observeAsState("--/--") + val isConnected by relayViewModel.isConnected.distinctUntilChanged().observeAsState(false) RenderRelayStatus(connectedRelaysText, isConnected) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayPoolViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayPoolViewModel.kt index 36606456c..b33637b3f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayPoolViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/RelayPoolViewModel.kt @@ -1,15 +1,18 @@ package com.vitorpamplona.amethyst.ui.screen -import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.map import com.vitorpamplona.amethyst.service.relays.RelayPool class RelayPoolViewModel : ViewModel() { - val connectedRelaysLiveData: LiveData = RelayPool.live.map { - it.relays.connectedRelays() - } - val availableRelaysLiveData: LiveData = RelayPool.live.map { - it.relays.availableRelays() + val connectionStatus = RelayPool.live.map { + val connectedRelays = it.relays.connectedRelays() + val availableRelays = it.relays.availableRelays() + "$connectedRelays/$availableRelays" + }.distinctUntilChanged() + + val isConnected = RelayPool.live.map { + it.relays.connectedRelays() > 0 } }