/** * */ 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.file.CategoryManager; import org.limewire.core.settings.DownloadSettings; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.player.PlayerMediator; import org.limewire.ui.swing.util.I18n; import org.limewire.ui.swing.util.NativeLaunchUtils; import com.google.inject.Inject; import com.google.inject.Provider; class RecentDownloadsMenu extends DelayedMnemonicMenu { private static final String emptyText = I18n.tr("(empty)"); private final CategoryManager categoryManager; private final Provider<PlayerMediator> playerMediator; @Inject public RecentDownloadsMenu(CategoryManager categoryManager, Provider<PlayerMediator> playerMediator) { super(I18n.tr("&Recent Downloads")); this.categoryManager = categoryManager; this.playerMediator = playerMediator; } @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) { Category category = categoryManager.getCategoryForFile(file); switch (category) { case AUDIO: case VIDEO: playerMediator.get().playOrLaunchNatively(file); break; case DOCUMENT: case IMAGE: NativeLaunchUtils.safeLaunchFile(file, categoryManager); 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())); } } }