added file info while replacing

This commit is contained in:
Radek Davidek 2026-01-21 16:45:07 +01:00
parent 38aa55c463
commit 9b6b309bfe
5 changed files with 40 additions and 10 deletions

View File

@ -11,7 +11,7 @@ import java.awt.event.KeyEvent;
*/ */
public class MainApp { 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) { public static void main(String[] args) {
// Set application name for X11/Wayland WM_CLASS // Set application name for X11/Wayland WM_CLASS

View File

@ -140,7 +140,7 @@ public class FileOperationQueue {
} }
@Override @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? // 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. // For now, let's assume YES or handle it in the executor if possible.
// This is tricky for a background queue. // This is tricky for a background queue.

View File

@ -45,7 +45,7 @@ public class FileOperations {
} else if (target.exists()) { } else if (target.exists()) {
if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue; if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue;
if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { 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.CANCEL) break;
if (res == OverwriteResponse.NO_TO_ALL) { if (res == OverwriteResponse.NO_TO_ALL) {
globalResponse[0] = OverwriteResponse.NO_TO_ALL; globalResponse[0] = OverwriteResponse.NO_TO_ALL;
@ -193,7 +193,7 @@ public class FileOperations {
if (Files.exists(targetFile)) { if (Files.exists(targetFile)) {
if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) return FileVisitResult.CONTINUE; if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) return FileVisitResult.CONTINUE;
if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { 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.CANCEL) return FileVisitResult.TERMINATE;
if (res == OverwriteResponse.NO_TO_ALL) { if (res == OverwriteResponse.NO_TO_ALL) {
globalResponse[0] = 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 (Files.exists(target.toPath(), LinkOption.NOFOLLOW_LINKS) && !source.getAbsolutePath().equals(target.getAbsolutePath())) {
if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue; if (globalResponse[0] == OverwriteResponse.NO_TO_ALL) continue;
if (globalResponse[0] != OverwriteResponse.YES_TO_ALL) { 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.CANCEL) break;
if (res == OverwriteResponse.NO_TO_ALL) { if (res == OverwriteResponse.NO_TO_ALL) {
globalResponse[0] = 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); void onProgress(long current, long total, String currentFile);
default void onFileProgress(long current, long total) {} default void onFileProgress(long current, long total) {}
default boolean isCancelled() { return false; } 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; } default ErrorResponse onError(File file, Exception e) { return ErrorResponse.ABORT; }
} }

View File

@ -16,9 +16,11 @@ import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -1973,13 +1975,26 @@ public class FilePanelTab extends JPanel {
} }
@Override @Override
public FileOperations.OverwriteResponse confirmOverwrite(File file) { public FileOperations.OverwriteResponse confirmOverwrite(File source, File destination) {
final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1]; final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1];
try { try {
SwingUtilities.invokeAndWait(() -> { 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"}; Object[] options = {"Yes", "Yes to All", "No", "No to All", "Cancel"};
int n = JOptionPane.showOptionDialog(progressDialog, int n = JOptionPane.showOptionDialog(progressDialog,
"File already exists: " + file.getName() + "\nOverwrite?", message,
"Overwrite Confirmation", "Overwrite Confirmation",
JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE, JOptionPane.QUESTION_MESSAGE,

View File

@ -12,7 +12,9 @@ import java.awt.datatransfer.DataFlavor;
import java.awt.event.*; import java.awt.event.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -2156,13 +2158,26 @@ public class MainWindow extends JFrame {
} }
@Override @Override
public FileOperations.OverwriteResponse confirmOverwrite(File file) { public FileOperations.OverwriteResponse confirmOverwrite(File source, File destination) {
final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1]; final FileOperations.OverwriteResponse[] result = new FileOperations.OverwriteResponse[1];
try { try {
SwingUtilities.invokeAndWait(() -> { 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"}; Object[] options = {"Yes", "Yes to All", "No", "No to All", "Cancel"};
int n = JOptionPane.showOptionDialog(progressDialog, int n = JOptionPane.showOptionDialog(progressDialog,
"File already exists: " + file.getName() + "\nOverwrite?", message,
"Overwrite Confirmation", "Overwrite Confirmation",
JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE, JOptionPane.QUESTION_MESSAGE,