package com.limegroup.gnutella.gui.actions; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import com.limegroup.gnutella.FileDetails; import com.limegroup.gnutella.browser.MagnetOptions; import com.limegroup.gnutella.gui.FileDetailsProvider; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.search.MagnetClipboardListener; import com.limegroup.gnutella.settings.QuestionsHandler; /** * Action that creates a list of magnet links for a selection of {@link * FileDesc FileDescs} and copies the list to the clipboard. * <p> * It also makes sure that the {@link * com.limegroup.gnutella.gui.search.MagnetClipboardListener} doesn't pick up * the exact same list when the main frame becomes active. */ public class CopyMagnetLinkToClipboardAction extends AbstractAction { private FileDetailsProvider provider; public CopyMagnetLinkToClipboardAction(FileDetailsProvider provider) { this.provider = provider; putValue(Action.NAME, GUIMediator.getStringResource ("MAGNET_COPY_MAGNET_LINKS_LABEL")); putValue(Action.SHORT_DESCRIPTION, GUIMediator.getStringResource ("MAGNET_COPY_MAGNET_LINKS_TOOLTIP")); } public void actionPerformed(ActionEvent e) { setClipboardString(); } private void setClipboardString() { FileDetails[] files = provider.getFileDetails(); StringBuffer buffer = new StringBuffer(); boolean isFirewalled = false; // TODO fberger maybe introduce this in the future // boolean notCopiedAll = false; String sep = System.getProperty("line.separator"); for (int i = 0; i < files.length; i++) { if (buffer.length() > 0) { buffer.append(sep); } MagnetOptions magnet = MagnetOptions.createMagnet(files[i]); if (magnet.isDownloadable()) { isFirewalled |= files[i].isFirewalled(); buffer.append(magnet.toExternalForm()); } // else { // notCopiedAll = true; // } } final String text = buffer.toString(); MagnetClipboardListener.getInstance().setCopiedText(text); StringSelection sel = new StringSelection(text); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, sel); if (isFirewalled) { GUIMediator.showWarning("MAGNET_COPY_MAGNET_LINKS_WARNING", QuestionsHandler.FIREWALLED_MAGNET_LINK); } } }