package com.hannesdorfmann.mosby3.sample.mail.search; import android.text.TextUtils; import com.hannesdorfmann.mosby3.sample.mail.base.presenter.BaseRxMailPresenter; import com.hannesdorfmann.mosby3.sample.mail.model.event.LoginSuccessfulEvent; import com.hannesdorfmann.mosby3.sample.mail.model.mail.Mail; import com.hannesdorfmann.mosby3.sample.mail.model.mail.MailProvider; import de.greenrobot.event.EventBus; import java.util.List; import javax.inject.Inject; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * @author Hannes Dorfmann */ public class SearchPresenter extends BaseRxMailPresenter<SearchView, List<Mail>> { private int queryLimit = 20; private Subscriber<List<Mail>> olderSubscriber; @Inject public SearchPresenter(MailProvider mailProvider, EventBus eventBus) { super(mailProvider, eventBus); } public void loadOlderMails(String query, Mail olderAs) { // Cancel any previous query unsubscribe(); final Observable<List<Mail>> older = mailProvider.searchForOlderMails(query, olderAs.getDate(), queryLimit); if (isViewAttached()) { getView().showLoadMore(true); } olderSubscriber = new Subscriber<List<Mail>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { if (isViewAttached()) { getView().showLoadMoreError(e); getView().showLoadMore(false); } } @Override public void onNext(List<Mail> mails) { if (isViewAttached()) { getView().addOlderMails(mails); getView().showLoadMore(false); } } }; // start older.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(olderSubscriber); } public void searchFor(String query, boolean pullToRefresh) { // If searching for empty string, then do nothing if (isViewAttached() && TextUtils.isEmpty(query)) { unsubscribe(); getView().showSearchNotStartedYet(); return; } // in case the previous action was load more we have to reset the view if (isViewAttached()) { getView().showLoadMore(false); } subscribe(mailProvider.searchForMails(query, queryLimit), pullToRefresh); } @Override protected void unsubscribe() { super.unsubscribe(); if (olderSubscriber != null && !olderSubscriber.isUnsubscribed()) { olderSubscriber.unsubscribe(); } } public void onEventMainThread(LoginSuccessfulEvent event) { if (isViewAttached()) { getView().showSearchNotStartedYet(); } } }