Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -504,17 +505,25 @@ private synchronized void resetCatalogsAndJars(List<DefaultCatalog> defaultCatal
}

catalogManagedInstalledJars.clear();
List<Path> 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<Path> 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
);
}
}
}
}

Expand All @@ -536,26 +545,31 @@ private void loadJars() {
});
}

private void updateCatalogManagedInstalledJarsOfDirectory(Path directory, Operation operation) {
if (directory != null && directory.toFile().exists()) {
try (Stream<Path> files = Files.walk(directory)) {
List<Path> jars = files.filter(path -> path.toString().endsWith(".jar")).toList();
private List<Path> 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<Path> files = Files.walk(directory)) {
List<Path> 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();
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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<Path> 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<Path> extensionsDirectoryPath;
private final ObservableValue<Path> catalogsDirectoryPath;
private final FilesWatcher manuallyInstalledExtensionsWatcher;
Expand Down