Untitled
unknown
kotlin
5 years ago
2.5 kB
10
Indexable
val actions = PublishSubject.create<String>() // типа экшены редукса
// методы репозитория
fun loadProfile() = Observable.just(1) // грузим профиль из сети
fun loadPosts() = Observable.just(1) // грузим посты из сети
fun getProfileFlow() = Observable.just(1) // подписываемся на профиль из бд
fun getPostFlow() = Observable.just(1) // подписываемся на посты из бд
fun insertProfile(profile: Int) = Completable.complete() // вставляем профиль в бд
fun insertPosts(posts: Int) = Completable.complete() // вставляем посты в бд
sealed class Action {
object InitAction : Action()
data class FailedLoadProfile(val e: Throwable) : Action()
data class FailedLoadPosts(val e: Throwable) : Action()
data class OnPostsReceived(val posts: Int) : Action()
data class OnProfileReceived(val profile: Int) : Action()
data class OnProfileReceivedFailed(val e: Throwable) : Action()
data class OnPostsReceivedFailed(val e: Throwable) : Action()
}
fun handleInitEff(): Observable<Action> = actions.ofType(Action.InitAction::class.java)
.switchMap {
Observable.merge(
listOf(
loadProfile()
.flatMap { profile -> insertProfile(profile).toObservable<Action>() }
.onErrorReturn { e -> Action.FailedLoadProfile(e) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
loadPosts()
.flatMap { posts -> insertPosts(posts).toObservable<Action>() }
.onErrorReturn { e -> Action.FailedLoadPosts(e) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
getProfileFlow()
.map<Action> { profile -> Action.OnProfileReceived(profile) }
.onErrorReturn { e -> Action.OnProfileReceivedFailed(e) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
getPostFlow()
.map<Action> { posts -> Action.OnPostsReceived(posts) }
.onErrorReturn { e -> Action.OnPostsReceivedFailed(e) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
)
)
}Editor is loading...