package com.gzsll.hupu.ui.pmdetail; import android.support.annotation.NonNull; import android.text.TextUtils; import com.gzsll.hupu.api.game.GameApi; import com.gzsll.hupu.bean.BaseData; import com.gzsll.hupu.bean.PmDetail; import com.gzsll.hupu.bean.PmDetailData; import com.gzsll.hupu.bean.PmDetailResult; import com.gzsll.hupu.bean.PmSettingData; import com.gzsll.hupu.bean.SendPm; import com.gzsll.hupu.bean.SendPmData; import com.gzsll.hupu.components.storage.UserStorage; 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/6. */ @PerActivity public class PmDetailPresenter implements PmDetailContract.Presenter { private String uid; private GameApi mGameApi; private UserStorage mUserStorage; private PmDetailContract.View mPmDetailView; private String lastMid = ""; private List<PmDetail> mPmDetails = new ArrayList<>(); private Subscription mSubscription; private boolean isBlock; @Inject public PmDetailPresenter(String uid, GameApi gameApi, UserStorage userStorage) { this.uid = uid; mGameApi = gameApi; mUserStorage = userStorage; } @Override public void attachView(@NonNull PmDetailContract.View view) { mPmDetailView = view; mGameApi.queryPmSetting(uid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<PmSettingData>() { @Override public void call(PmSettingData pmSettingData) { if (pmSettingData != null) { isBlock = pmSettingData.result.is_block == 1; mPmDetailView.isBlock(isBlock); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { } }); } @Override public void onPmDetailReceive() { mPmDetailView.showLoading(); loadPmDetail(); } private void loadPmDetail() { mSubscription = mGameApi.queryPmDetail(lastMid, uid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<PmDetailData>() { @Override public void call(PmDetailData pmDetailData) { mPmDetailView.hideLoading(); if (pmDetailData != null) { PmDetailResult result = pmDetailData.result; if (!result.data.isEmpty()) { lastMid = result.data.get(0).pmid; mPmDetails.addAll(0, result.data); mPmDetailView.renderPmDetailList(mPmDetails); mPmDetailView.scrollTo(result.data.size() - 1); mPmDetailView.onRefreshCompleted(); } else { if (mPmDetails.isEmpty()) { mPmDetailView.onEmpty(); } else { ToastUtil.showToast("没有更多了"); mPmDetailView.onRefreshCompleted(); } } } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { if (mPmDetails.isEmpty()) { mPmDetailView.onError(); } else { ToastUtil.showToast("数据加载失败,请检查网络后重试"); mPmDetailView.hideLoading(); } } }); } @Override public void onLoadMore() { loadPmDetail(); } @Override public void onReload() { onPmDetailReceive(); } @Override public void send(String content) { if (TextUtils.isEmpty(content)) { ToastUtil.showToast("内容不能为空"); return; } mGameApi.pm(content, uid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<SendPmData>() { @Override public void call(SendPmData sendPmData) { if (sendPmData != null) { SendPm pm = sendPmData.result; if (pm.code.equals("0")) { PmDetail detail = new PmDetail(); detail.puid = mUserStorage.getUid(); detail.header = mUserStorage.getUser().getIcon(); detail.content = pm.content; detail.pmid = pm.pmid; detail.create_time = pm.create_time; mPmDetails.add(detail); mPmDetailView.renderPmDetailList(mPmDetails); mPmDetailView.scrollTo(mPmDetails.size() - 1); mPmDetailView.onRefreshCompleted(); ToastUtil.showToast("发送成功"); mPmDetailView.cleanEditText(); } else { ToastUtil.showToast(sendPmData.result.desc); } } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast("发送失败,请检查您的网络后重试"); } }); } @Override public void clear() { mGameApi.clearPm(uid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<BaseData>() { @Override public void call(BaseData baseData) { ToastUtil.showToast("清空记录成功"); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast("清空记录失败,请检查网络后重试"); } }); } @Override public void block() { mGameApi.blockPm(uid, isBlock ? 0 : 1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<BaseData>() { @Override public void call(BaseData baseData) { ToastUtil.showToast(isBlock ? "取消屏蔽成功" : "屏蔽成功"); isBlock = !isBlock; mPmDetailView.isBlock(isBlock); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast(isBlock ? "取消屏蔽失败,请检查网络后重试" : "屏蔽失败,请检查网络后重试"); } }); } @Override public void detachView() { if (mSubscription != null && !mSubscription.isUnsubscribed()) { mSubscription.unsubscribe(); } mPmDetailView = null; } }