package io.hefuyi.zhihudaily.mvp.presenter;
import io.hefuyi.zhihudaily.domain.FetchBeforeDailyStoriesUsecase;
import io.hefuyi.zhihudaily.domain.FetchLatestDailyStoriesUsecase;
import io.hefuyi.zhihudaily.mvp.contract.DailyStoryContract;
import io.hefuyi.zhihudaily.mvp.model.DailyStories;
import rx.Subscription;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* Created by hefuyi on 16/8/22.
*/
public class DailyStoryPresenter implements DailyStoryContract.Presenter{
private FetchBeforeDailyStoriesUsecase mBeforeDailyStoriesUsecase;
private FetchLatestDailyStoriesUsecase mLatestDailyStoriesUsecase;
private DailyStoryContract.View mView;
private CompositeSubscription mCompositeSubscription;
public DailyStoryPresenter(FetchLatestDailyStoriesUsecase latestDailyStoriesUsecase, FetchBeforeDailyStoriesUsecase beforeDailyStoriesUsecase) {
this.mBeforeDailyStoriesUsecase = beforeDailyStoriesUsecase;
this.mLatestDailyStoriesUsecase = latestDailyStoriesUsecase;
}
@Override
public void attachView(DailyStoryContract.View view) {
this.mView = view;
mCompositeSubscription = new CompositeSubscription();
}
@Override
public void onCreate() {
}
@Override
public void onStart() {
}
@Override
public void onPause() {
}
@Override
public void onStop() {
if (mCompositeSubscription != null && mCompositeSubscription.isUnsubscribed()) {
mCompositeSubscription.unsubscribe();
}
}
@Override
public void refresh() {
mView.showRefreshing();
Subscription subscription = mLatestDailyStoriesUsecase.execute()
.subscribeOn(Schedulers.io())
.onErrorReturn(new Func1<Throwable, DailyStories>() {
@Override
public DailyStories call(Throwable throwable) {
mView.showError("refresh error");
mView.hideRefreshing();
return null;
}
})
.subscribe(new Action1<DailyStories>() {
@Override
public void call(DailyStories dailyStories) {
if (dailyStories != null) {
mView.hideRefreshing();
mView.showStory(dailyStories);
}
}
});
mCompositeSubscription.add(subscription);
}
@Override
public void loadMore(String date) {
mBeforeDailyStoriesUsecase.setDate(date);
Subscription subscription = mBeforeDailyStoriesUsecase.execute()
.subscribeOn(Schedulers.io())
.onErrorReturn(new Func1<Throwable, DailyStories>() {
@Override
public DailyStories call(Throwable throwable) {
mView.showError("load more error");
return null;
}
})
.subscribe(new Action1<DailyStories>() {
@Override
public void call(DailyStories dailyStories) {
if (dailyStories != null) {
mView.appendStory(dailyStories);
}
}
});
mCompositeSubscription.add(subscription);
}
}