Fixes lack of feed updates for those that didn't follow any communities

This commit is contained in:
Vitor Pamplona
2025-08-21 20:11:44 -04:00
parent 499316687f
commit 1f2a153f47
5 changed files with 23 additions and 6 deletions

View File

@@ -70,7 +70,12 @@ class OutboxRelaySetState(
usersToLoad usersToLoad
.transformLatest { followList -> .transformLatest { followList ->
val flows: List<StateFlow<NoteState>> = allRelayListFlows(followList) val flows: List<StateFlow<NoteState>> = allRelayListFlows(followList)
val relayListFlows = combineAllFlows(flows) val relayListFlows =
if (flows.isEmpty()) {
MutableStateFlow(emptySet())
} else {
combineAllFlows(flows)
}
emitAll(relayListFlows) emitAll(relayListFlows)
}.onStart { }.onStart {
emit( emit(

View File

@@ -27,6 +27,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip72ModCommunities.definition.CommunityDefinitionEvent import com.vitorpamplona.quartz.nip72ModCommunities.definition.CommunityDefinitionEvent
import com.vitorpamplona.quartz.utils.mapOfSet import com.vitorpamplona.quartz.utils.mapOfSet
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
class CommunityRelayLoader { class CommunityRelayLoader {
@@ -81,8 +82,12 @@ class CommunityRelayLoader {
?.stateFlow ?.stateFlow
} }
return combine(noteMetadataFlows) { communityNotes -> return if (noteMetadataFlows.isEmpty()) {
transformation(communitiesPerRelay(communityNotes, cache)) MutableStateFlow(transformation(emptyMap()))
} else {
combine(noteMetadataFlows) { communityNotes ->
transformation(communitiesPerRelay(communityNotes, cache))
}
} }
} }
} }

View File

@@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip65RelayList.AdvertisedRelayListEvent import com.vitorpamplona.quartz.nip65RelayList.AdvertisedRelayListEvent
import com.vitorpamplona.quartz.utils.mapOfSet import com.vitorpamplona.quartz.utils.mapOfSet
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
class OutboxRelayLoader { class OutboxRelayLoader {
@@ -86,8 +87,12 @@ class OutboxRelayLoader {
note.flow().metadata.stateFlow note.flow().metadata.stateFlow
} }
return combine(noteMetadataFlows) { outboxRelays -> return if (noteMetadataFlows.isEmpty()) {
transformation(authorsPerRelay(outboxRelays, cache)) MutableStateFlow(transformation(emptyMap()))
} else {
combine(noteMetadataFlows) { outboxRelays ->
transformation(authorsPerRelay(outboxRelays, cache))
}
} }
} }
} }

View File

@@ -86,6 +86,7 @@ class AllFollowsByOutboxTopNavFilter(
} else { } else {
MutableStateFlow(emptyMap()) MutableStateFlow(emptyMap())
} }
val communitiesPerRelay = val communitiesPerRelay =
if (communities != null) { if (communities != null) {
CommunityRelayLoader.toCommunitiesPerRelayFlow(communities, cache) { it } CommunityRelayLoader.toCommunitiesPerRelayFlow(communities, cache) { it }
@@ -116,6 +117,7 @@ class AllFollowsByOutboxTopNavFilter(
} else { } else {
emptyMap() emptyMap()
} }
val communitiesPerRelay = val communitiesPerRelay =
if (communities != null) { if (communities != null) {
CommunityRelayLoader.communitiesPerRelaySnapshot(communities, cache) { it } CommunityRelayLoader.communitiesPerRelaySnapshot(communities, cache) { it }

View File

@@ -222,7 +222,7 @@ class AccountViewModel(
} }
} }
if (flows != null) { if (!flows.isNullOrEmpty()) {
combine(flows) { combine(flows) {
it.any { it } it.any { it }
} }