package vazkii.minetunes.playlist.provider;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
import com.mpatric.mp3agic.InvalidDataException;
import com.mpatric.mp3agic.UnsupportedTagException;
import vazkii.minetunes.MineTunes;
import vazkii.minetunes.gui.GuiDevTools;
import vazkii.minetunes.player.chooser.filter.MusicFilter;
import vazkii.minetunes.playlist.MP3Metadata;
import vazkii.minetunes.playlist.Playlist;
public class ProviderDirectory extends PlaylistProvider {
public static final ProviderDirectory instance = new ProviderDirectory();
@Override
public Playlist provide(File file, IProviderStateCallback callback) {
foundFiles = 0;
processedFiles = 0;
this.callback = callback;
Set<MP3Metadata> metadataSet = new TreeSet();
crawlDirectory(file, true, metadataSet);
crawlDirectory(file, false, metadataSet);
Playlist playlist = new Playlist(file, metadataSet);
return playlist;
}
private void crawlDirectory(File dir, boolean scan, Set<MP3Metadata> metadataSet) {
GuiDevTools.debugLog("Crawling " + dir.getName());
for(File file : dir.listFiles(MusicFilter.instance)) {
if(file.isHidden())
continue;
if(file.isDirectory())
crawlDirectory(file, scan, metadataSet);
else {
if(scan)
foundFiles++;
else try {
name = file.getName();
metadataSet.add(new MP3Metadata(processedFiles, file));
processedFiles++;
} catch(Exception e) {
e.printStackTrace();
}
updateState();
}
}
}
@Override
public String getDescription() {
return "Directory-based Playlist Provider";
}
}