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