package com.photo.photogallery.search;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.photo.photogallery.BasePresenter;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
public class SearchPresenter implements BasePresenter {
@NonNull
private final SearchModel searchModel;
@NonNull
private SearchView searchView;
@NonNull
private CompositeSubscription subscriptions;
private static String currentQuery;
public SearchPresenter(@NonNull SearchModel searchModel, @NonNull SearchView searchView) {
this.searchModel = searchModel;
this.searchView = searchView;
this.subscriptions = new CompositeSubscription();
this.searchView.setPresenter(this);
}
@Override
public void subscribe() {
if (currentQuery == null) {
getRecent();
} else {
search(currentQuery, null);
}
}
@Override
public void unsubscribe() {
subscriptions.clear();
}
public void search(@NonNull String query, @Nullable Integer page) {
searchView.showLoadingUi();
subscriptions.clear();
currentQuery = query;
Subscription subscription = searchModel
.search(currentQuery, null, null)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
recentPhotos -> {
searchView.showContentUi(recentPhotos);
},
error -> {
searchView.showErrorUi(error);
}
);
subscriptions.add(subscription);
}
private void getRecent() {
searchView.showLoadingUi();
subscriptions.clear();
Subscription subscription = searchModel
.getRecent(null, null)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
recentPhotos -> {
searchView.showContentUi(recentPhotos);
},
error -> {
searchView.showErrorUi(error);
}
);
subscriptions.add(subscription);
}
}