Ignore load errors if wasn't loading

This commit is contained in:
Kirill Kamakin
2022-11-05 11:32:17 +01:00
parent 39ce70f964
commit d873bfa2ed
3 changed files with 36 additions and 11 deletions

View File

@@ -8,9 +8,10 @@ import androidx.paging.cachedIn
import dagger.hilt.android.lifecycle.HiltViewModel
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.recipes.RecipeRepo
import gq.kirmanak.mealient.extensions.valueUpdatesOnly
import gq.kirmanak.mealient.logging.Logger
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.runningReduce
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
@HiltViewModel
@@ -26,12 +27,9 @@ class RecipeViewModel @Inject constructor(
val isAuthorized: LiveData<Boolean?> = _isAuthorized
init {
authRepo.isAuthorizedFlow.runningReduce { wasAuthorized, isAuthorized ->
logger.v { "Authorization state changed from $wasAuthorized to $isAuthorized" }
if (wasAuthorized != isAuthorized) {
_isAuthorized.postValue(isAuthorized)
}
isAuthorized
authRepo.isAuthorizedFlow.valueUpdatesOnly().onEach {
logger.v { "Authorization state changed to $it" }
_isAuthorized.postValue(it)
}.launchIn(viewModelScope)
}

View File

@@ -19,10 +19,14 @@ import gq.kirmanak.mealient.datasource.NetworkError
import gq.kirmanak.mealient.extensions.collectWhenViewResumed
import gq.kirmanak.mealient.extensions.refreshRequestFlow
import gq.kirmanak.mealient.extensions.showLongToast
import gq.kirmanak.mealient.extensions.valueUpdatesOnly
import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.ui.activity.MainActivityViewModel
import gq.kirmanak.mealient.ui.recipes.images.RecipePreloaderFactory
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.map
import javax.inject.Inject
@AndroidEntryPoint
@@ -133,7 +137,7 @@ private fun Throwable.toLoadErrorReasonText(): Int? = when (this) {
private fun <T : Any, VH : RecyclerView.ViewHolder> PagingDataAdapter<T, VH>.refreshErrors(): Flow<Throwable> {
return loadStateFlow
.map { it.refresh }
.distinctUntilChanged()
.valueUpdatesOnly()
.filterIsInstance<LoadState.Error>()
.map { it.error }
}
@@ -141,7 +145,7 @@ private fun <T : Any, VH : RecyclerView.ViewHolder> PagingDataAdapter<T, VH>.ref
private fun <T : Any, VH : RecyclerView.ViewHolder> PagingDataAdapter<T, VH>.appendPaginationEnd(): Flow<Unit> {
return loadStateFlow
.map { it.append.endOfPaginationReached }
.distinctUntilChanged()
.valueUpdatesOnly()
.filter { it }
.map { }
}
}