package com.pandaq.pandaeye.modules.video.videohome.mvp;
import com.pandaq.pandaeye.CustomApplication;
import com.pandaq.pandaeye.config.Constants;
import com.pandaq.pandaeye.disklrucache.DiskCacheManager;
import com.pandaq.pandaeye.api.ApiManager;
import com.pandaq.pandaeye.modules.video.MovieResponse;
import com.pandaq.pandaeye.BasePresenter;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
/**
* Created by PandaQ on 2017/3/1.
* 视频 fragment Presenter
*/
public class VideoHomeFragPresenter extends BasePresenter implements VideoHomeContract.Presenter {
private VideoHomeContract.View mFrag;
public VideoHomeFragPresenter(VideoHomeContract.View frag) {
mFrag = frag;
}
/**
* 加载视频主页的json数据
*/
public void loadData() {
mFrag.showProgressBar();
ApiManager.getInstence()
.getMovieService()
.getHomePage()
.flatMap(new Function<MovieResponse<RetDataBean>, Observable<RetDataBean.ListBean>>() {
@Override
public Observable<RetDataBean.ListBean> apply(MovieResponse<RetDataBean> response) {
return Observable.fromIterable(response.getData().getList());
}
})
//去广告
.filter(new Predicate<RetDataBean.ListBean>() {
@Override
public boolean test(RetDataBean.ListBean listBean) throws Exception {
String showType = listBean.getShowType();
return Constants.SHOW_TYPE_IN.equals(showType) || Constants.SHOW_TYPE_BANNER.equals(showType);
}
})
.toList()
//将 List 转为ArrayList 缓存存储 ArrayList Serializable对象
.map(new Function<List<RetDataBean.ListBean>, ArrayList<RetDataBean.ListBean>>() {
@Override
public ArrayList<RetDataBean.ListBean> apply(List<RetDataBean.ListBean> listBeen) {
ArrayList<RetDataBean.ListBean> arr = new ArrayList<RetDataBean.ListBean>();
arr.addAll(listBeen);
DiskCacheManager manager = new DiskCacheManager(CustomApplication.getContext(), Constants.CACHE_VIDEO_FILE);
manager.put(Constants.CACHE_VIDEO, arr);
return arr;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<ArrayList<RetDataBean.ListBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onSuccess(ArrayList<RetDataBean.ListBean> value) {
mFrag.refreshSuccess(value);
mFrag.hideProgressBar();
}
@Override
public void onError(Throwable e) {
mFrag.hideProgressBar();
mFrag.refreshFail(Constants.ERRO, e.getMessage());
}
});
}
/**
* 加载缓存
*/
public void loadCache() {
final DiskCacheManager manager = new DiskCacheManager(CustomApplication.getContext(), Constants.CACHE_VIDEO_FILE);
Observable.create(new ObservableOnSubscribe<ArrayList<RetDataBean.ListBean>>() {
@Override
public void subscribe(ObservableEmitter<ArrayList<RetDataBean.ListBean>> e) throws Exception {
ArrayList<RetDataBean.ListBean> arrbean = manager.getSerializable(Constants.CACHE_VIDEO);
e.onNext(arrbean);
}
}).subscribe(new Observer<ArrayList<RetDataBean.ListBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(ArrayList<RetDataBean.ListBean> value) {
if (value != null) {
mFrag.refreshSuccess(value);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}