diff --git a/src/main/java/cz/kamma/kfmanager/MainApp.java b/src/main/java/cz/kamma/kfmanager/MainApp.java index 8b733d2..aa9ce4c 100644 --- a/src/main/java/cz/kamma/kfmanager/MainApp.java +++ b/src/main/java/cz/kamma/kfmanager/MainApp.java @@ -11,7 +11,7 @@ import java.awt.event.KeyEvent; */ public class MainApp { - public static final String APP_VERSION = "0.0.8"; + public static final String APP_VERSION = "0.0.9"; public static void main(String[] args) { // Set application name for X11/Wayland WM_CLASS diff --git a/src/main/java/cz/kamma/kfmanager/service/FileOperationQueue.java b/src/main/java/cz/kamma/kfmanager/service/FileOperationQueue.java index 8cc75c2..4da8aae 100644 --- a/src/main/java/cz/kamma/kfmanager/service/FileOperationQueue.java +++ b/src/main/java/cz/kamma/kfmanager/service/FileOperationQueue.java @@ -140,7 +140,7 @@ public class FileOperationQueue { } @Override - public FileOperations.OverwriteResponse confirmOverwrite(File file) { + public FileOperations.OverwriteResponse confirmOverwrite(File source, File destination) { // In background queue, we might want a default or auto-rename? // For now, let's assume YES or handle it in the executor if possible. // This is tricky for a background queue. diff --git a/src/main/java/cz/kamma/kfmanager/service/FileOperations.java b/src/main/java/cz/kamma/kfmanager/service/FileOperations.java index f41a42a..2d711d3 100644 --- a/src/main/java/cz/kamma/kfmanager/service/FileOperations.java +++ b/src/main/java/cz/kamma/kfmanager/service/FileOperations.java @@ -45,7 +45,7 @@ public class FileOperations { } else if (target.exists()) { if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue; if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { - OverwriteResponse res = callback.confirmOverwrite(target); + OverwriteResponse res = callback.confirmOverwrite(source, target); if (res == OverwriteResponse.CANCEL) break; if (res == OverwriteResponse.NO_TO_ALL) { globalResponse[0] = OverwriteResponse.NO_TO_ALL; @@ -193,7 +193,7 @@ public class FileOperations { if (Files.exists(targetFile)) { if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) return FileVisitResult.CONTINUE; if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { - OverwriteResponse res = callback.confirmOverwrite(targetFile.toFile()); + OverwriteResponse res = callback.confirmOverwrite(file.toFile(), targetFile.toFile()); if (res == OverwriteResponse.CANCEL) return FileVisitResult.TERMINATE; if (res == OverwriteResponse.NO_TO_ALL) { globalResponse[0] = OverwriteResponse.NO_TO_ALL; @@ -275,7 +275,7 @@ public class FileOperations { if (Files.exists(target.toPath(), LinkOption.NOFOLLOW_LINKS) && !source.getAbsolutePath().equals(target.getAbsolutePath())) { if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue; if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { - OverwriteResponse res = callback.confirmOverwrite(target); + OverwriteResponse res = callback.confirmOverwrite(source, target); if (res == OverwriteResponse.CANCEL) break; if (res == OverwriteResponse.NO_TO_ALL) { globalResponse[0] = OverwriteResponse.NO_TO_ALL; @@ -870,7 +870,7 @@ public class FileOperations { void onProgress(long current, long total, String currentFile); default void onFileProgress(long current, long total) {} default boolean isCancelled() { return false; } - default OverwriteResponse confirmOverwrite(File file) { return OverwriteResponse.YES; } + default OverwriteResponse confirmOverwrite(File source, File destination) { return OverwriteResponse.YES; } default ErrorResponse onError(File file, Exception e) { return ErrorResponse.ABORT; } } diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java index d11427d..2fd6759 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java @@ -16,9 +16,11 @@ import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -1973,13 +1975,26 @@ public class FilePanelTab extends JPanel { } @Override - public FileOperations.OverwriteResponse confirmOverwrite(File file) { + public FileOperations.OverwriteResponse confirmOverwrite(File source, File destination) { final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1]; try { SwingUtilities.invokeAndWait(() -> { + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + String message = String.format( + "File already exists: %s\n\n" + + "Source file:\n Size: %s\n Modified: %s\n\n" + + "Existing file:\n Size: %s\n Modified: %s\n\n" + + "Overwrite?", + destination.getName(), + FileItem.formatSize(source.length()), + sdf.format(new Date(source.lastModified())), + FileItem.formatSize(destination.length()), + sdf.format(new Date(destination.lastModified())) + ); + Object[] options = {"Yes", "Yes to All", "No", "No to All", "Cancel"}; int n = JOptionPane.showOptionDialog(progressDialog, - "File already exists: " + file.getName() + "\nOverwrite?", + message, "Overwrite Confirmation", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, diff --git a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java index 6065bc8..fc5b5f9 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java +++ b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java @@ -12,7 +12,9 @@ import java.awt.datatransfer.DataFlavor; import java.awt.event.*; import java.io.File; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -2156,13 +2158,26 @@ public class MainWindow extends JFrame { } @Override - public FileOperations.OverwriteResponse confirmOverwrite(File file) { + public FileOperations.OverwriteResponse confirmOverwrite(File source, File destination) { final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1]; try { SwingUtilities.invokeAndWait(() -> { + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + String message = String.format( + "File already exists: %s\n\n" + + "Source file:\n Size: %s\n Modified: %s\n\n" + + "Existing file:\n Size: %s\n Modified: %s\n\n" + + "Overwrite?", + destination.getName(), + FileItem.formatSize(source.length()), + sdf.format(new Date(source.lastModified())), + FileItem.formatSize(destination.length()), + sdf.format(new Date(destination.lastModified())) + ); + Object[] options = {"Yes", "Yes to All", "No", "No to All", "Cancel"}; int n = JOptionPane.showOptionDialog(progressDialog, - "File already exists: " + file.getName() + "\nOverwrite?", + message, "Overwrite Confirmation", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,