From 232f8606f9e1449a6db84400006576c50e99e9fe Mon Sep 17 00:00:00 2001 From: lleplat Date: Mon, 12 Jan 2026 14:06:08 +0000 Subject: [PATCH 1/2] Pretty print registry file --- .../ext/extensionmanager/core/ExtensionFolderManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionFolderManager.java b/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionFolderManager.java index 9775acc..d009a2e 100644 --- a/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionFolderManager.java +++ b/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionFolderManager.java @@ -1,6 +1,7 @@ package qupath.ext.extensionmanager.core; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.stream.JsonReader; import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; @@ -68,7 +69,7 @@ class ExtensionFolderManager implements AutoCloseable { private static final String CATALOGS_FOLDER = "catalogs"; private static final String REGISTRY_NAME = "registry.json"; private static final Predicate isJar = path -> path.toString().toLowerCase().endsWith(".jar"); - private static final Gson gson = new Gson(); + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); private final ObservableValue extensionsDirectoryPath; private final ObservableValue catalogsDirectoryPath; private final FilesWatcher manuallyInstalledExtensionsWatcher; From a0bd54eeb2c0660e134c61b603945c1db889ddf1 Mon Sep 17 00:00:00 2001 From: lleplat Date: Mon, 12 Jan 2026 14:26:11 +0000 Subject: [PATCH 2/2] Warn if jars not found --- .../core/ExtensionCatalogManager.java | 72 +++++++++++-------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionCatalogManager.java b/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionCatalogManager.java index 5126331..f8607f0 100644 --- a/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionCatalogManager.java +++ b/extensionmanager/src/main/java/qupath/ext/extensionmanager/core/ExtensionCatalogManager.java @@ -13,6 +13,7 @@ import qupath.ext.extensionmanager.core.registry.Registry; import qupath.ext.extensionmanager.core.catalog.UpdateAvailable; import qupath.ext.extensionmanager.core.registry.RegistryCatalog; +import qupath.ext.extensionmanager.core.registry.RegistryExtension; import qupath.ext.extensionmanager.core.tools.FileDownloader; import qupath.ext.extensionmanager.core.tools.FileTools; import qupath.ext.extensionmanager.core.tools.ZipExtractor; @@ -504,17 +505,25 @@ private synchronized void resetCatalogsAndJars(List defaultCatal } catalogManagedInstalledJars.clear(); - List releasePaths = catalogs.stream() - .flatMap(catalog -> catalog.extensions().stream() - .map(extension -> extensionFolderManager.getExtensionDirectoryPath( - catalog.name(), - extension.name(), - extension.installedVersion()) - ) - ) - .toList(); - for (Path releasePath: releasePaths) { - updateCatalogManagedInstalledJarsOfDirectory(releasePath, Operation.ADD); + for (RegistryCatalog catalog: catalogs) { + for (RegistryExtension extension: catalog.extensions()) { + Path releasePath = extensionFolderManager.getExtensionDirectoryPath( + catalog.name(), + extension.name(), + extension.installedVersion() + ); + + List addedJars = updateCatalogManagedInstalledJarsOfDirectory(releasePath, Operation.ADD); + + if (addedJars.isEmpty()) { + logger.warn( + "{} is supposed to be installed with version {}, but no jar was detected in {}. The extension should probably be reinstalled", + extension.name(), + extension.installedVersion(), + releasePath + ); + } + } } } @@ -536,26 +545,31 @@ private void loadJars() { }); } - private void updateCatalogManagedInstalledJarsOfDirectory(Path directory, Operation operation) { - if (directory != null && directory.toFile().exists()) { - try (Stream files = Files.walk(directory)) { - List jars = files.filter(path -> path.toString().endsWith(".jar")).toList(); + private List updateCatalogManagedInstalledJarsOfDirectory(Path directory, Operation operation) { + if (!directory.toFile().exists()) { + return List.of(); + } - switch (operation) { - case ADD -> catalogManagedInstalledJars.addAll(jars); - case REMOVE -> catalogManagedInstalledJars.removeAll(jars); - } - } catch (IOException e) { - logger.debug( - "Error while finding jars located in {}. None will be {}", - directory, - switch (operation) { - case ADD -> "added"; - case REMOVE -> "removed"; - }, - e - ); + try (Stream files = Files.walk(directory)) { + List jars = files.filter(path -> path.toString().endsWith(".jar")).toList(); + + switch (operation) { + case ADD -> catalogManagedInstalledJars.addAll(jars); + case REMOVE -> catalogManagedInstalledJars.removeAll(jars); } + + return jars; + } catch (IOException e) { + logger.debug( + "Error while finding jars located in {}. None will be {}", + directory, + switch (operation) { + case ADD -> "added"; + case REMOVE -> "removed"; + }, + e + ); + return List.of(); } }