From 1f2a153f47dd66cc728bb2faec4d8d5f988a8c3b Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 21 Aug 2025 20:11:44 -0400 Subject: [PATCH] Fixes lack of feed updates for those that didn't follow any communities --- .../amethyst/model/nip65RelayList/OutboxRelaySetState.kt | 7 ++++++- .../amethyst/model/topNavFeeds/CommunityRelayLoader.kt | 9 +++++++-- .../amethyst/model/topNavFeeds/OutboxRelayLoader.kt | 9 +++++++-- .../allFollows/AllFollowsByOutboxTopNavFilter.kt | 2 ++ .../amethyst/ui/screen/loggedIn/AccountViewModel.kt | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/OutboxRelaySetState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/OutboxRelaySetState.kt index 8f37e8cf3..3d93db987 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/OutboxRelaySetState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/OutboxRelaySetState.kt @@ -70,7 +70,12 @@ class OutboxRelaySetState( usersToLoad .transformLatest { followList -> val flows: List> = allRelayListFlows(followList) - val relayListFlows = combineAllFlows(flows) + val relayListFlows = + if (flows.isEmpty()) { + MutableStateFlow(emptySet()) + } else { + combineAllFlows(flows) + } emitAll(relayListFlows) }.onStart { emit( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/CommunityRelayLoader.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/CommunityRelayLoader.kt index d4f4e44fe..16cf45525 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/CommunityRelayLoader.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/CommunityRelayLoader.kt @@ -27,6 +27,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import com.vitorpamplona.quartz.nip72ModCommunities.definition.CommunityDefinitionEvent import com.vitorpamplona.quartz.utils.mapOfSet import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine class CommunityRelayLoader { @@ -81,8 +82,12 @@ class CommunityRelayLoader { ?.stateFlow } - return combine(noteMetadataFlows) { communityNotes -> - transformation(communitiesPerRelay(communityNotes, cache)) + return if (noteMetadataFlows.isEmpty()) { + MutableStateFlow(transformation(emptyMap())) + } else { + combine(noteMetadataFlows) { communityNotes -> + transformation(communitiesPerRelay(communityNotes, cache)) + } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/OutboxRelayLoader.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/OutboxRelayLoader.kt index 26bee7d8e..692ae4cb4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/OutboxRelayLoader.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/OutboxRelayLoader.kt @@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl import com.vitorpamplona.quartz.nip65RelayList.AdvertisedRelayListEvent import com.vitorpamplona.quartz.utils.mapOfSet import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine class OutboxRelayLoader { @@ -86,8 +87,12 @@ class OutboxRelayLoader { note.flow().metadata.stateFlow } - return combine(noteMetadataFlows) { outboxRelays -> - transformation(authorsPerRelay(outboxRelays, cache)) + return if (noteMetadataFlows.isEmpty()) { + MutableStateFlow(transformation(emptyMap())) + } else { + combine(noteMetadataFlows) { outboxRelays -> + transformation(authorsPerRelay(outboxRelays, cache)) + } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/allFollows/AllFollowsByOutboxTopNavFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/allFollows/AllFollowsByOutboxTopNavFilter.kt index 38c4911e5..c3fd5f88b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/allFollows/AllFollowsByOutboxTopNavFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/topNavFeeds/allFollows/AllFollowsByOutboxTopNavFilter.kt @@ -86,6 +86,7 @@ class AllFollowsByOutboxTopNavFilter( } else { MutableStateFlow(emptyMap()) } + val communitiesPerRelay = if (communities != null) { CommunityRelayLoader.toCommunitiesPerRelayFlow(communities, cache) { it } @@ -116,6 +117,7 @@ class AllFollowsByOutboxTopNavFilter( } else { emptyMap() } + val communitiesPerRelay = if (communities != null) { CommunityRelayLoader.communitiesPerRelaySnapshot(communities, cache) { it } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index e45ac1efe..581500301 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -222,7 +222,7 @@ class AccountViewModel( } } - if (flows != null) { + if (!flows.isNullOrEmpty()) { combine(flows) { it.any { it } }