package com.zcy.ghost.vivideo.presenter;
import android.support.annotation.NonNull;
import com.zcy.ghost.vivideo.base.RxPresenter;
import com.zcy.ghost.vivideo.model.bean.Collection;
import com.zcy.ghost.vivideo.model.bean.Record;
import com.zcy.ghost.vivideo.model.bean.VideoInfo;
import com.zcy.ghost.vivideo.model.bean.VideoRes;
import com.zcy.ghost.vivideo.model.db.RealmHelper;
import com.zcy.ghost.vivideo.model.net.RetrofitHelper;
import com.zcy.ghost.vivideo.model.net.VideoHttpResponse;
import com.zcy.ghost.vivideo.presenter.contract.VideoInfoContract;
import com.zcy.ghost.vivideo.utils.BeanUtil;
import com.zcy.ghost.vivideo.utils.Preconditions;
import com.zcy.ghost.vivideo.utils.RxUtil;
import org.simple.eventbus.EventBus;
import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.Subscription;
import rx.functions.Action0;
import rx.functions.Action1;
/**
* Description: VideoInfoPresenter
* Creator: yxc
* date: 2016/9/21 15:35
*/
public class VideoInfoPresenter extends RxPresenter implements VideoInfoContract.Presenter {
public final static String Refresh_Video_Info = "Refresh_Video_Info";
public final static String Put_DataId = "Put_DataId";
public static final String Refresh_Collection_List = "Refresh_Collection_List";
public static final String Refresh_History_List = "Refresh_History_List";
final int WAIT_TIME = 200;
VideoRes result;
String dataId = "";
String pic = "";
@NonNull
final VideoInfoContract.View mView;
public VideoInfoPresenter(@NonNull VideoInfoContract.View addTaskView, VideoInfo videoInfo) {
mView = Preconditions.checkNotNull(addTaskView);
mView.setPresenter(this);
mView.showContent(BeanUtil.VideoInfo2VideoRes(videoInfo, null));
this.dataId = videoInfo.dataId;
this.pic = videoInfo.pic;
getDetailData(videoInfo.dataId);
setCollectState();
putMediaId();
}
@Override
public void getDetailData(String dataId) {
Subscription rxSubscription = RetrofitHelper.getVideoApi().getVideoInfo(dataId)
.compose(RxUtil.<VideoHttpResponse<VideoRes>>rxSchedulerHelper())
.compose(RxUtil.<VideoRes>handleResult())
.subscribe(new Action1<VideoRes>() {
@Override
public void call(final VideoRes res) {
if (res != null) {
if (mView.isActive()) {
mView.showContent(res);
result = res;
postData();
insertRecord();
}
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (mView.isActive())
mView.hidLoading();
mView.showError("数据加载失败");
}
}, new Action0() {
@Override
public void call() {
if (mView.isActive())
mView.hidLoading();
}
});
addSubscribe(rxSubscription);
}
private void postData() {
Subscription rxSubscription = Observable.timer(WAIT_TIME, TimeUnit.MILLISECONDS)
.compose(RxUtil.<Long>rxSchedulerHelper())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
EventBus.getDefault().post(result, Refresh_Video_Info);
}
});
addSubscribe(rxSubscription);
}
private void putMediaId() {
Subscription rxSubscription = Observable.timer(WAIT_TIME, TimeUnit.MILLISECONDS)
.compose(RxUtil.<Long>rxSchedulerHelper())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
EventBus.getDefault().post(dataId, Put_DataId);
}
});
addSubscribe(rxSubscription);
}
@Override
public void collect() {
if (RealmHelper.getInstance().queryCollectionId(dataId)) {
RealmHelper.getInstance().deleteCollection(dataId);
mView.disCollect();
} else {
if (result != null) {
Collection bean = new Collection();
bean.setId(String.valueOf(dataId));
bean.setPic(pic);
bean.setTitle(result.title);
bean.setAirTime(result.airTime);
bean.setScore(result.score);
bean.setTime(System.currentTimeMillis());
RealmHelper.getInstance().insertCollection(bean);
mView.collected();
}
}
//刷新收藏列表
Subscription rxSubscription = Observable.timer(WAIT_TIME, TimeUnit.MILLISECONDS)
.compose(RxUtil.<Long>rxSchedulerHelper())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
EventBus.getDefault().post("", Refresh_Collection_List);
}
});
addSubscribe(rxSubscription);
}
@Override
public void insertRecord() {
if (!RealmHelper.getInstance().queryRecordId(dataId)) {
if (result != null) {
Record bean = new Record();
bean.setId(String.valueOf(dataId));
bean.setPic(pic);
bean.setTitle(result.title);
bean.setTime(System.currentTimeMillis());
RealmHelper.getInstance().insertRecord(bean, MinePresenter.maxSize);
//刷新收藏列表
Subscription rxSubscription = Observable.timer(WAIT_TIME, TimeUnit.MILLISECONDS)
.compose(RxUtil.<Long>rxSchedulerHelper())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
EventBus.getDefault().post("", Refresh_History_List);
}
});
addSubscribe(rxSubscription);
}
}
}
private void setCollectState() {
if (RealmHelper.getInstance().queryCollectionId(dataId)) {
mView.collected();
} else {
mView.disCollect();
}
}
}