package com.limegroup.gnutella.gui.actions;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.Action;
import com.limegroup.gnutella.FileEventListener;
import com.limegroup.gnutella.FileManagerEvent;
import com.limegroup.gnutella.RouterService;
import com.limegroup.gnutella.gui.FileChooserHandler;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.gui.MessageService;
/**
* Opens a file chooser dialog centerened on {@link
* MessageService#getParentComponent()} and adds the selected file to the
* specially shared files if it is not being shared already.
*/
public class ShareFileSpeciallyAction extends AbstractAction {
public ShareFileSpeciallyAction() {
putValue(Action.NAME, GUIMediator.getStringResource
("SHARE_FILE_ACTION_NAME"));
putValue(Action.SHORT_DESCRIPTION, "Opens a Dialog and Lets You Choose a File to Share");
String mnemonic = GUIMediator.getStringResource("SHARE_FILE_ACTION_MNEMONIC");
if (mnemonic.length() > 0) {
putValue(Action.MNEMONIC_KEY, new Integer(mnemonic.charAt(0)));
}
}
public void actionPerformed(ActionEvent e) {
final File toShare = FileChooserHandler.getInputFile(MessageService.getParentComponent(),
"SHARE_FILE_ACTION_NAME",
"SHARE_FILE_ACTION_APPROVE_LABEL",
null);
if (toShare != null) {
GUIMediator.instance().schedule(new Runnable() {
public void run() {
RouterService.getFileManager().addFileAlways(toShare, new Listener());
}
});
}
}
private static class Listener implements FileEventListener {
public void handleFileEvent(final FileManagerEvent fev) {
GUIMediator.safeInvokeLater(new Runnable() {
public void run() {
if (fev.isAlreadySharedEvent())
GUIMediator.showFormattedError("SHARE_FILE_ALREADY_SHARED", new Object[] { fev.getFiles()[0] });
else if (!fev.isAddEvent()) // like FailedEvent, but potentially others too.
GUIMediator.showFormattedError("SHARE_FILE_FAILED", new Object[] { fev.getFiles()[0] });
}
});
}
}
}