package com.tevinjeffrey.rutgersct.ui.course;
import com.tevinjeffrey.rutgersct.rutgersapi.RetroRutgers;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Course;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Request;
import com.tevinjeffrey.rutgersct.ui.base.BasePresenter;
import com.tevinjeffrey.rutgersct.ui.base.View;
import com.tevinjeffrey.rutgersct.utils.AndroidMainThread;
import com.tevinjeffrey.rutgersct.utils.BackgroundThread;
import com.tevinjeffrey.rutgersct.utils.RxUtils;
import java.util.List;
import javax.inject.Inject;
import rx.Scheduler;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.schedulers.Schedulers;
public class CoursePresenterImpl extends BasePresenter implements CoursePresenter {
private static final String TAG = CoursePresenterImpl.class.getSimpleName();
@Inject
RetroRutgers mRetroRutgers;
@Inject
@AndroidMainThread
Scheduler mMainThread;
@Inject
@BackgroundThread
Scheduler mBackgroundThread;
private Subscription mSubscription;
private Request mRequest;
private boolean isLoading;
public CoursePresenterImpl(Request mRequest) {
this.mRequest = mRequest;
}
@Override
public void loadCourses(boolean pullToRefresh) {
if (getView() != null)
getView().showLoading(pullToRefresh);
cancePreviousSubscription();
Subscriber<List<Course>> mSubscriber = new Subscriber<List<Course>>() {
@Override
public void onCompleted() {
if (getView() != null)
getView().showLoading(false);
}
@Override
public void onError(Throwable e) {
//Removes the animated loading drawable
if (getView() != null)
getView().showLoading(false);
//Lets the view decide what to display depending on what type of exception it is.
if (getView() != null)
getView().showError(e);
}
@Override
public void onNext(List<Course> courseList) {
if (getView() != null)
getView().setData(courseList);
if (courseList.size() > 0) {
if (getView() != null)
getView().showLayout(View.LayoutType.LIST);
}
}
};
mSubscription = mRetroRutgers.getCourses(mRequest)
.doOnSubscribe(new Action0() {
@Override
public void call() {
isLoading = true;
}
})
.doOnTerminate(new Action0() {
@Override
public void call() {
isLoading = false;
}
})
.subscribeOn(mBackgroundThread)
.observeOn(mMainThread)
.subscribe(mSubscriber);
}
private void cancePreviousSubscription() {
RxUtils.unsubscribeIfNotNull(mSubscription);
}
public CourseView getView() {
return (CourseView) super.getView();
}
@Override
public boolean isLoading() {
return isLoading;
}
@Override
public String toString() {
return TAG;
}
}