Skip to content

Instantly share code, notes, and snippets.

@iamanbansal
Last active March 24, 2020 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamanbansal/1c4966f1b7837e652d3ff99056cc45dd to your computer and use it in GitHub Desktop.
Save iamanbansal/1c4966f1b7837e652d3ff99056cc45dd to your computer and use it in GitHub Desktop.
class HomeViewModel @Inject constructor(
private val homeRepository: HomeRepository
) : ViewModel() {
private val compositeDisposable = CompositeDisposable()
private val _homeItem = MutableLiveData<Resource<List<HomeItem>>>()
val homeItem: LiveData<Resource<List<HomeItem>>>
get() = _homeItem
fun loadHomeItem() {
_homeItem.postValue(Resource.loading(null))
loadCache()
loadHomeFromApi()
}
private fun loadHomeFromApi() {
addToDisposable(
homeRepository.getHomeItems()
.subscribeOn(Schedulers.io())
.subscribe({
_homeItem.postValue(Resource.success(it))
}, {
_homeItem.postValue(Resource.error("Failed to update home", null))
})
)
}
private fun loadCache() {
addToDisposable(
homeRepository.getHomeCache()
.subscribeOn(Schedulers.io())
.subscribe({
if (!it.isNullOrEmpty()) {
_homeItem.postValue(Resource.success(it))
}
}, {})
)
}
private fun addToDisposable(disposable: Disposable) = compositeDisposable.add(disposable)
override fun onCleared() {
compositeDisposable.clear()
super.onCleared()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment