From cd794232a76d4f2ebb28bc9415ee74bf48e02134 Mon Sep 17 00:00:00 2001 From: a2geek Date: Wed, 21 Oct 2026 17:48:11 -0500 Subject: [PATCH] Starting the rudimentary log tracking. At this time, just exceptions. --- .../javafx/FileStoreWindow.java | 27 ++++++++++++++++++- .../filestore/FileStoreFactory.java | 19 +++++++++++++ .../applecommander/filestore/FileStores.java | 6 ++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java b/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java index 58e49f61..c092b749 100644 --- a/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java +++ b/app/gui-javafx/src/main/java/org/applecommander/javafx/FileStoreWindow.java @@ -290,7 +290,32 @@ public class FileStoreWindow { Settings.setLastOpenedDirectory(selectedFile.getParentFile()); Optional source = Sources.create(selectedFile); var inspected = FileStores.inspect(source.orElseThrow()); - openFileStore(inspected.fileStores, true); + if (!inspected.fileStores.isEmpty()) { + openFileStore(inspected.fileStores, true); + } + else if (!inspected.messages.isEmpty()) { + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("Unable to open image"); + alert.setHeaderText("Image format not recognized."); + StringBuilder content = new StringBuilder(); + content.append("Errors occurred while opening image:\n"); + inspected.messages.forEach(message -> { + content.append("* ").append(message.message()).append("\n"); + }); + alert.setContentText(content.toString()); + Stage stage = (Stage) alert.getDialogPane().getScene().getWindow(); + stage.setAlwaysOnTop(true); + alert.showAndWait(); + } + else { + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("Unable to open image"); + alert.setHeaderText("Image format not recognized."); + alert.setContentText("The image format was not recognized. No error occurred."); + Stage stage = (Stage) alert.getDialogPane().getScene().getWindow(); + stage.setAlwaysOnTop(true); + alert.showAndWait(); + } } public void openFileStore(List fileStores, boolean promptForWindow) { diff --git a/lib/ac-api/src/main/java/org/applecommander/filestore/FileStoreFactory.java b/lib/ac-api/src/main/java/org/applecommander/filestore/FileStoreFactory.java index 3d4489be..935ba7bd 100644 --- a/lib/ac-api/src/main/java/org/applecommander/filestore/FileStoreFactory.java +++ b/lib/ac-api/src/main/java/org/applecommander/filestore/FileStoreFactory.java @@ -63,6 +63,7 @@ public interface FileStoreFactory { public final Source source; public final NibbleTrackReaderWriter nibbleTrackReaderWriter; public final List fileStores = new ArrayList<>(); + public final List messages = new ArrayList<>(); public Context(Source source) { this.source = source; @@ -215,4 +216,22 @@ public interface FileStoreFactory { } } } + + record Message(Level level, String message) { + public static Message info(String fmt, Object... args) { + return new Message(Level.INFO, String.format(fmt, args)); + } + public static Message warning(String fmt, Object... args) { + return new Message(Level.WARNING, String.format(fmt, args)); + } + public static Message error(String fmt, Object... args) { + return new Message(Level.ERROR, String.format(fmt, args)); + } + } + + enum Level { + INFO, + WARNING, + ERROR + } } \ No newline at end of file diff --git a/lib/ac-api/src/main/java/org/applecommander/filestore/FileStores.java b/lib/ac-api/src/main/java/org/applecommander/filestore/FileStores.java index b9f9293a..290eb5a3 100644 --- a/lib/ac-api/src/main/java/org/applecommander/filestore/FileStores.java +++ b/lib/ac-api/src/main/java/org/applecommander/filestore/FileStores.java @@ -57,7 +57,11 @@ public class FileStores { try { factory.inspect(ctx); } catch (Throwable t) { - // ignore it + // Find the root cause + while (t.getCause() != null) { + t = t.getCause(); + } + ctx.messages.add(FileStoreFactory.Message.error(t.getMessage())); } }); return ctx;