bngoding

Untitled

Sep 21st, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. class DataSource(
  2. val myAdvancedSearch: myAdvancedSearch,
  3. var query: String
  4. ) : PageKeyedDataSource<Int, Model>() {
  5.  
  6. companion object {
  7. const val pageSize = 10
  8. const val initialLoad = pageSize * 2
  9. const val prefetchDistance = pageSize / 2
  10.  
  11. var data: List<Model>? = null
  12.  
  13. }
  14.  
  15. val emptyStateLiveData = MutableLiveData<Boolean>()
  16. val networkStateLiveData = MutableLiveData<NetworkState>()
  17. private val initialLoadingLiveData = MutableLiveData<NetworkState>()
  18.  
  19.  
  20.  
  21. override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Model>) {
  22. initialLoadingLiveData.postValue(LOADING)
  23. networkStateLiveData.postValue(LOADING)
  24.  
  25. query = MyFragment.query
  26.  
  27. myAdvancedSearch
  28. .searchData(
  29. searchTerm = query,
  30. perPage = initialLoad
  31. )
  32. .subscribeOn(Schedulers.io())
  33. .map {
  34. it.items.map { item -> Model(item) }
  35. }
  36. .observeOn(AndroidSchedulers.mainThread())
  37. .subscribe({
  38. initialLoadingLiveData.postValue(LOADED)
  39. networkStateLiveData.postValue(LOADED)
  40. },{
  41. initialLoadingLiveData.postValue(NetworkState.failed(it.localizedMessage))
  42. networkStateLiveData.postValue(NetworkState.failed(it.localizedMessage))
  43. })
  44.  
  45. }
  46.  
  47.  
  48. override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Model>) {
  49. networkStateLiveData.postValue(LOADING)
  50.  
  51. myAdvancedSearch
  52. .searchData(
  53. searchTerm = query,
  54. perPage = initialLoad
  55. )
  56. .subscribeOn(Schedulers.io())
  57. .map {
  58. it.items.map { item -> Model(item) }
  59. }
  60. .observeOn(AndroidSchedulers.mainThread())
  61. .subscribe({
  62. networkStateLiveData.postValue(LOADED)
  63.  
  64. },{
  65. networkStateLiveData.postValue(NetworkState.failed(it.localizedMessage))
  66. })
  67. }
  68.  
  69. override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Model>) {}
  70.  
  71.  
  72. class NetworkState(val status: Status, val message: String) {
  73.  
  74. enum class Status {
  75. RUNNING, SUCCESS, FAILED
  76. }
  77.  
  78. companion object {
  79. val LOADED = NetworkState(Status.SUCCESS, "Success")
  80. val LOADING = NetworkState(Status.RUNNING, "Running")
  81.  
  82. fun failed(errorMessage: String): NetworkState {
  83. return NetworkState(Status.FAILED, errorMessage)
  84. }
  85. }
  86. }
  87. }
Add Comment
Please, Sign In to add comment