* drop to file works on ubuntu now :D
This commit is contained in:
parent
298f1f7585
commit
036eefc5b9
|
@ -2,6 +2,8 @@
|
|||
package net.sourceforge.filebot.ui;
|
||||
|
||||
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
|
||||
import javax.swing.Action;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.KeyStroke;
|
||||
|
@ -32,13 +34,18 @@ public class FileBotUtil {
|
|||
return filename.replaceAll("[\\\\/:*?\"<>|]", "");
|
||||
}
|
||||
|
||||
public static final DataFlavor uriListFlavor = createUriListFlavor();
|
||||
|
||||
public static boolean isFileListFlavorSupportedByWindowManager() {
|
||||
String os = System.getProperty("os.name");
|
||||
|
||||
if (os.toLowerCase().contains("windows"))
|
||||
return true;
|
||||
private static DataFlavor createUriListFlavor() {
|
||||
try {
|
||||
return new DataFlavor("text/uri-list;class=java.lang.String");
|
||||
} catch (ClassNotFoundException e) {
|
||||
// will never happen
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -100,15 +100,13 @@ public class FileTree extends FileBotTree {
|
|||
|
||||
|
||||
@Override
|
||||
protected boolean load(List<File> files) {
|
||||
protected void load(List<File> files) {
|
||||
DefaultMutableTreeNode root = (DefaultMutableTreeNode) getModel().getRoot();
|
||||
|
||||
File fileArray[] = new File[files.size()];
|
||||
files.toArray(fileArray);
|
||||
|
||||
addFiles(root, fileArray);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ public class SfvTransferablePolicy extends MultiTransferablePolicy {
|
|||
|
||||
|
||||
@Override
|
||||
protected boolean load(List<File> files) {
|
||||
protected void load(List<File> files) {
|
||||
synchronized (ChecksumComputationExecutor.getInstance()) {
|
||||
ChecksumComputationExecutor.getInstance().pause();
|
||||
|
||||
|
@ -60,8 +60,6 @@ public class SfvTransferablePolicy extends MultiTransferablePolicy {
|
|||
|
||||
ChecksumComputationExecutor.getInstance().resume();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -134,16 +132,16 @@ public class SfvTransferablePolicy extends MultiTransferablePolicy {
|
|||
|
||||
|
||||
@Override
|
||||
protected boolean load(List<File> files) {
|
||||
protected void load(List<File> files) {
|
||||
if (files.isEmpty())
|
||||
return true;
|
||||
return;
|
||||
|
||||
synchronized (ChecksumComputationExecutor.getInstance()) {
|
||||
ChecksumComputationExecutor.getInstance().pause();
|
||||
|
||||
File firstFile = files.get(0);
|
||||
|
||||
if (files.size() == 1 && firstFile.isDirectory()) {
|
||||
if ((files.size() == 1) && firstFile.isDirectory()) {
|
||||
for (File f : firstFile.listFiles()) {
|
||||
load(f, firstFile, "");
|
||||
}
|
||||
|
@ -155,8 +153,6 @@ public class SfvTransferablePolicy extends MultiTransferablePolicy {
|
|||
|
||||
ChecksumComputationExecutor.getInstance().resume();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,10 +15,10 @@ import net.sourceforge.filebot.ui.FileBotUtil;
|
|||
|
||||
public class FileTransferable implements Transferable {
|
||||
|
||||
private static final boolean fileListFlavorSupported = FileBotUtil.isFileListFlavorSupportedByWindowManager();
|
||||
|
||||
private List<File> files;
|
||||
|
||||
private DataFlavor[] supportedFlavors = { DataFlavor.javaFileListFlavor, FileBotUtil.uriListFlavor };
|
||||
|
||||
|
||||
public FileTransferable(File... fileArray) {
|
||||
files = new ArrayList<File>(fileArray.length);
|
||||
|
@ -38,7 +38,7 @@ public class FileTransferable implements Transferable {
|
|||
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
|
||||
if (flavor.isFlavorJavaFileListType())
|
||||
return files;
|
||||
else if (flavor.isFlavorTextType())
|
||||
else if (flavor.equals(FileBotUtil.uriListFlavor))
|
||||
return getUriList();
|
||||
else
|
||||
throw new UnsupportedFlavorException(flavor);
|
||||
|
@ -54,7 +54,7 @@ public class FileTransferable implements Transferable {
|
|||
|
||||
for (File file : files) {
|
||||
sb.append(file.toURI());
|
||||
sb.append("\n");
|
||||
sb.append("\r\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
|
@ -62,21 +62,16 @@ public class FileTransferable implements Transferable {
|
|||
|
||||
|
||||
public DataFlavor[] getTransferDataFlavors() {
|
||||
if (fileListFlavorSupported) {
|
||||
DataFlavor[] flavours = { DataFlavor.javaFileListFlavor };
|
||||
return flavours;
|
||||
} else {
|
||||
DataFlavor[] flavours = { DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor };
|
||||
return flavours;
|
||||
}
|
||||
return supportedFlavors;
|
||||
}
|
||||
|
||||
|
||||
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
||||
if (fileListFlavorSupported)
|
||||
return flavor.isFlavorJavaFileListType();
|
||||
else
|
||||
return flavor.isFlavorJavaFileListType() || flavor.isFlavorTextType();
|
||||
}
|
||||
for (DataFlavor supportedFlavor : supportedFlavors) {
|
||||
if (flavor.equals(supportedFlavor))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,8 @@ public class SaveableExportHandler implements ExportHandler {
|
|||
List<File> files = (List<File>) data.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
|
||||
for (File file : files) {
|
||||
file.deleteOnExit();
|
||||
if (file.exists())
|
||||
file.deleteOnExit();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -49,7 +49,9 @@ public class TransferablePolicyImportHandler implements ImportHandler {
|
|||
|
||||
Transferable t = support.getTransferable();
|
||||
|
||||
return transferablePolicySupport.getTransferablePolicy().handleTransferable(t, add);
|
||||
transferablePolicySupport.getTransferablePolicy().handleTransferable(t, add);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,11 +20,11 @@ public abstract class BackgroundFileTransferablePolicy<V> extends FileTransferab
|
|||
|
||||
|
||||
@Override
|
||||
public boolean handleTransferable(Transferable tr, boolean add) {
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
List<File> files = getFilesFromTransferable(tr);
|
||||
|
||||
if (files == null)
|
||||
return false;
|
||||
return;
|
||||
|
||||
if (!add)
|
||||
clear();
|
||||
|
@ -32,8 +32,6 @@ public abstract class BackgroundFileTransferablePolicy<V> extends FileTransferab
|
|||
backgroundWorker = new BackgroundWorker(files);
|
||||
backgroundWorker.addPropertyChangeListener(new BackgroundWorkerListener());
|
||||
backgroundWorker.execute();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,7 +46,8 @@ public abstract class BackgroundFileTransferablePolicy<V> extends FileTransferab
|
|||
|
||||
|
||||
/**
|
||||
* Receives data chunks from the publish method asynchronously on the Event Dispatch Thread.
|
||||
* Receives data chunks from the publish method asynchronously on the Event Dispatch
|
||||
* Thread.
|
||||
*
|
||||
* @param chunks
|
||||
*/
|
||||
|
|
|
@ -8,90 +8,59 @@ import java.awt.datatransfer.UnsupportedFlavorException;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.sourceforge.filebot.ui.FileBotUtil;
|
||||
|
||||
|
||||
public abstract class FileTransferablePolicy extends TransferablePolicy {
|
||||
|
||||
@Override
|
||||
public boolean accept(Transferable tr) {
|
||||
if (!isEnabled())
|
||||
return false;
|
||||
|
||||
List<File> files = getFilesFromTransferable(tr);
|
||||
|
||||
if (files == null || files.isEmpty())
|
||||
if ((files == null) || files.isEmpty())
|
||||
return false;
|
||||
|
||||
return accept(files);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected List<File> getFilesFromTransferable(Transferable tr) {
|
||||
List<File> files = getFilesFromFileTransferable(tr);
|
||||
|
||||
// if there is no file transferable, look if there is a string transferable that
|
||||
// contains file uris
|
||||
if (files == null)
|
||||
files = getFilesFromStringTransferable(tr);
|
||||
|
||||
Collections.sort(files);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
|
||||
protected List<File> getFilesFromFileTransferable(Transferable tr) {
|
||||
if (!tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
|
||||
return null;
|
||||
|
||||
try {
|
||||
List<?> list = (List<?>) tr.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
|
||||
return (List<File>) tr.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
} else if (tr.isDataFlavorSupported(FileBotUtil.uriListFlavor)) {
|
||||
String transferString = (String) tr.getTransferData(DataFlavor.stringFlavor);
|
||||
|
||||
ArrayList<File> files = new ArrayList<File>(list.size());
|
||||
String lines[] = transferString.split("\r?\n");
|
||||
ArrayList<File> files = new ArrayList<File>(lines.length);
|
||||
|
||||
for (Object object : list)
|
||||
files.add((File) object);
|
||||
for (String line : lines) {
|
||||
if (line.startsWith("#")) {
|
||||
// the line is a comment (as per the RFC 2483)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!files.isEmpty())
|
||||
return files;
|
||||
} catch (UnsupportedFlavorException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
File file = new File(new URI(line));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
protected List<File> getFilesFromStringTransferable(Transferable tr) {
|
||||
if (!tr.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||
return null;
|
||||
|
||||
try {
|
||||
String transferString = (String) tr.getTransferData(DataFlavor.stringFlavor);
|
||||
|
||||
String lines[] = transferString.split("\r?\n");
|
||||
ArrayList<File> files = new ArrayList<File>(lines.length);
|
||||
|
||||
for (String line : lines) {
|
||||
try {
|
||||
File file = new File(new URI(line));
|
||||
|
||||
if (file.exists())
|
||||
files.add(file);
|
||||
} catch (URISyntaxException e) {
|
||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.WARNING, "Invalid file url: " + line, e);
|
||||
if (file.exists())
|
||||
files.add(file);
|
||||
} catch (Exception e) {
|
||||
// URISyntaxException, IllegalArgumentException
|
||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.WARNING, "Invalid file url: " + line, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!files.isEmpty())
|
||||
return files;
|
||||
} catch (UnsupportedFlavorException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
|
@ -102,16 +71,19 @@ public abstract class FileTransferablePolicy extends TransferablePolicy {
|
|||
}
|
||||
|
||||
|
||||
public boolean handleTransferable(Transferable tr, boolean add) {
|
||||
@Override
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
List<File> files = getFilesFromTransferable(tr);
|
||||
|
||||
if (files == null)
|
||||
return false;
|
||||
return;
|
||||
|
||||
Collections.sort(files);
|
||||
|
||||
if (!add)
|
||||
clear();
|
||||
|
||||
return load(files);
|
||||
load(files);
|
||||
}
|
||||
|
||||
|
||||
|
@ -124,14 +96,10 @@ public abstract class FileTransferablePolicy extends TransferablePolicy {
|
|||
}
|
||||
|
||||
|
||||
protected boolean load(List<File> files) {
|
||||
boolean success = false;
|
||||
|
||||
protected void load(List<File> files) {
|
||||
for (File file : files) {
|
||||
success |= load(file);
|
||||
load(file);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ public class MultiTransferablePolicy extends TransferablePolicy {
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean accept(Transferable tr) {
|
||||
if (!isEnabled())
|
||||
return false;
|
||||
|
@ -44,13 +45,14 @@ public class MultiTransferablePolicy extends TransferablePolicy {
|
|||
}
|
||||
|
||||
|
||||
public boolean handleTransferable(Transferable tr, boolean add) {
|
||||
@Override
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
for (TransferablePolicy policy : policies) {
|
||||
if (policy.accept(tr))
|
||||
return policy.handleTransferable(tr, add);
|
||||
if (policy.accept(tr)) {
|
||||
policy.handleTransferable(tr, add);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private final PropertyChangeListener relayListener = new PropertyChangeListener() {
|
||||
|
|
|
@ -7,13 +7,15 @@ import java.awt.datatransfer.Transferable;
|
|||
|
||||
public class NullTransferablePolicy extends TransferablePolicy {
|
||||
|
||||
@Override
|
||||
public boolean accept(Transferable tr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public boolean handleTransferable(Transferable tr, boolean add) {
|
||||
return false;
|
||||
@Override
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.awt.datatransfer.Transferable;
|
|||
|
||||
public abstract class TextTransferablePolicy extends TransferablePolicy {
|
||||
|
||||
@Override
|
||||
public boolean accept(Transferable tr) {
|
||||
if (!isEnabled())
|
||||
return false;
|
||||
|
@ -16,7 +17,8 @@ public abstract class TextTransferablePolicy extends TransferablePolicy {
|
|||
}
|
||||
|
||||
|
||||
public boolean handleTransferable(Transferable tr, boolean add) {
|
||||
@Override
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
try {
|
||||
String string = (String) tr.getTransferData(DataFlavor.stringFlavor);
|
||||
|
||||
|
@ -24,10 +26,9 @@ public abstract class TextTransferablePolicy extends TransferablePolicy {
|
|||
clear();
|
||||
}
|
||||
|
||||
return load(string);
|
||||
load(string);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ public abstract class TransferablePolicy {
|
|||
public abstract boolean accept(Transferable tr);
|
||||
|
||||
|
||||
public abstract boolean handleTransferable(Transferable tr, boolean add);
|
||||
public abstract void handleTransferable(Transferable tr, boolean add);
|
||||
|
||||
private boolean enabled = true;
|
||||
|
||||
|
|
Loading…
Reference in New Issue