package com.liuguangqiang.idaily.ui.model; import com.liuguangqiang.idaily.domain.RetrofitClient; import com.liuguangqiang.idaily.domain.entity.BaseEntity; import com.liuguangqiang.idaily.domain.entity.Daily; import com.liuguangqiang.idaily.domain.entity.StorySection; import com.liuguangqiang.idaily.domain.service.DailyService; import com.liuguangqiang.idaily.ui.view.MainView; import com.liuguangqiang.idaily.ui.view.RequestView; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import hugo.weaving.DebugLog; import rx.Observable; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import timber.log.Timber; /** * Created by Eric on 15/6/25. */ public class MainModel { private int lastDatetime = 0; private List<BaseEntity> data = new ArrayList<>(); private DailyService dailyService; @Inject public MainModel() { dailyService = RetrofitClient.getInstance().create(DailyService.class); } private MainView view; private RequestView requestView; public void setView(MainView view, RequestView<BaseEntity> requestView) { this.view = view; this.requestView = requestView; } public void getDaily() { getDaily(lastDatetime); } private StorySection section; @DebugLog public void getDaily(final int datetime) { Timber.d("getDaily %d ", datetime); Observable<Daily> observable = datetime > 0 ? dailyService.getBefore(datetime) : dailyService.getLatest(); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Daily>() { @Override public void onCompleted() { requestView.onRequestFinished(); } @Override public void onError(Throwable e) { } @Override public void onNext(Daily daily) { if (daily != null) { lastDatetime = daily.getDate(); data.clear(); if (datetime == 0) { view.bindTopStories(daily.getTop_stories()); } else { section = new StorySection(daily.getDate()); data.add(section); } data.addAll(daily.getStories()); requestView.onRequestSuccess(data); } } }); Observable<Daily> observabl1e = dailyService.getLatest(); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Daily>() { @Override public void onCompleted() { requestView.onRequestFinished(); } @Override public void onError(Throwable e) { } @Override public void onNext(Daily daily) { } }); } }