package com.sregg.android.tv.spotifyPlayer.utils;
import com.sregg.android.tv.spotifyPlayer.SpotifyTvApplication;
import kaaes.spotify.webapi.android.SpotifyService;
import kaaes.spotify.webapi.android.models.Album;
import kaaes.spotify.webapi.android.models.Artist;
import kaaes.spotify.webapi.android.models.Playlist;
import kaaes.spotify.webapi.android.models.Track;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class SpotifyUriLoader {
private static final String ALBUM_URI = "spotify:album:";
private static final String ARTIST_URI = "spotify:artist:";
private static final String TRACK_URI = "spotify:track:";
private static final String USER_URI = "spotify:user:";
private static final String USER_PLAYLIST_URI = ":playlist:";
public static void loadObjectFromUri(final SpotifyService service, final String uri, final SpotifyObjectLoaderCallback callback) {
if (uri.startsWith(ALBUM_URI)) {
loadAlbumFromUri(service, uri, callback);
} else if (uri.startsWith(ARTIST_URI)) {
loadArtistFromUri(service, uri, callback);
} else if (uri.startsWith(USER_URI) && uri.contains(USER_PLAYLIST_URI)) {
loadPlaylistFromUri(service, uri, callback);
} else if (uri.startsWith(TRACK_URI)) {
loadTrackFromUri(service, uri, callback);
}
}
private static void loadAlbumFromUri(SpotifyService service, String uri, final SpotifyObjectLoaderCallback callback) {
SpotifyTvApplication.getInstance().getSpotifyService().getAlbum(uri.replace(ALBUM_URI, ""), new Callback<Album>() {
@Override
public void success(Album album, Response response) {
if (callback != null) {
callback.success(album, response);
}
}
@Override
public void failure(RetrofitError error) {
if (callback != null) {
callback.failure(error);
}
}
});
}
private static void loadArtistFromUri(SpotifyService service, String uri, final SpotifyObjectLoaderCallback callback) {
SpotifyTvApplication.getInstance().getSpotifyService().getArtist(uri.replace(ARTIST_URI, ""), new Callback<Artist>() {
@Override
public void success(Artist artist, Response response) {
if (callback != null) {
callback.success(artist, response);
}
}
@Override
public void failure(RetrofitError error) {
if (callback != null) {
callback.failure(error);
}
}
});
}
private static void loadPlaylistFromUri(SpotifyService service, String uri, final SpotifyObjectLoaderCallback callback) {
String[] uriParts = uri.split(USER_PLAYLIST_URI);
if (uriParts.length == 2) {
String userId = uriParts[0].replace(USER_URI, "");
String playlistId = uriParts[1];
SpotifyTvApplication.getInstance().getSpotifyService().getPlaylist(userId, playlistId, new Callback<Playlist>() {
@Override
public void success(Playlist playlist, Response response) {
if (callback != null) {
callback.success(playlist, response);
}
}
@Override
public void failure(RetrofitError error) {
if (callback != null) {
callback.failure(error);
}
}
});
}
}
private static void loadTrackFromUri(SpotifyService service, String uri, final SpotifyObjectLoaderCallback callback) {
SpotifyTvApplication.getInstance().getSpotifyService().getTrack(uri.replace(TRACK_URI, ""), new Callback<Track>() {
@Override
public void success(Track track, Response response) {
if (callback != null) {
callback.success(track, response);
}
}
@Override
public void failure(RetrofitError error) {
if (callback != null) {
callback.failure(error);
}
}
});
}
public interface SpotifyObjectLoaderCallback {
public void success(Object object, Response response);
public void failure(RetrofitError error);
}
}