package com.codeest.geeknews.presenter.wechat;
import com.codeest.geeknews.app.Constants;
import com.codeest.geeknews.base.RxPresenter;
import com.codeest.geeknews.component.RxBus;
import com.codeest.geeknews.model.DataManager;
import com.codeest.geeknews.model.bean.WXItemBean;
import com.codeest.geeknews.model.event.SearchEvent;
import com.codeest.geeknews.model.http.response.WXHttpResponse;
import com.codeest.geeknews.base.contract.wechat.WechatContract;
import com.codeest.geeknews.util.RxUtil;
import com.codeest.geeknews.widget.CommonSubscriber;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Flowable;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
/**
* Created by codeest on 16/8/29.
*/
public class WechatPresenter extends RxPresenter<WechatContract.View> implements WechatContract.Presenter {
private static final int NUM_OF_PAGE = 20;
private int currentPage = 1;
private String queryStr = null;
private DataManager mDataManager;
@Inject
public WechatPresenter(DataManager mDataManager) {
this.mDataManager = mDataManager;
}
@Override
public void attachView(WechatContract.View view) {
super.attachView(view);
registerEvent();
}
private void registerEvent() {
addSubscribe(RxBus.getDefault().toFlowable(SearchEvent.class)
.compose(RxUtil.<SearchEvent>rxSchedulerHelper())
.filter(new Predicate<SearchEvent>() {
@Override
public boolean test(@NonNull SearchEvent searchEvent) throws Exception {
return searchEvent.getType() == Constants.TYPE_WECHAT;
}
})
.map(new Function<SearchEvent, String>() {
@Override
public String apply(SearchEvent searchEvent) {
return searchEvent.getQuery();
}
})
.subscribeWith(new CommonSubscriber<String>(mView, "搜索失败ヽ(≧Д≦)ノ") {
@Override
public void onNext(String s) {
queryStr = s;
getSearchWechatData(s);
}
@Override
public void onError(Throwable e) {
super.onError(e);
registerEvent();
}
})
);
}
@Override
public void getWechatData() {
queryStr = null;
currentPage = 1;
addSubscribe(mDataManager.fetchWechatListInfo(NUM_OF_PAGE,currentPage)
.compose(RxUtil.<WXHttpResponse<List<WXItemBean>>>rxSchedulerHelper())
.compose(RxUtil.<List<WXItemBean>>handleWXResult())
.subscribeWith(new CommonSubscriber<List<WXItemBean>>(mView) {
@Override
public void onNext(List<WXItemBean> wxItemBeen) {
mView.showContent(wxItemBeen);
}
})
);
}
@Override
public void getMoreWechatData() {
Flowable<WXHttpResponse<List<WXItemBean>>> observable;
if (queryStr != null) {
observable = mDataManager.fetchWechatSearchListInfo(NUM_OF_PAGE,++currentPage,queryStr);
} else {
observable = mDataManager.fetchWechatListInfo(NUM_OF_PAGE,++currentPage);
}
addSubscribe(observable
.compose(RxUtil.<WXHttpResponse<List<WXItemBean>>>rxSchedulerHelper())
.compose(RxUtil.<List<WXItemBean>>handleWXResult())
.subscribeWith(new CommonSubscriber<List<WXItemBean>>(mView, "没有更多了ヽ(≧Д≦)ノ") {
@Override
public void onNext(List<WXItemBean> wxItemBeen) {
mView.showMoreContent(wxItemBeen);
}
})
);
}
private void getSearchWechatData(String query) {
currentPage = 1;
addSubscribe(mDataManager.fetchWechatSearchListInfo(NUM_OF_PAGE,currentPage,query)
.compose(RxUtil.<WXHttpResponse<List<WXItemBean>>>rxSchedulerHelper())
.compose(RxUtil.<List<WXItemBean>>handleWXResult())
.subscribeWith(new CommonSubscriber<List<WXItemBean>>(mView) {
@Override
public void onNext(List<WXItemBean> wxItemBeen) {
mView.showContent(wxItemBeen);
}
})
);
}
}