diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeLiveActivitiesFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeLiveActivitiesFeedFilter.kt index 6f7aa642b..785e29f4d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeLiveActivitiesFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/HomeLiveActivitiesFeedFilter.kt @@ -13,7 +13,10 @@ import java.util.Date class HomeLiveActivitiesFeedFilter(val account: Account) : AdditiveFeedFilter() { override fun feedKey(): String { - return account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList + val followingKeySet = account.selectedUsersFollowList(account.defaultHomeFollowList)?.size ?: 0 + val followingTagSet = account.selectedTagsFollowList(account.defaultHomeFollowList)?.size ?: 0 + + return account.userProfile().pubkeyHex + "-" + account.defaultHomeFollowList + "-" + followingKeySet + "-" + followingTagSet } override fun feed(): List { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt index 9b677e6a4..c4de829a0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/HomeScreen.kt @@ -34,7 +34,10 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.NostrHomeDataSource +import com.vitorpamplona.amethyst.service.model.LiveActivitiesEvent +import com.vitorpamplona.amethyst.ui.dal.checkIfOnline import com.vitorpamplona.amethyst.ui.navigation.Route import com.vitorpamplona.amethyst.ui.note.UpdateZapAmountDialog import com.vitorpamplona.amethyst.ui.screen.FeedState @@ -65,7 +68,7 @@ fun HomeScreen( val pagerState = rememberForeverPagerState(key = PagerStateKeys.HOME_SCREEN) - WatchAccountForHomeScreen(homeFeedViewModel, repliesFeedViewModel, accountViewModel) + WatchAccountForHomeScreen(homeFeedViewModel, repliesFeedViewModel, liveActivitiesViewModel, accountViewModel) if (wantsToAddNip47 != null) { UpdateZapAmountDialog({ wantsToAddNip47 = null }, wantsToAddNip47, accountViewModel) @@ -190,38 +193,52 @@ private fun FeedLoaded( state = listState ) { itemsIndexed(state.feed.value, key = { _, item -> item.idHex }) { _, item -> - ChannelHeader( - channelHex = item.idHex, - showVideo = false, - showBottomDiviser = true, - modifier = Modifier.padding(start = 10.dp, end = 10.dp, bottom = 10.dp), - accountViewModel = accountViewModel, - nav = nav - ) + CheckIfOnline(item) { + ChannelHeader( + channelHex = item.idHex, + showVideo = false, + showBottomDiviser = true, + modifier = Modifier.padding(start = 10.dp, end = 10.dp, bottom = 10.dp), + accountViewModel = accountViewModel, + nav = nav + ) + } } } } +@Composable +fun CheckIfOnline(note: Note, whenOnline: @Composable () -> Unit) { + val noteState by note.live().metadata.observeAsState() + var online by remember { mutableStateOf(false) } + + LaunchedEffect(key1 = noteState) { + launch(Dispatchers.IO) { + online = checkIfOnline((note.event as? LiveActivitiesEvent)?.streaming()) + } + } + + if (online) { + whenOnline() + } +} + @Composable fun WatchAccountForHomeScreen( homeFeedViewModel: NostrHomeFeedViewModel, repliesFeedViewModel: NostrHomeRepliesFeedViewModel, + liveActivitiesViewModel: NostrHomeFeedLiveActivitiesViewModel, accountViewModel: AccountViewModel ) { val accountState by accountViewModel.accountLiveData.observeAsState() val followState by accountViewModel.account.userProfile().live().follows.observeAsState() - LaunchedEffect(accountViewModel, accountState?.account?.defaultHomeFollowList) { + LaunchedEffect(accountViewModel, accountState?.account?.defaultHomeFollowList, followState) { launch(Dispatchers.IO) { NostrHomeDataSource.invalidateFilters() homeFeedViewModel.checkKeysInvalidateDataAndSendToTop() repliesFeedViewModel.checkKeysInvalidateDataAndSendToTop() - } - } - - LaunchedEffect(followState) { - launch(Dispatchers.IO) { - NostrHomeDataSource.invalidateFilters() + liveActivitiesViewModel.checkKeysInvalidateDataAndSendToTop() } } }