package io.hefuyi.listener.mvp.presenter;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import java.util.List;
import io.hefuyi.listener.mvp.contract.PlaylistDetailContract;
import io.hefuyi.listener.mvp.model.Song;
import io.hefuyi.listener.mvp.usecase.GetPlaylistSongs;
import io.hefuyi.listener.util.ATEUtil;
import io.hefuyi.listener.util.ListenerUtil;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* Created by hefuyi on 2016/12/6.
*/
public class PlaylistDetailPresenter implements PlaylistDetailContract.Presenter{
private GetPlaylistSongs mUsecase;
private PlaylistDetailContract.View mView;
private CompositeSubscription mCompositeSubscription;
public PlaylistDetailPresenter(GetPlaylistSongs getPlaylistSongs) {
mUsecase = getPlaylistSongs;
}
@Override
public void loadPlaylistSongs(long playlistID) {
mCompositeSubscription.clear();
Subscription subscription = mUsecase.execute(new GetPlaylistSongs.RequestValues(playlistID))
.getSongList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Song>>() {
@Override
public void call(List<Song> songList) {
mView.showPlaylistSongs(songList);
}
});
mCompositeSubscription.add(subscription);
}
@Override
public void loadPlaylistArt(long firstAlbumID) {
Glide.with(mView.getContext())
.load(ListenerUtil.getAlbumArtUri(firstAlbumID))
.asBitmap()
.priority(Priority.IMMEDIATE)
.error(ATEUtil.getDefaultAlbumDrawable(mView.getContext()))
.into(new SimpleTarget<Bitmap>() {
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
mView.showPlaylistArt(errorDrawable);
}
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
mView.showPlaylistArt(resource);
}
});
}
@Override
public void attachView(PlaylistDetailContract.View view) {
mView = view;
mCompositeSubscription = new CompositeSubscription();
}
@Override
public void subscribe() {
}
@Override
public void unsubscribe() {
mCompositeSubscription.clear();
}
}