use of com.github.vase4kin.teamcityapp.overview.data.BuildDetailsImpl in project TeamCityApp by vase4kin.
the class BuildListDataModelImplTest method testAddDataModel.
@Test
public void testAddDataModel() throws Exception {
BuildDetails build = new BuildDetailsImpl(mBuild);
BuildListDataModel dataModel = new BuildListDataModelImpl(Collections.singletonList(build));
mDataModel.addMoreBuilds(dataModel);
assertThat(mDataModel.getBuild(1), is(mBuild));
assertThat(mDataModel.getItemCount(), is(2));
}
use of com.github.vase4kin.teamcityapp.overview.data.BuildDetailsImpl 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);
}
Aggregations