package com.bigfat.gankio_ca.presentation.ui.meizhi.presenter;
import com.bigfat.gankio_ca.data.entity.GankEntity;
import com.bigfat.gankio_ca.data.net.GankApi;
import com.bigfat.gankio_ca.domain.exception.DefaultErrorBundle;
import com.bigfat.gankio_ca.domain.exception.ErrorBundle;
import com.bigfat.gankio_ca.domain.interactor.DefaultSubscriber;
import com.bigfat.gankio_ca.domain.interactor.GankUseCase;
import com.bigfat.gankio_ca.presentation.common.di.PerActivity;
import com.bigfat.gankio_ca.presentation.common.exception.ErrorMessageFactory;
import com.bigfat.gankio_ca.presentation.common.ui.Presenter;
import com.bigfat.gankio_ca.presentation.ui.meizhi.view.MeizhiView;
import java.util.List;
import javax.inject.Inject;
/**
* Created by yueban on 17:25 24/2/16.
* Email: fbzhh007@gmail.com
* QQ: 343278606
*/
@PerActivity
public class MeizhiPresenter implements Presenter {
private static final String TYPE = GankApi.Type.BENEFIT;
private final GankUseCase mGankUseCase;
private MeizhiView mView;
private int mPageIndex = 1;
private boolean isRefreshing = false;
@Inject
public MeizhiPresenter(GankUseCase gankUseCase) {
mGankUseCase = gankUseCase;
}
public void setView(MeizhiView view) {
mView = view;
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void destroy() {
mGankUseCase.unSubscribe();
}
public void initialize() {
showViewLoading();
getData(true);
}
public void loadMoreData() {
mView.loadMoreData();
getData(false);
}
private void getData(boolean isRefresh) {
if (isRefreshing) {
return;
}
if (isRefresh) {
mPageIndex = 1;
} else {
mPageIndex++;
}
mGankUseCase.data(TYPE, mPageIndex, new DataSubscriber(isRefresh));
}
public void onGankEntityClicked(GankEntity gankEntity) {
this.mView.viewDay(gankEntity);
}
private void showViewLoading() {
mView.showLoading();
}
private void hideViewLoading() {
mView.hideLoading();
}
private void showViewRetry() {
mView.showRetry();
}
private void hideViewRetry() {
mView.hideRetry();
}
private void showErrorMessage(ErrorBundle errorBundle) {
String errorMessage = ErrorMessageFactory.create(mView.getContext(),
errorBundle.getException());
mView.showError(errorMessage);
}
private void showDataInView(List<GankEntity> gankEntities, boolean isRefresh) {
mView.renderDataList(gankEntities, isRefresh);
}
private final class DataSubscriber extends DefaultSubscriber<List<GankEntity>> {
private boolean isRefresh;
public DataSubscriber(boolean isRefresh) {
this.isRefresh = isRefresh;
}
@Override
public void onStart() {
super.onStart();
isRefreshing = true;
}
@Override
public void onCompleted() {
MeizhiPresenter.this.hideViewLoading();
isRefreshing = false;
}
@Override
public void onError(Throwable e) {
MeizhiPresenter.this.hideViewLoading();
MeizhiPresenter.this.showErrorMessage(new DefaultErrorBundle(new Exception(e)));
isRefreshing = false;
}
@Override
public void onNext(List<GankEntity> gankEntities) {
MeizhiPresenter.this.showDataInView(gankEntities, isRefresh);
}
}
}