package io.hefuyi.listener.mvp.presenter;
import java.util.List;
import io.hefuyi.listener.mvp.contract.ArtistSongContract;
import io.hefuyi.listener.mvp.model.Song;
import io.hefuyi.listener.mvp.usecase.GetArtistSongs;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* Created by hefuyi on 2016/11/25.
*/
public class ArtistSongPresenter implements ArtistSongContract.Presenter{
private GetArtistSongs mUsecase;
private ArtistSongContract.View mView;
private CompositeSubscription mCompositeSubscription;
public ArtistSongPresenter(GetArtistSongs getArtistSongs) {
mUsecase = getArtistSongs;
}
@Override
public void attachView(ArtistSongContract.View view) {
mView = view;
mCompositeSubscription = new CompositeSubscription();
}
@Override
public void subscribe() {
throw new RuntimeException("please to call subscribe(long artistID)");
}
@Override
public void subscribe(long artistID) {
loadSongs(artistID);
}
@Override
public void unsubscribe() {
mCompositeSubscription.clear();
}
@Override
public void loadSongs(long artistID) {
mCompositeSubscription.clear();
Subscription subscription=mUsecase.execute(new GetArtistSongs.RequestValues(artistID))
.getSongList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Song>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Song> songList) {
mView.showSongs(songList);
}
});
mCompositeSubscription.add(subscription);
}
}