package com.dl7.mvp.module.photo.welfare;
import com.dl7.mvp.api.RetrofitService;
import com.dl7.mvp.api.bean.WelfarePhotoInfo;
import com.dl7.mvp.module.base.IBasePresenter;
import com.dl7.mvp.utils.ImageLoader;
import com.orhanobut.logger.Logger;
import java.util.List;
import java.util.concurrent.ExecutionException;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* Created by long on 2016/10/11.
* 福利图片界面 Presenter
*/
public class WelfareListPresenter implements IBasePresenter {
private WelfareListFragment mView;
private int mPage = 1;
public WelfareListPresenter(WelfareListFragment view) {
this.mView = view;
}
@Override
public void getData(boolean isRefresh) {
RetrofitService.getWelfarePhoto(mPage)
.doOnSubscribe(new Action0() {
@Override
public void call() {
mView.showLoading();
}
})
.compose(mTransformer)
.subscribe(new Subscriber<List<WelfarePhotoInfo>>() {
@Override
public void onCompleted() {
mView.hideLoading();
}
@Override
public void onError(Throwable e) {
Logger.e(e.toString());
mView.showNetError();
}
@Override
public void onNext(List<WelfarePhotoInfo> photoList) {
mView.loadData(photoList);
mPage++;
}
});
}
@Override
public void getMoreData() {
RetrofitService.getWelfarePhoto(mPage)
.compose(mTransformer)
.subscribe(new Subscriber<List<WelfarePhotoInfo>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Logger.e(e.toString());
mView.loadNoData();
}
@Override
public void onNext(List<WelfarePhotoInfo> photoList) {
mView.loadMoreData(photoList);
mPage++;
}
});
}
/**
* 统一变换
*/
private Observable.Transformer<WelfarePhotoInfo, List<WelfarePhotoInfo>> mTransformer = new Observable.Transformer<WelfarePhotoInfo, List<WelfarePhotoInfo>>() {
@Override
public Observable<List<WelfarePhotoInfo>> call(Observable<WelfarePhotoInfo> welfarePhotoInfoObservable) {
return welfarePhotoInfoObservable
.observeOn(Schedulers.io())
// 接口返回的数据是没有宽高参数的,所以这里设置图片的宽度和高度,速度会慢一点
.filter(new Func1<WelfarePhotoInfo, Boolean>() {
@Override
public Boolean call(WelfarePhotoInfo photoBean) {
try {
photoBean.setPixel(ImageLoader.calePhotoSize(mView.getContext(), photoBean.getUrl()));
return true;
} catch (ExecutionException e) {
e.printStackTrace();
return false;
} catch (InterruptedException e) {
e.printStackTrace();
return false;
}
}
})
.observeOn(AndroidSchedulers.mainThread())
.toList()
.compose(mView.<List<WelfarePhotoInfo>>bindToLife());
}
};
}