Make MigrateSourceState similar to MigrateState (#7054)

This commit is contained in:
FourTOne5 2022-05-02 08:35:34 +06:00 committed by GitHub
parent bd45bf7407
commit aef1dc6eaf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 24 deletions

View File

@ -26,6 +26,7 @@ import eu.kanade.presentation.source.components.BaseSourceItem
import eu.kanade.presentation.theme.header import eu.kanade.presentation.theme.header
import eu.kanade.presentation.util.horizontalPadding import eu.kanade.presentation.util.horizontalPadding
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrateSourceState
import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrationSourcesPresenter import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrationSourcesPresenter
@Composable @Composable
@ -36,19 +37,18 @@ fun MigrateSourceScreen(
onLongClickItem: (Source) -> Unit, onLongClickItem: (Source) -> Unit,
) { ) {
val state by presenter.state.collectAsState() val state by presenter.state.collectAsState()
when { when (state) {
state.isLoading -> LoadingScreen() is MigrateSourceState.Loading -> LoadingScreen()
state.isEmpty -> EmptyScreen(textResource = R.string.information_empty_library) is MigrateSourceState.Error -> Text(text = (state as MigrateSourceState.Error).error.message!!)
else -> { is MigrateSourceState.Success ->
MigrateSourceList( MigrateSourceList(
nestedScrollInterop = nestedScrollInterop, nestedScrollInterop = nestedScrollInterop,
list = state.sources!!, list = (state as MigrateSourceState.Success).sources,
onClickItem = onClickItem, onClickItem = onClickItem,
onLongClickItem = onLongClickItem, onLongClickItem = onLongClickItem,
) )
} }
} }
}
@Composable @Composable
fun MigrateSourceList( fun MigrateSourceList(
@ -57,6 +57,11 @@ fun MigrateSourceList(
onClickItem: (Source) -> Unit, onClickItem: (Source) -> Unit,
onLongClickItem: (Source) -> Unit, onLongClickItem: (Source) -> Unit,
) { ) {
if (list.isEmpty()) {
EmptyScreen(textResource = R.string.information_empty_library)
return
}
LazyColumn( LazyColumn(
modifier = Modifier.nestedScroll(nestedScrollInterop), modifier = Modifier.nestedScroll(nestedScrollInterop),
contentPadding = WindowInsets.navigationBars.asPaddingValues(), contentPadding = WindowInsets.navigationBars.asPaddingValues(),

View File

@ -9,8 +9,8 @@ import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.update
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
@ -19,7 +19,7 @@ class MigrationSourcesPresenter(
private val setMigrateSorting: SetMigrateSorting = Injekt.get() private val setMigrateSorting: SetMigrateSorting = Injekt.get()
) : BasePresenter<MigrationSourcesController>() { ) : BasePresenter<MigrationSourcesController>() {
private val _state: MutableStateFlow<MigrateSourceState> = MutableStateFlow(MigrateSourceState.EMPTY) private val _state: MutableStateFlow<MigrateSourceState> = MutableStateFlow(MigrateSourceState.Loading)
val state: StateFlow<MigrateSourceState> = _state.asStateFlow() val state: StateFlow<MigrateSourceState> = _state.asStateFlow()
override fun onCreate(savedState: Bundle?) { override fun onCreate(savedState: Bundle?) {
@ -27,10 +27,11 @@ class MigrationSourcesPresenter(
presenterScope.launchIO { presenterScope.launchIO {
getSourcesWithFavoriteCount.subscribe() getSourcesWithFavoriteCount.subscribe()
.collectLatest { sources -> .catch { exception ->
_state.update { state -> _state.emit(MigrateSourceState.Error(exception))
state.copy(sources = sources)
} }
.collectLatest { sources ->
_state.emit(MigrateSourceState.Success(sources))
} }
} }
} }
@ -44,17 +45,8 @@ class MigrationSourcesPresenter(
} }
} }
data class MigrateSourceState( sealed class MigrateSourceState {
val sources: List<Pair<Source, Long>>? object Loading : MigrateSourceState()
) { data class Error(val error: Throwable) : MigrateSourceState()
data class Success(val sources: List<Pair<Source, Long>>) : MigrateSourceState()
val isLoading: Boolean
get() = sources == null
val isEmpty: Boolean
get() = sources.isNullOrEmpty()
companion object {
val EMPTY = MigrateSourceState(null)
}
} }