package com.gzsll.hupu.ui.pmlist;
import android.support.annotation.NonNull;
import com.gzsll.hupu.api.game.GameApi;
import com.gzsll.hupu.bean.Pm;
import com.gzsll.hupu.bean.PmData;
import com.gzsll.hupu.bean.PmResult;
import com.gzsll.hupu.injector.PerActivity;
import com.gzsll.hupu.util.ToastUtil;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* Created by sll on 2016/5/11.
*/
@PerActivity
public class PmListPresenter implements PmListContract.Presenter {
private GameApi mGameApi;
@Inject
public PmListPresenter(GameApi gameApi) {
mGameApi = gameApi;
}
private PmListContract.View mPmListView;
private String lastTime = "";
private List<Pm> mPms = new ArrayList<>();
private boolean hasNextPage = true;
private Subscription mSubscription;
@Override
public void onPmListReceive() {
mPmListView.showLoading();
loadPmList(true);
}
private void loadPmList(final boolean clear) {
mSubscription =
mGameApi.queryPmList(lastTime).subscribeOn(Schedulers.io()).doOnNext(new Action1<PmData>() {
@Override
public void call(PmData pmData) {
if (clear) {
mPms.clear();
}
}
}).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<PmData>() {
@Override
public void call(PmData pmData) {
mPmListView.hideLoading();
if (pmData != null) {
PmResult result = pmData.result;
hasNextPage = result.has_next_page.equals("1");
if (result.data.isEmpty()) {
if (mPms.isEmpty()) {
mPmListView.onEmpty();
} else {
ToastUtil.showToast("没有更多了");
}
} else {
addPmList(result.data);
mPmListView.renderPmList(mPms);
}
mPmListView.onRefreshCompleted();
mPmListView.onLoadCompleted(hasNextPage);
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (mPms.isEmpty()) {
mPmListView.onError();
} else {
ToastUtil.showToast("数据加载失败,请检查网络后重试");
mPmListView.hideLoading();
mPmListView.onRefreshCompleted();
mPmListView.onLoadCompleted(true);
}
}
});
}
private void addPmList(List<Pm> pms) {
for (Pm pm : pms) {
boolean contain = false;
for (Pm mPm : mPms) {
if (pm.sid.equals(mPm.sid)) {
contain = true;
break;
}
}
if (!contain) {
mPms.add(pm);
}
}
if (!mPms.isEmpty()) {
lastTime = mPms.get(mPms.size() - 1).last_time;
}
}
@Override
public void onRefresh() {
lastTime = "";
loadPmList(true);
}
@Override
public void onReload() {
onPmListReceive();
}
@Override
public void onLoadMore() {
if (!hasNextPage) {
ToastUtil.showToast("没有更多了~");
mPmListView.onLoadCompleted(false);
return;
}
loadPmList(false);
}
@Override
public void onPmListClick(Pm pm) {
mPmListView.showPmDetailUi(pm.puid, pm.nickname);
}
@Override
public void detachView() {
if (mSubscription != null && !mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
mPmListView = null;
}
@Override
public void attachView(@NonNull PmListContract.View view) {
mPmListView = view;
}
}