package org.limewire.ui.swing.library.table; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import org.limewire.core.api.Category; import org.limewire.core.api.file.CategoryManager; import org.limewire.core.api.library.LocalFileItem; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.library.LibraryMediator; import org.limewire.ui.swing.library.LibrarySelected; import org.limewire.ui.swing.library.navigator.LibraryNavigatorPanel; import org.limewire.ui.swing.library.navigator.LibraryNavItem.NavType; 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; /** * Tries to safely launch the given file. * If it is an allowed file type it will be launched, * otherwise explorer will be opened to the files location */ class LaunchFileAction extends AbstractAction { private final Provider<List<LocalFileItem>> selectedLocalFileItems; private final Provider<LibraryNavigatorPanel> libraryNavProvider; private final Provider<LibraryMediator> libraryMediator; private final Provider<PlayerMediator> playerProvider; private final CategoryManager categoryManager; private static volatile int publicSharedLaunches = 0; private static volatile int nonPublicSharedLaunches = 0; @Inject public LaunchFileAction(@LibrarySelected Provider<List<LocalFileItem>> selectedLocalFileItems, Provider<LibraryNavigatorPanel> libraryNavProvider, Provider<LibraryMediator> libraryMediator, Provider<PlayerMediator> playerProvider, CategoryManager categoryManager) { super(I18n.tr("Play/Open")); this.selectedLocalFileItems = selectedLocalFileItems; this.libraryNavProvider = libraryNavProvider; this.libraryMediator = libraryMediator; this.playerProvider = playerProvider; this.categoryManager = categoryManager; } @Override public void actionPerformed(ActionEvent e) { List<LocalFileItem> localFileItems = new ArrayList<LocalFileItem>(selectedLocalFileItems.get()); if (localFileItems.size() > 0) { // Get first selected item. LocalFileItem fileItem = localFileItems.get(0); if(playerProvider.get().isPlayable(fileItem.getFile())) { playerProvider.get().stop(); if(categoryManager.getCategoryForFile(fileItem.getFile()) == Category.AUDIO) { playerProvider.get().play(fileItem); playerProvider.get().setActivePlaylist(libraryMediator.get().getPlayableList()); } else { playerProvider.get().playOrLaunchNatively(fileItem.getFile()); playerProvider.get().setActivePlaylist(null); } } else { NativeLaunchUtils.safeLaunchFile(fileItem.getFile(), categoryManager); } if (libraryNavProvider.get().getSelectedNavItem().getType() == NavType.PUBLIC_SHARED) { publicSharedLaunches++; } else { nonPublicSharedLaunches++; } } } }