From 2b60457a9594ad43e3fea44d00fbc1ab1bbe8148 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 5 May 2026 18:55:56 +0200 Subject: [PATCH] fix(archive): improve robustness against missing source files and re-scan on dialog open --- src/main/java/de/tki/comfymodels/Main.java | 6 ++++- .../service/impl/ArchiveService.java | 27 +++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/tki/comfymodels/Main.java b/src/main/java/de/tki/comfymodels/Main.java index 2b00e56..5533b36 100644 --- a/src/main/java/de/tki/comfymodels/Main.java +++ b/src/main/java/de/tki/comfymodels/Main.java @@ -1467,7 +1467,11 @@ public class Main extends JFrame { archiveService.moveToArchiveWithProgress(folder, name, update); return true; } catch (IOException ex) { - ex.printStackTrace(); + SwingUtilities.invokeLater(() -> { + JOptionPane.showMessageDialog(dialog, + "Failed to archive '" + name + "':\n" + ex.getMessage(), + "Archive Error", JOptionPane.ERROR_MESSAGE); + }); return false; } }); diff --git a/src/main/java/de/tki/comfymodels/service/impl/ArchiveService.java b/src/main/java/de/tki/comfymodels/service/impl/ArchiveService.java index cda7d1d..03de28e 100644 --- a/src/main/java/de/tki/comfymodels/service/impl/ArchiveService.java +++ b/src/main/java/de/tki/comfymodels/service/impl/ArchiveService.java @@ -47,23 +47,33 @@ public class ArchiveService { if (pathStr == null || pathStr.isEmpty()) return grouped; Path root = Paths.get(pathStr); - if (!Files.exists(root)) return grouped; + if (!Files.exists(root)) { + System.err.println("Scan directory does not exist: " + pathStr); + return grouped; + } try (Stream walk = Files.walk(root)) { walk.filter(p -> { - // Ignore hidden directories and .venv / venv - for (Path part : root.relativize(p)) { - String name = part.toString(); - if (name.startsWith(".") || name.equalsIgnoreCase("venv") || name.equalsIgnoreCase(".venv") || name.equalsIgnoreCase("__pycache__")) { - return false; + try { + // Ignore hidden directories and .venv / venv + Path relativeToRoot = root.relativize(p); + for (Path part : relativeToRoot) { + String name = part.toString(); + if (name.startsWith(".") || name.equalsIgnoreCase("venv") || name.equalsIgnoreCase(".venv") || name.equalsIgnoreCase("__pycache__")) { + return false; + } } + return true; + } catch (IllegalArgumentException e) { + return false; } - return true; }) - .filter(Files::isRegularFile) + .filter(p -> Files.isRegularFile(p)) .filter(this::isSupportedModel) .filter(p -> !excludeArchived || !isAlreadyArchived(p)) .forEach(p -> { + if (!Files.exists(p)) return; // Double check existence + Path relative = root.relativize(p); String folder = relative.getParent() != null ? relative.getParent().toString().replace("\\", "/") : "root"; @@ -87,6 +97,7 @@ public class ArchiveService { grouped.computeIfAbsent(folder, k -> new ArrayList<>()).add(info); }); } catch (IOException e) { + System.err.println("Error walking directory " + pathStr + ": " + e.getMessage()); e.printStackTrace(); }