lawlorslaw
04/05/2022, 6:00 AMlocal.onErrorResumeNext { remote }
with coroutines?gildor
04/05/2022, 6:01 AMgildor
04/05/2022, 6:05 AMlawlorslaw
04/05/2022, 6:10 AMlawlorslaw
04/05/2022, 6:12 AMgildor
04/05/2022, 6:14 AMcatch { flowOf(remote) }
You need catch { emit(remote) }gildor
04/05/2022, 6:14 AMgildor
04/05/2022, 6:15 AM.catch { emit(coinRemoteDataSource.getCoins()) }
gildor
04/05/2022, 6:15 AMlawlorslaw
04/05/2022, 6:17 AMlawlorslaw
04/05/2022, 6:18 AMcoinLocalDataSource.getCoins()
suspend fun getCoins(): List<CoinEntity> {
return coinDao.getAllCoins()
}
lawlorslaw
04/05/2022, 6:19 AMcoinRemoteDataSource.getCoins()
suspend fun getCoins() : List<CoinResponse> {
return coinService.getCoins()
}
lawlorslaw
04/05/2022, 6:20 AMgildor
04/05/2022, 6:20 AMlawlorslaw
04/05/2022, 6:21 AMgildor
04/05/2022, 6:21 AMlawlorslaw
04/05/2022, 6:21 AMgildor
04/05/2022, 6:23 AMsuspend fun getCoins(): List<CoinResponse> {
val local = coinLocalDataSource.getCoins()
return if (local.isEmpty()) {
coinRemoteDataSource.getCoins()
} else {
local
}.map { it.toResponseModel() }
}
gildor
04/05/2022, 6:23 AMlawlorslaw
04/05/2022, 6:26 AMlawlorslaw
04/05/2022, 6:27 AMval remote =
coinRemoteDataSource.getCoins()
.doOnSuccess {
coinLocalDataSource.saveCoins(it.toEntityModels())
}
gildor
04/05/2022, 6:28 AMval local = coinLocalDataSource.getCoins()
return if (local.isEmpty()) {
val remote = coinRemoteDataSource.getCoins()
coinLocalDataSource.saveCoins(remote.toEntityModels())
remote
} else {
local
}.map { it.toResponseModel() }
gildor
04/05/2022, 6:29 AMlawlorslaw
04/05/2022, 6:30 AMsuspend fun getCoins(): List<CoinResponse> {
val local = coinLocalDataSource.getCoins()
return if (local.isEmpty()) {
val remote = coinRemoteDataSource.getCoins()
if(remote.isNotEmpty())
coinLocalDataSource.saveCoins(remote.toEntityModels())
remote
} else {
local.toResponseModels()
}
}
gildor
04/05/2022, 6:30 AM