/*-
* Copyright (C) 2011 Peter Baldwin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.peterbaldwin.vlcremote.loader;
import org.peterbaldwin.vlcremote.listener.ProgressListener;
import android.content.Context;
import org.peterbaldwin.vlcremote.model.Media;
import org.peterbaldwin.vlcremote.model.Playlist;
import org.peterbaldwin.vlcremote.model.Preferences;
import org.peterbaldwin.vlcremote.model.Remote;
import org.peterbaldwin.vlcremote.model.Track;
import org.peterbaldwin.vlcremote.net.MediaServer;
import org.peterbaldwin.vlcremote.parser.MediaParser;
public class PlaylistLoader extends ModelLoader<Remote<Playlist>> {
private final MediaServer mMediaServer;
private final String mSearch;
private final MediaParser mMediaParser;
private final ProgressListener mListener;
private boolean mIsCancelled = false;
public PlaylistLoader(Context context, MediaServer mediaServer, String search, ProgressListener listen) {
super(context);
mMediaServer = mediaServer;
mSearch = search;
mMediaParser = new MediaParser();
mListener = listen;
}
@Override
public Remote<Playlist> loadInBackground() {
mListener.onProgress(ProgressListener.START);
Remote<Playlist> p = mMediaServer == null ? null : mMediaServer.playlist(mSearch).load();
if(p == null || p.data == null || p.data.isEmpty() || !Preferences.get(getContext()).isParsePlaylistItems()) {
mListener.onProgress(ProgressListener.FINISHED);
return p;
}
int progress = ProgressListener.MAX/10;
mListener.onProgress(progress);
final int increment = (ProgressListener.MAX - progress) / p.data.size();
for(int i = 0; i < p.data.size(); i++) {
if(mIsCancelled) {
return null;
}
if(p.data.get(i) instanceof Track) {
Track track = (Track) p.data.get(i);
Media media = mMediaParser.parse(track.getUri());
if(media != null) {
media.copyPlaylistItemFrom(track);
p.data.set(i, media);
}
}
mListener.onProgress(progress + (increment * i));
}
mListener.onProgress(ProgressListener.FINISHED);
return p;
}
public void cancelBackgroundLoad() {
mIsCancelled = true;
}
}