package com.wigwamlabs.spotify;
import android.os.Parcel;
import android.os.Parcelable;
public abstract class PendingPlaylistAction implements Parcelable, Session.Callback, Playlist.Callback {
private final String mLink;
private final boolean mLoginIfNeeded;
private Session mSession;
private Playlist mPlaylist;
public PendingPlaylistAction(String link, boolean loginIfNeeded) {
mLink = link;
mLoginIfNeeded = loginIfNeeded;
}
PendingPlaylistAction(Parcel in) {
mLink = in.readString();
final boolean[] flags = {false};
in.readBooleanArray(flags);
mLoginIfNeeded = flags[0];
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mLink);
dest.writeBooleanArray(new boolean[]{mLoginIfNeeded});
}
public void start(Session session) {
mSession = session;
switch (mSession.getConnectionState()) {
case Session.CONNECTION_STATE_LOGGED_OUT:
case Session.CONNECTION_STATE_UNDEFINED:
mSession.addCallback(this, false);
if (mLoginIfNeeded && !mSession.relogin()) {
onLoggedIn(SpotifyError.NO_CREDENTIALS);
}
break;
default:
onLoggedIn(SpotifyError.OK);
break;
}
}
@Override
public void onLoggedIn(int error) {
mSession.removeCallback(this);
if (error == SpotifyError.OK) {
mPlaylist = Playlist.create(mSession, mLink);
if (mPlaylist != null) {
mPlaylist.setCallback(this, true);
}
//TODO deal with invalid link
}
}
@Override
public void onConnectionStateUpdated(int state) {
}
@Override
public void onOfflineTracksToSyncChanged(boolean syncing, int remainingTracks, int approxTotalTracks) {
}
@Override
public void onPlaylistUpdateInProgress(boolean done) {
}
@Override
public void onPlaylistRenamed() {
}
@Override
public void onPlaylistStateChanged() {
if (mPlaylist.isLoaded()) {
mPlaylist.setCallback(null, false);
onPlaylistLoaded(mPlaylist);
mPlaylist = null;
}
}
protected abstract void onPlaylistLoaded(Playlist playlist);
}