diff --git a/.classpath b/.classpath
index 31d9eb0a..66046fbe 100644
--- a/.classpath
+++ b/.classpath
@@ -17,7 +17,7 @@
-
+
diff --git a/source/net/filebot/StandardRenameAction.java b/source/net/filebot/StandardRenameAction.java
index 06f1fcc5..6a6416a7 100644
--- a/source/net/filebot/StandardRenameAction.java
+++ b/source/net/filebot/StandardRenameAction.java
@@ -3,6 +3,8 @@ package net.filebot;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.attribute.BasicFileAttributes;
import net.filebot.util.FileUtilities;
@@ -128,8 +130,43 @@ public enum StandardRenameAction implements RenameAction {
if (it.name().equalsIgnoreCase(action))
return it;
}
-
throw new IllegalArgumentException("Illegal rename action: " + action);
}
+ public static File revert(File current, File original) throws IOException {
+ // reverse move
+ if (current.exists() && !original.exists()) {
+ return FileUtilities.moveRename(current, original);
+ }
+
+ BasicFileAttributes currentAttr = Files.readAttributes(current.toPath(), BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
+ BasicFileAttributes originalAttr = Files.readAttributes(original.toPath(), BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
+
+ // reverse symlink
+ if (currentAttr.isSymbolicLink() && !originalAttr.isSymbolicLink()) {
+ Files.delete(current.toPath());
+ return original;
+ }
+
+ // reverse keeplink
+ if (!currentAttr.isSymbolicLink() && originalAttr.isSymbolicLink()) {
+ Files.delete(original.toPath());
+ return FileUtilities.moveRename(current, original);
+ }
+
+ // reverse copy / hardlink
+ if (currentAttr.isRegularFile() && originalAttr.isRegularFile()) {
+ Files.delete(current.toPath());
+ return original;
+ }
+
+ // reverse folder copy
+ if (currentAttr.isDirectory() && originalAttr.isDirectory()) {
+ FileUtilities.delete(original);
+ return FileUtilities.moveRename(current, original);
+ }
+
+ throw new IllegalArgumentException(String.format("Cannot revert files: %s => %s", current, original));
+ }
+
}
diff --git a/source/net/filebot/ui/rename/HistoryDialog.java b/source/net/filebot/ui/rename/HistoryDialog.java
index d10ce2b3..7f7ad35f 100644
--- a/source/net/filebot/ui/rename/HistoryDialog.java
+++ b/source/net/filebot/ui/rename/HistoryDialog.java
@@ -8,7 +8,6 @@ import static javax.swing.JOptionPane.*;
import static net.filebot.Logging.*;
import static net.filebot.Settings.*;
import static net.filebot.UserFiles.*;
-import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.ui.SwingUI.*;
import java.awt.Color;
@@ -72,7 +71,7 @@ import net.filebot.History;
import net.filebot.History.Element;
import net.filebot.History.Sequence;
import net.filebot.ResourceManager;
-import net.filebot.Settings;
+import net.filebot.StandardRenameAction;
import net.filebot.mac.MacAppUtilities;
import net.filebot.media.MetaAttributes;
import net.filebot.ui.transfer.FileExportHandler;
@@ -445,25 +444,15 @@ class HistoryDialog extends JDialog {
}
private enum Option {
- Rename {
+ Revert, ChangeDirectory, Cancel;
- @Override
- public String toString() {
- return "Rename";
- }
- },
- ChangeDirectory {
-
- @Override
- public String toString() {
+ @Override
+ public String toString() {
+ switch (this) {
+ case ChangeDirectory:
return "Change Directory";
- }
- },
- Cancel {
-
- @Override
- public String toString() {
- return "Cancel";
+ default:
+ return name();
}
}
}
@@ -488,9 +477,9 @@ class HistoryDialog extends JDialog {
Set