static ObservableTransformer refreshTasksHandler()

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);
  }