package com.gzsll.hupu.ui.thread.collect; import android.support.annotation.NonNull; import com.gzsll.hupu.api.game.GameApi; import com.gzsll.hupu.bean.ThreadListData; import com.gzsll.hupu.bean.ThreadListResult; import com.gzsll.hupu.db.Thread; 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.functions.Func1; /** * Created by sll on 2016/3/11. */ @PerActivity public class ThreadCollectPresenter implements CollectThreadListContract.Presenter { private GameApi mGameApi; private CollectThreadListContract.View mSpecialView; private Subscription mSubscription; private List<Thread> threads = new ArrayList<>(); private int page = 1; private boolean hasNextPage = true; @Inject public ThreadCollectPresenter(GameApi gameApi) { mGameApi = gameApi; } @Override public void onThreadReceive() { mSpecialView.showLoading(); loadCollectList(page); } private void loadCollectList(final int page) { this.page = page; mSubscription = mGameApi.getCollectList(page).map(new Func1<ThreadListData, List<Thread>>() { @Override public List<Thread> call(ThreadListData result) { if (page == 1) { threads.clear(); } if (result != null && result.result != null) { ThreadListResult data = result.result; hasNextPage = data.nextDataExists == 1; threads.addAll(data.data); return threads; } return null; } }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<List<Thread>>() { @Override public void call(List<Thread> threads) { if (threads != null) { if (threads.isEmpty()) { mSpecialView.onEmpty(); } else { mSpecialView.onLoadCompleted(hasNextPage); mSpecialView.onRefreshCompleted(); mSpecialView.hideLoading(); mSpecialView.renderThreads(threads); } } else { loadThreadError(); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { loadThreadError(); } }); } private void loadThreadError() { if (threads.isEmpty()) { mSpecialView.onError("数据加载失败"); } else { mSpecialView.hideLoading(); mSpecialView.onLoadCompleted(true); mSpecialView.onRefreshCompleted(); ToastUtil.showToast("数据加载失败"); } } public void onRefresh() { page = 1; loadCollectList(page); } public void onReload() { mSpecialView.showLoading(); loadCollectList(page); } public void onLoadMore() { if (!hasNextPage) { ToastUtil.showToast("没有更多了~"); mSpecialView.onLoadCompleted(false); return; } loadCollectList(++page); } @Override public void attachView(@NonNull CollectThreadListContract.View view) { mSpecialView = view; } @Override public void detachView() { if (mSubscription != null && !mSubscription.isUnsubscribed()) { mSubscription.unsubscribe(); } mSpecialView = null; } }