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.library.LocalFileItem;
import org.limewire.ui.swing.action.AbstractAction;
import org.limewire.ui.swing.library.LibrarySelected;
import org.limewire.ui.swing.library.navigator.LibraryNavigatorPanel;
import org.limewire.ui.swing.player.PlayerMediator;
import org.limewire.ui.swing.player.PlayerUtils;
import org.limewire.ui.swing.settings.SwingUiSettings;
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<PlayerMediator> playerProvider;
@Inject
public LaunchFileAction(@LibrarySelected Provider<List<LocalFileItem>> selectedLocalFileItems,
Provider<LibraryNavigatorPanel> libraryNavProvider,
Provider<PlayerMediator> playerProvider) {
super(I18n.tr("Play/Open"));
this.selectedLocalFileItems = selectedLocalFileItems;
this.libraryNavProvider = libraryNavProvider;
this.playerProvider = playerProvider;
}
@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 (SwingUiSettings.PLAYER_ENABLED.getValue() && PlayerUtils.isPlayableFile(fileItem.getFile())) {
// Set active playlist and play file item.
playerProvider.get().setActivePlaylist(libraryNavProvider.get().getSelectedNavItem());
playerProvider.get().play(fileItem);
} else {
NativeLaunchUtils.safeLaunchFile(fileItem.getFile());
}
}
}
}