Just use simple List. Remove explicit dispatcher calls in unneeded places.

This commit is contained in:
KotlinGeekDev
2025-01-30 14:50:05 +01:00
parent a300a4b25c
commit c2857664d3
3 changed files with 10 additions and 18 deletions
@@ -67,7 +67,6 @@ import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.FeedPadding import com.vitorpamplona.amethyst.ui.theme.FeedPadding
import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer
import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn
import kotlinx.collections.immutable.ImmutableList
@Composable @Composable
fun ListsScreen( fun ListsScreen(
@@ -134,7 +133,7 @@ fun CustomListsScreen(
followSetsViewModel.invalidateData() followSetsViewModel.invalidateData()
} }
is FollowSetState.Loaded -> { is FollowSetState.Loaded -> {
val followSetFeed by (setsState as FollowSetState.Loaded).feed val followSetFeed = (setsState as FollowSetState.Loaded).feed
FollowListLoaded( FollowListLoaded(
loadedFeedState = followSetFeed, loadedFeedState = followSetFeed,
) )
@@ -148,7 +147,7 @@ fun CustomListsScreen(
@Composable @Composable
fun FollowListLoaded( fun FollowListLoaded(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
loadedFeedState: ImmutableList<FollowSet>, loadedFeedState: List<FollowSet>,
) { ) {
val listState = rememberLazyListState() val listState = rememberLazyListState()
Log.d("FollowSetComposable", "FollowListLoaded: Follow Set size: ${loadedFeedState.size}") Log.d("FollowSetComposable", "FollowListLoaded: Follow Set size: ${loadedFeedState.size}")
@@ -50,7 +50,7 @@ open class FollowSetFeedViewModel(
val feedContent = _feedContent.asStateFlow() val feedContent = _feedContent.asStateFlow()
private fun refresh() { private fun refresh() {
viewModelScope.launch(Dispatchers.Default) { refreshSuspended() } viewModelScope.launch { refreshSuspended() }
} }
override val isRefreshing: MutableState<Boolean> = mutableStateOf(false) override val isRefreshing: MutableState<Boolean> = mutableStateOf(false)
@@ -66,7 +66,7 @@ open class FollowSetFeedViewModel(
val oldNotesState = _feedContent.value val oldNotesState = _feedContent.value
if (oldNotesState is FollowSetState.Loaded) { if (oldNotesState is FollowSetState.Loaded) {
// Using size as a proxy for has changed. // Using size as a proxy for has changed.
if (!equalImmutableLists(notes, oldNotesState.feed.value.toImmutableList())) { if (!equalImmutableLists(notes, oldNotesState.feed.toImmutableList())) {
updateFeed(notes) updateFeed(notes)
} }
} else { } else {
@@ -78,20 +78,16 @@ open class FollowSetFeedViewModel(
} }
private fun updateFeed(notes: ImmutableList<FollowSet>) { private fun updateFeed(notes: ImmutableList<FollowSet>) {
viewModelScope.launch(Dispatchers.Main) { viewModelScope.launch {
val currentState = _feedContent.value
if (notes.isEmpty()) { if (notes.isEmpty()) {
_feedContent.update { FollowSetState.Empty } _feedContent.update { FollowSetState.Empty }
} else if (currentState is FollowSetState.Loaded) {
// updates the current list
currentState.feed.value = notes
} else { } else {
_feedContent.update { FollowSetState.Loaded(mutableStateOf(notes)) } _feedContent.update { FollowSetState.Loaded(notes) }
} }
} }
} }
private val bundler = BundledUpdate(250, Dispatchers.IO) private val bundler = BundledUpdate(250)
override fun invalidateData(ignoreIfDoing: Boolean) { override fun invalidateData(ignoreIfDoing: Boolean) {
bundler.invalidate(ignoreIfDoing) { bundler.invalidate(ignoreIfDoing) {
@@ -104,9 +100,9 @@ open class FollowSetFeedViewModel(
var collectorJob: Job? = null var collectorJob: Job? = null
init { init {
Log.d("Init", "${this.javaClass.simpleName}") Log.d("Init", this.javaClass.simpleName)
collectorJob = collectorJob =
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.Default) {
checkNotInMainThread() checkNotInMainThread()
LocalCache.live.newEventBundles.collect { newNotes -> LocalCache.live.newEventBundles.collect { newNotes ->
@@ -20,14 +20,11 @@
*/ */
package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists
import androidx.compose.runtime.MutableState
import kotlinx.collections.immutable.ImmutableList
sealed class FollowSetState { sealed class FollowSetState {
data object Loading : FollowSetState() data object Loading : FollowSetState()
class Loaded( class Loaded(
val feed: MutableState<ImmutableList<FollowSet>>, val feed: List<FollowSet>,
) : FollowSetState() ) : FollowSetState()
object Empty : FollowSetState() object Empty : FollowSetState()