package org.limewire.ui.swing.library.navigator; import java.awt.event.ActionEvent; import java.io.File; import javax.swing.filechooser.FileFilter; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.util.FileChooser; import org.limewire.ui.swing.util.GuiUtils; import org.limewire.ui.swing.util.I18n; import org.limewire.util.FileUtils; import com.google.inject.Inject; /** * Attempts to write the audio files within the selected * LocalFileList as an M3U list. */ class ExportListAction extends AbstractAction { private final LibraryNavigatorPanel libraryNavigatorPanel; @Inject public ExportListAction(LibraryNavigatorPanel libraryNavigatorPanel) { super(I18n.tr("Export List...")); this.libraryNavigatorPanel = libraryNavigatorPanel; } @Override public void actionPerformed(ActionEvent e) { LibraryNavItem item = libraryNavigatorPanel.getSelectedNavItem(); File file = FileChooser.getSaveAsFile(GuiUtils.getMainFrame(), I18n.tr("Export M3U List"), new File(FileChooser.getLastInputDirectory(), getSuggestedFileName(item.getDisplayText())), new M3UFileFilter()); //TODO: check for overwrite if (file == null) { return; } M3UList m3uList = new M3UList(file, item.getLocalFileList()); m3uList.save(); } /** * Suggests the SharedFileList name to be the m3u fileName. */ private String getSuggestedFileName(String displayName) { //TODO: remove illegal filename chars String ext = FileUtils.getFilenameNoExtension(displayName); if(ext.compareToIgnoreCase("m3u") == 0) return displayName; else return displayName + ".m3u"; } /** * Displays only directories and M3U lists in the * File Chooser. */ private static class M3UFileFilter extends FileFilter { @Override public boolean accept(File f) { return f.isDirectory() || f.getName().toLowerCase().endsWith("m3u"); } @Override public String getDescription() { return I18n.tr("Playlist Files (*.m3u)"); } } }