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 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

View File

@ -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.

View File

@ -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; }
}

View File

@ -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,

View File

@ -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,