From b4d4e4b4d625aa4ae633ac5a8d250a9d252985d4 Mon Sep 17 00:00:00 2001 From: Krunoslav Zaher Date: Sat, 10 Oct 2015 17:26:51 +0200 Subject: [PATCH] Moves retry logic in Github example to right place. --- ...tHubSearchRepositoriesViewController.swift | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift b/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift index 3ec656d3..5852a51c 100644 --- a/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift +++ b/RxExample/RxExample/Examples/AutoLoading/GitHubSearchRepositoriesViewController.swift @@ -95,29 +95,31 @@ class GitHubSearchRepositoriesAPI { } private func recursivelySearch(loadedSoFar: [Repository], loadNextURL: NSURL, loadNextPageTrigger: Observable) -> Observable { - return loadSearchURL(loadNextURL).flatMap { (newPageRepositoriesResponse, nextURL) -> Observable 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 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([])) } }