package io.hefuyi.zhihudaily.mvp.presenter;
import io.hefuyi.zhihudaily.domain.FetchStoryDetailUsecase;
import io.hefuyi.zhihudaily.mvp.contract.StoryContract;
import io.hefuyi.zhihudaily.mvp.model.Story;
import rx.Subscription;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* Created by hefuyi on 16/8/23.
*/
public class StoryPresenter implements StoryContract.Presenter {
private FetchStoryDetailUsecase mUsecase;
private Subscription mSubscription;
private StoryContract.View mView;
public StoryPresenter(FetchStoryDetailUsecase fetchStoryDetailUsecase) {
this.mUsecase = fetchStoryDetailUsecase;
}
@Override
public void attachView(StoryContract.View view) {
this.mView = view;
}
@Override
public void onCreate() {
}
@Override
public void onStart() {
}
@Override
public void onPause() {
}
@Override
public void onStop() {
if (mSubscription != null && mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
}
@Override
public void refresh(String storyId) {
mUsecase.setStoryId(storyId);
mSubscription = mUsecase.execute()
.subscribeOn(Schedulers.io())
.onErrorReturn(new Func1<Throwable, Story>() {
@Override
public Story call(Throwable throwable) {
mView.hideProgressBar();
mView.showError();
return null;
}
})
.subscribe(new Action1<Story>() {
@Override
public void call(Story story) {
if (story != null) {
mView.hideProgressBar();
mView.showStory(story);
}
}
});
}
}