package org.bookdash.android.presentation.search; import org.bookdash.android.data.book.BookService; import org.bookdash.android.data.tracking.Analytics; import org.bookdash.android.domain.model.firebase.FireBookDetails; import org.bookdash.android.presentation.base.BasePresenter; import java.io.IOException; import java.util.List; import rx.Scheduler; import rx.Subscriber; /** * @author rebeccafranks * @since 2016/12/11 */ class SearchPresenter extends BasePresenter<SearchContract.View> implements SearchContract.Presenter { private final Scheduler ioScheduler, mainScheduler; private final Analytics analytics; private BookService bookService; SearchPresenter(final BookService bookService, final Analytics analytics, Scheduler mainScheduler, Scheduler ioScheduler) { this.bookService = bookService; this.ioScheduler = ioScheduler; this.mainScheduler = mainScheduler; this.analytics = analytics; } @Override public void search(final String searchTerm) { getView().showLoading(); analytics.trackSearchBooks(searchTerm); addSubscription(bookService.searchBooks(searchTerm).subscribeOn(ioScheduler).observeOn(mainScheduler) .subscribe(new Subscriber<List<FireBookDetails>>() { @Override public void onCompleted() { } @Override public void onError(final Throwable e) { getView().hideLoading(); if (e instanceof IOException) { getView().showNoInternetMessage(); return; } analytics.trackSearchError(searchTerm, e.getMessage()); getView().showErrorMessage(e.getMessage()); getView().showRetryButton(); } @Override public void onNext(final List<FireBookDetails> fireBookDetails) { getView().hideLoading(); getView().hideRetryButton(); if (fireBookDetails == null || fireBookDetails.size() == 0) { analytics.trackSearchBooksNoResults(searchTerm); getView().showNoResultsMessage(); return; } analytics.trackSearchBooksSuccess(searchTerm, fireBookDetails.size()); getView().showSearchResults(fireBookDetails); } })); } }