package io.hefuyi.zhihudaily.mvp.presenter;
import io.hefuyi.zhihudaily.domain.FetchThemeBeforeStoryUsecase;
import io.hefuyi.zhihudaily.domain.FetchThemeUsecase;
import io.hefuyi.zhihudaily.mvp.contract.ThemeStoryContract;
import io.hefuyi.zhihudaily.mvp.model.Theme;
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 ThemeStoryPresenter implements ThemeStoryContract.Presenter {
private CompositeSubscription mCompositeSubscription;
private FetchThemeUsecase mThemeUsecase;
private FetchThemeBeforeStoryUsecase mBeforeStoryUsecase;
private ThemeStoryContract.View mView;
public ThemeStoryPresenter(FetchThemeUsecase themeUsecase, FetchThemeBeforeStoryUsecase themeBeforeStoryUsecase) {
this.mThemeUsecase = themeUsecase;
this.mBeforeStoryUsecase = themeBeforeStoryUsecase;
}
@Override
public void attachView(ThemeStoryContract.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(String themeId) {
mView.showRefreshing();
mThemeUsecase.setThemeId(themeId);
Subscription subscription = mThemeUsecase.execute()
.subscribeOn(Schedulers.io())
.onErrorReturn(new Func1<Throwable, Theme>() {
@Override
public Theme call(Throwable throwable) {
mView.hideRefreshing();
mView.showError("refresh error");
return null;
}
})
.subscribe(new Action1<Theme>() {
@Override
public void call(Theme theme) {
if (theme != null) {
mView.hideRefreshing();
mView.showStory(theme);
}
}
});
mCompositeSubscription.add(subscription);
}
@Override
public void loadMore(String themeId, String lastStoryId) {
mBeforeStoryUsecase.setThemeId(themeId);
mBeforeStoryUsecase.setStoryId(lastStoryId);
Subscription subscription = mBeforeStoryUsecase.execute()
.subscribeOn(Schedulers.io())
.onErrorReturn(new Func1<Throwable, Theme>() {
@Override
public Theme call(Throwable throwable) {
mView.showError("load more error");
return null;
}
})
.subscribe(new Action1<Theme>() {
@Override
public void call(Theme theme) {
if (theme != null) {
mView.appendStory(theme);
}
}
});
mCompositeSubscription.add(subscription);
}
}