Search in sources :

Example 11 with Builds

use of com.github.vase4kin.teamcityapp.buildlist.api.Builds in project TeamCityApp by vase4kin.

the class BuildListDataManagerImpl method loadBuilds.

/**
 * {@inheritDoc}
 */
public void loadBuilds(@NonNull Observable<Builds> call, @NonNull final OnLoadingListener<List<BuildDetails>> loadingListener) {
    mSubscriptions.clear();
    Subscription subscription = call.flatMap(new Func1<Builds, Observable<Build>>() {

        @Override
        public Observable<Build> call(Builds builds) {
            if (builds.getCount() == 0) {
                return Observable.from(Collections.<Build>emptyList());
            } else {
                mLoadMoreUrl = builds.getNextHref();
                return Observable.from(builds.getObjects());
            }
        }
    }).flatMap(new Func1<Build, Observable<Build>>() {

        @Override
        public Observable<Build> call(Build build) {
            // Make sure cache is updated
            final BuildDetails serverBuildDetails = new BuildDetailsImpl(build);
            // If server build's running update cache immediately
            if (serverBuildDetails.isRunning()) {
                return mRepository.build(build.getHref(), true);
            } else {
                // Call cache
                return mRepository.build(build.getHref(), false).flatMap(new Func1<Build, Observable<Build>>() {

                    @Override
                    public Observable<Build> call(Build build) {
                        BuildDetails cacheBuildDetails = new BuildDetailsImpl(build);
                        // If cache's not updated -> update it
                        return mRepository.build(build.getHref(), // Don't update cache if server and cache builds are finished
                        !(serverBuildDetails.isFinished() == cacheBuildDetails.isFinished()));
                    }
                });
            }
        }
    }).flatMap(new Func1<Build, Observable<BuildDetails>>() {

        @Override
        public Observable<BuildDetails> call(Build build) {
            return Observable.<BuildDetails>just(new BuildDetailsImpl(build));
        }
    }).toSortedList(new Func2<BuildDetails, BuildDetails, Integer>() {

        @Override
        public Integer call(BuildDetails build, BuildDetails build2) {
            return (build.isQueued() == build2.isQueued()) ? 0 : (build.isQueued() ? -1 : 1);
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<BuildDetails>>() {

        @Override
        public void onCompleted() {
        }

        @Override
        public void onError(Throwable e) {
            loadingListener.onFail(e.getMessage());
        }

        @Override
        public void onNext(List<BuildDetails> builds) {
            loadingListener.onSuccess(builds);
        }
    });
    mSubscriptions.add(subscription);
}
Also used : BuildDetails(com.github.vase4kin.teamcityapp.overview.data.BuildDetails) Builds(com.github.vase4kin.teamcityapp.buildlist.api.Builds) Observable(rx.Observable) BuildDetailsImpl(com.github.vase4kin.teamcityapp.overview.data.BuildDetailsImpl) Build(com.github.vase4kin.teamcityapp.buildlist.api.Build) List(java.util.List) Subscription(rx.Subscription) Func1(rx.functions.Func1) Func2(rx.functions.Func2)

Aggregations

Builds (com.github.vase4kin.teamcityapp.buildlist.api.Builds)11 Build (com.github.vase4kin.teamcityapp.buildlist.api.Build)6 Instrumentation (android.app.Instrumentation)5 Intent (android.content.Intent)5 Test (org.junit.Test)5 RunBuildActivity (com.github.vase4kin.teamcityapp.runbuild.view.RunBuildActivity)4 ArrayList (java.util.ArrayList)3 Subscription (rx.Subscription)2 TeamCityApplication (com.github.vase4kin.teamcityapp.TeamCityApplication)1 BuildDetailsActivity (com.github.vase4kin.teamcityapp.build_details.view.BuildDetailsActivity)1 BuildListFilter (com.github.vase4kin.teamcityapp.buildlist.filter.BuildListFilter)1 BuildListFilterImpl (com.github.vase4kin.teamcityapp.buildlist.filter.BuildListFilterImpl)1 FilterBuildsActivity (com.github.vase4kin.teamcityapp.filter_builds.view.FilterBuildsActivity)1 BuildDetails (com.github.vase4kin.teamcityapp.overview.data.BuildDetails)1 BuildDetailsImpl (com.github.vase4kin.teamcityapp.overview.data.BuildDetailsImpl)1 List (java.util.List)1 Before (org.junit.Before)1 Observable (rx.Observable)1 Func1 (rx.functions.Func1)1 Func2 (rx.functions.Func2)1