1 package tim.prune.load;
4 import java.util.TreeSet;
5 import javax.swing.JFileChooser;
8 import tim.prune.GenericFunction;
9 import tim.prune.I18nManager;
10 import tim.prune.UpdateMessageBroker;
11 import tim.prune.config.Config;
12 import tim.prune.data.AudioFile;
13 import tim.prune.undo.UndoLoadAudios;
16 * Class to manage the loading of audio files
18 public class AudioLoader extends GenericFunction
20 private JFileChooser _fileChooser = null;
21 private GenericFileFilter _fileFilter = null;
22 private TreeSet<AudioFile> _fileList = null;
27 * @param inApp Application object to inform of data load
29 public AudioLoader(App inApp)
32 _fileFilter = new AudioFileFilter();
35 /** Get the name key */
36 public String getNameKey() {
37 return "function.loadaudio";
41 * Open the GUI to select options and start the load
45 // Create file chooser if necessary
46 if (_fileChooser == null)
48 _fileChooser = new JFileChooser();
49 _fileChooser.setMultiSelectionEnabled(true);
50 _fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
51 _fileChooser.setFileFilter(_fileFilter);
52 _fileChooser.setDialogTitle(I18nManager.getText(getNameKey()));
53 // start from directory in config if already set by other operations
54 String configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);
55 if (configDir == null) {configDir = Config.getConfigString(Config.KEY_TRACK_DIR);}
56 if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
58 // Show file dialog to choose file / directory(ies)
59 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
61 _fileList = new TreeSet<AudioFile>(new MediaSorter());
62 processFileList(_fileChooser.getSelectedFiles());
63 final int numFiles = _fileList.size();
65 _app.showErrorMessage(getNameKey(), "error.audioload.nofilesfound");
69 // Construct undo object
70 UndoLoadAudios undo = new UndoLoadAudios(numFiles);
71 _app.getTrackInfo().addAudios(_fileList);
72 _app.completeFunction(undo, I18nManager.getText("confirm.audioload"));
73 UpdateMessageBroker.informSubscribers();
79 * Process an array of File objects to load
80 * @param inFiles array of selected Files
82 private void processFileList(File[] inFiles)
84 for (File file : inFiles)
86 if (file.exists() && file.canRead())
89 if (_fileFilter.accept(file)) {
90 _fileList.add(new AudioFile(file));
93 else if (file.isDirectory()) {
94 processFileList(file.listFiles());