package com.robonobo.gui.tasks;
import static com.robonobo.common.util.CodeUtil.*;
import static com.robonobo.common.util.FileUtil.*;
import static com.robonobo.gui.GuiUtil.*;
import java.io.*;
import java.util.*;
import com.robonobo.common.concurrent.CatchingRunnable;
import com.robonobo.core.api.model.Stream;
import com.robonobo.core.api.model.StreamWithFile;
import com.robonobo.gui.frames.RobonoboFrame;
import com.robonobo.gui.model.StreamComparator;
import com.robonobo.gui.sheets.TaskProgressSheet;
public class ImportITunesTask extends ImportFilesTask {
public ImportITunesTask(RobonoboFrame f) {
super(f, null);
title = "Importing from iTunes";
}
@Override
public void runTask() throws Exception {
log.info("Running import iTunes task");
statusText = "Reading list of files from iTunes";
completion = 0;
fireUpdated();
final TaskProgressSheet tps = new TaskProgressSheet(frame, "Reading file details from iTunes", "Reading", 0, true);
runOnUiThread(new CatchingRunnable() {
public void doRun() throws Exception {
tps.progressBar.setString(statusText);
frame.showSheet(tps);
}
});
FileFilter mp3Filter = new FileFilter() {
public boolean accept(File f) {
return "mp3".equalsIgnoreCase(getFileExtension(f));
}
};
files = frame.ctrl.getITunesLibrary(mp3Filter);
statusText = "Reading playlists from iTunes";
fireUpdated();
if (tps.isVisible()) {
runOnUiThread(new CatchingRunnable() {
public void doRun() throws Exception {
tps.total = files.size();
tps.progressBar.setMaximum(files.size());
tps.progressBar.setString(statusText);
}
});
}
Map<String, List<File>> plMap = frame.ctrl.getITunesPlaylists(mp3Filter);
final List<StreamWithFile> sl = new ArrayList<StreamWithFile>();
int i = 0;
for (File f : files) {
if (cancelRequested) {
cancelConfirmed();
return;
}
try {
Stream s = frame.ctrl.getStream(f);
StreamWithFile swf = new StreamWithFile();
swf.copyFrom(s);
swf.file = f;
sl.add(swf);
} catch (IOException e) {
log.error("Caught "+shortClassName(e.getClass())+" importing file "+f.getAbsolutePath()+" - skipping");
}
tps.setProgress(++i);
statusText = "Reading file " + i + " of " + files.size();
fireUpdated();
}
Collections.sort(sl, new StreamComparator());
final ChooseImportsSheet cfs = new ChooseImportsSheet(frame, sl, plMap, this);
runOnUiThread(new CatchingRunnable() {
public void doRun() throws Exception {
if (tps.isVisible())
tps.setVisible(false);
frame.showSheet(cfs);
}
});
}
}