package com.xiaomai.geek.presenter.github; import com.xiaomai.geek.common.utils.Const; import com.xiaomai.geek.data.api.GitHubApi; import com.xiaomai.geek.data.module.User; import com.xiaomai.geek.data.net.response.BaseResponseObserver; import com.xiaomai.geek.presenter.BaseRxPresenter; import com.xiaomai.geek.view.ILoadMoreView; import java.util.ArrayList; import javax.inject.Inject; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; import rx.schedulers.Schedulers; /** * Created by XiaoMai on 2017/4/29. */ public class UserListPresenter extends BaseRxPresenter<ILoadMoreView<ArrayList<User>>> { private final GitHubApi gitHubApi; @Inject public UserListPresenter(GitHubApi gitHubApi) { this.gitHubApi = gitHubApi; } public void loadUsers(String userName, boolean isSelf, @GitHubApi.UserType int type) { loadUsers(userName, isSelf, type, 1, false); } public void loadUsers(final String userName, boolean isSelf, @GitHubApi.UserType int type, int page, final boolean loadMore) { Observable<ArrayList<User>> observable = null; switch (type) { case GitHubApi.FOLLOWER: if (isSelf) observable = gitHubApi.getMyFollowers(page); else observable = gitHubApi.getUserFollowers(userName, page); break; case GitHubApi.FOLLOWING: if (isSelf) observable = gitHubApi.getMyFollowing(page); else observable = gitHubApi.getUserFollowing(userName, page); break; } if (observable == null) return; mCompositeSubscription.add(observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(new Action0() { @Override public void call() { if (!loadMore) getMvpView().showLoading(); } }) .doOnTerminate(new Action0() { @Override public void call() { if (!loadMore) getMvpView().dismissLoading(); } }) .subscribe(new BaseResponseObserver<ArrayList<User>>() { @Override public void onSuccess(ArrayList<User> users) { if (loadMore) { if (users == null || users.size() == 0) getMvpView().loadComplete(); else { getMvpView().showMoreResult(users); if (users.size() < Const.PAGE_SIZE) getMvpView().loadComplete(); } } else { if (users == null || users.size() == 0) getMvpView().showEmpty(); else getMvpView().showContent(users); } } @Override public void onError(Throwable e) { getMvpView().showError(e); } }) ); } }