Fix crash in flowWithResourceIn() (#933)

This commit is contained in:
Mikołaj Pich 2020-09-01 09:31:01 +02:00 committed by GitHub
parent a5de39a366
commit eb616eedc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 8 deletions

View File

@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.onEach
import timber.log.Timber
import java.lang.NullPointerException
import java.time.LocalDate
import java.time.LocalDate.now
import java.time.LocalDate.of

View File

@ -3,6 +3,7 @@ package io.github.wulkanowy.utils
import io.github.wulkanowy.data.Resource
import io.github.wulkanowy.data.Status
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.filter
@ -69,22 +70,24 @@ inline fun <ResultType, RequestType, T> networkBoundResource(
fun <T> flowWithResource(block: suspend () -> T) = flow {
emit(Resource.loading())
try {
emit(Resource.success(block()))
emit(try {
Resource.success(block())
} catch (e: Throwable) {
emit(Resource.error(e))
}
Resource.error(e)
})
}
fun <T> flowWithResourceIn(block: suspend () -> Flow<Resource<T>>) = flow {
emit(Resource.loading())
try {
block().collect {
if (it.status != Status.LOADING) { // LOADING is already emitted
emit(it)
block()
.catch { emit(Resource.error(it)) }
.collect {
if (it.status != Status.LOADING) { // LOADING is already emitted
emit(it)
}
}
}
} catch (e: Throwable) {
emit(Resource.error(e))
}