Untitled
unknown
kotlin
5 years ago
2.5 kB
8
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...