package name.caiyao.microreader.presenter.impl; import android.content.Context; import com.google.gson.Gson; import name.caiyao.microreader.api.zhihu.ZhihuRequest; import name.caiyao.microreader.bean.zhihu.ZhihuDaily; import name.caiyao.microreader.bean.zhihu.ZhihuDailyItem; import name.caiyao.microreader.config.Config; import name.caiyao.microreader.presenter.IZhihuPresenter; import name.caiyao.microreader.ui.iView.IZhihuFragment; import name.caiyao.microreader.utils.CacheUtil; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by 蔡小木 on 2016/4/23 0023. */ public class ZhihuPresenterImpl extends BasePresenterImpl implements IZhihuPresenter { private IZhihuFragment mZhihuFragment; private CacheUtil mCacheUtil; private Gson gson = new Gson(); public ZhihuPresenterImpl(IZhihuFragment iZhihuFragment, Context context) { if (iZhihuFragment == null) throw new IllegalArgumentException("iZhihuFragment must not be null"); mZhihuFragment = iZhihuFragment; mCacheUtil = CacheUtil.get(context); } @Override public void getLastZhihuNews() { mZhihuFragment.showProgressDialog(); Subscription subscription = ZhihuRequest.getZhihuApi().getLastDaily() .map(new Func1<ZhihuDaily, ZhihuDaily>() { @Override public ZhihuDaily call(ZhihuDaily zhihuDaily) { String date = zhihuDaily.getDate(); for (ZhihuDailyItem zhihuDailyItem : zhihuDaily.getStories()) { zhihuDailyItem.setDate(date); } return zhihuDaily; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ZhihuDaily>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mZhihuFragment.hidProgressDialog(); mZhihuFragment.showError(e.getMessage()); } @Override public void onNext(ZhihuDaily zhihuDaily) { mZhihuFragment.hidProgressDialog(); mCacheUtil.put(Config.ZHIHU, gson.toJson(zhihuDaily)); mZhihuFragment.updateList(zhihuDaily); } }); addSubscription(subscription); } @Override public void getTheDaily(String date) { Subscription subscription = ZhihuRequest.getZhihuApi().getTheDaily(date) .map(new Func1<ZhihuDaily, ZhihuDaily>() { @Override public ZhihuDaily call(ZhihuDaily zhihuDaily) { String date = zhihuDaily.getDate(); for (ZhihuDailyItem zhihuDailyItem : zhihuDaily.getStories()) { zhihuDailyItem.setDate(date); } return zhihuDaily; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ZhihuDaily>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); mZhihuFragment.hidProgressDialog(); mZhihuFragment.showError(e.getMessage()); } @Override public void onNext(ZhihuDaily zhihuDaily) { mZhihuFragment.hidProgressDialog(); mZhihuFragment.updateList(zhihuDaily); } }); addSubscription(subscription); } @Override public void getLastFromCache() { if (mCacheUtil.getAsJSONObject(Config.ZHIHU) != null) { ZhihuDaily zhihuDaily = gson.fromJson(mCacheUtil.getAsJSONObject(Config.ZHIHU).toString(), ZhihuDaily.class); mZhihuFragment.updateList(zhihuDaily); } } }