Moves retry logic in Github example to right place.

This commit is contained in:
Krunoslav Zaher 2015-10-10 17:26:51 +02:00
parent 49b0f0d7f0
commit b4d4e4b4d6
1 changed files with 24 additions and 23 deletions

View File

@ -95,29 +95,31 @@ class GitHubSearchRepositoriesAPI {
}
private func recursivelySearch(loadedSoFar: [Repository], loadNextURL: NSURL, loadNextPageTrigger: Observable<Void>) -> Observable<SearchRepositoryResponse> {
return loadSearchURL(loadNextURL).flatMap { (newPageRepositoriesResponse, nextURL) -> Observable<SearchRepositoryResponse> in
// in case access denied, just stop
guard case .Repositories(let newPageRepositories) = newPageRepositoriesResponse else {
return just(newPageRepositoriesResponse)
return loadSearchURL(loadNextURL)
.retry(3)
.flatMap { (newPageRepositoriesResponse, nextURL) -> Observable<SearchRepositoryResponse> in
// in case access denied, just stop
guard case .Repositories(let newPageRepositories) = newPageRepositoriesResponse else {
return just(newPageRepositoriesResponse)
}
var loadedRepositories = loadedSoFar
loadedRepositories.appendContentsOf(newPageRepositories)
// if next page can't be loaded, just return what was loaded, and stop
guard let nextURL = nextURL else {
return just(.Repositories(loadedRepositories))
}
return [
// return loaded immediately
just(.Repositories(loadedRepositories)),
// wait until next page can be loaded
never().takeUntil(loadNextPageTrigger),
// load next page
self.recursivelySearch(loadedRepositories, loadNextURL: nextURL, loadNextPageTrigger: loadNextPageTrigger)
].concat()
}
var loadedRepositories = loadedSoFar
loadedRepositories.appendContentsOf(newPageRepositories)
// if next page can't be loaded, just return what was loaded, and stop
guard let nextURL = nextURL else {
return just(.Repositories(loadedRepositories))
}
return [
// return loaded immediately
just(.Repositories(loadedRepositories)),
// wait until next page can be loaded
never().takeUntil(loadNextPageTrigger),
// load next page
self.recursivelySearch(loadedRepositories, loadNextURL: nextURL, loadNextPageTrigger: loadNextPageTrigger)
].concat()
}
}
private func loadSearchURL(searchURL: NSURL) -> Observable<(response: SearchRepositoryResponse, nextURL: NSURL?)> {
@ -230,7 +232,6 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat
return just(.Repositories([]))
} else {
return GitHubSearchRepositoriesAPI.sharedAPI.search(query, loadNextPageTrigger: loadNextPageTrigger)
.retry(3)
.catchErrorJustReturn(.Repositories([]))
}
}