in todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/effecthandlers/TasksListEffectHandlers.java [77:97]
static ObservableTransformer<RefreshTasks, TasksListEvent> refreshTasksHandler(
TasksDataSource remoteSource, TasksDataSource localSource) {
Single<TasksListEvent> refreshTasksOperation =
remoteSource
.getTasks()
.singleOrError()
.map(Either::<Throwable, List<Task>>right)
.onErrorReturn(Either::left)
.flatMap(
either ->
either.map(
left -> Single.just(tasksLoadingFailed()),
right ->
Observable.fromIterable(right.value())
.concatMapCompletable(
t -> Completable.fromAction(() -> localSource.saveTask(t)))
.andThen(Single.just(tasksRefreshed()))
.onErrorReturnItem(tasksLoadingFailed())));
return refreshTasks -> refreshTasks.flatMapSingle(__ -> refreshTasksOperation);
}