/** * */ package org.limewire.ui.swing.menu; import java.awt.event.ActionEvent; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.swing.JMenuItem; import org.limewire.core.api.Category; import org.limewire.core.api.library.LibraryManager; import org.limewire.core.settings.DownloadSettings; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.action.MnemonicMenu; import org.limewire.ui.swing.player.PlayerUtils; import org.limewire.ui.swing.util.CategoryUtils; import org.limewire.ui.swing.util.I18n; import org.limewire.ui.swing.util.NativeLaunchUtils; import org.limewire.util.FileUtils; import org.limewire.util.MediaType; import com.google.inject.Inject; class RecentDownloadsMenu extends MnemonicMenu { private static final String emptyText = I18n.tr("(empty)"); @Inject public RecentDownloadsMenu(final LibraryManager libraryManager) { super(I18n.tr("&Recent Downloads")); } @Override public void createMenuItems() { List<File> files = null; synchronized (DownloadSettings.RECENT_DOWNLOADS) { files = new ArrayList<File>(DownloadSettings.RECENT_DOWNLOADS.get()); } Collections.sort(files, new FileDateMostToLeastRecentComparator()); if (files.size() > 0) { for (final File file : files) { addRecentDownloadAction(file); } addSeparator(); add(new AbstractAction(I18n.tr("Clear List")) { @Override public void actionPerformed(ActionEvent e) { DownloadSettings.RECENT_DOWNLOADS.clear(); } }); } else { add(new JMenuItem(emptyText)).setEnabled(false); } } private void addRecentDownloadAction(final File file) { add(new AbstractAction(file.getName()) { @Override public void actionPerformed(ActionEvent e) { MediaType mediaType = MediaType.getMediaTypeForExtension(FileUtils .getFileExtension(file)); Category category = CategoryUtils.getCategory(mediaType); switch (category) { case AUDIO: PlayerUtils.playOrLaunch(file); break; case DOCUMENT: case IMAGE: case VIDEO: NativeLaunchUtils.safeLaunchFile(file); break; case PROGRAM: case OTHER: NativeLaunchUtils.launchExplorer(file); break; default: break; } } }); } /** * Orders files from most to least recent. */ private static class FileDateMostToLeastRecentComparator implements Comparator<File> { @Override public int compare(File o1, File o2) { return -1 * Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified())); } } }