Skip to content

Instantly share code, notes, and snippets.

@luks91
Created August 20, 2018 00:08
Show Gist options
  • Save luks91/d2b39adc824a0f6136a77b1ec603a7da to your computer and use it in GitHub Desktop.
Save luks91/d2b39adc824a0f6136a77b1ec603a7da to your computer and use it in GitHub Desktop.
private fun pullRequests(view: T): ConnectableObservable<Pair<List<PullRequest>, String>> {
return Observable.combineLatest(
view.intentPullToRefresh().startWith { Object() },
connectionProvider.connections(),
BiFunction<Any, BitbucketConnection, BitbucketConnection> { _, conn -> conn }
).switchMap { (_, serverUrl, api, token) ->
repositoriesStorage.selectedRepositories()
.switchMap { list ->
Observable.fromIterable(list)
.flatMap { (slug, _, project) ->
BitbucketApi.queryPaged { start ->
api.getPullRequests(token, project.key, slug, start, avatarSize()) }
.subscribeOn(Schedulers.io())
.onErrorResumeNext(connectionProvider.handleNetworkError(
BasePullRequestsPresenter::class.java.simpleName))
}.reduce { t1, t2 -> t1 + t2 }.map { it to serverUrl }.toObservable()
.observeOn(AndroidSchedulers.mainThread())
.doOnComplete { view.onLoadingCompleted() }
.switchIfEmpty(Observable.just(NULL_PULL_REQUESTS to serverUrl))
}
}
.doOnSubscribe { view.onSelfLoadingStarted() }
.publish()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment