Just use simple List. Remove explicit dispatcher calls in unneeded places.
This commit is contained in:
+2
-3
@@ -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}")
|
||||||
|
|||||||
+7
-11
@@ -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 ->
|
||||||
|
|||||||
+1
-4
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user