From 2054d7e50957f29e30624827c2fdd953747e3dd5 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Sat, 17 Jun 2023 12:24:14 -0500 Subject: [PATCH] modrinth: fail when a requested project is not available for loader+game version --- .../helpers/modrinth/ModrinthApiClient.java | 27 ++++++++++++------- .../helpers/modrinth/ModrinthCommand.java | 6 +++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/itzg/helpers/modrinth/ModrinthApiClient.java b/src/main/java/me/itzg/helpers/modrinth/ModrinthApiClient.java index 294ea0d2..5c98b79b 100644 --- a/src/main/java/me/itzg/helpers/modrinth/ModrinthApiClient.java +++ b/src/main/java/me/itzg/helpers/modrinth/ModrinthApiClient.java @@ -1,6 +1,15 @@ package me.itzg.helpers.modrinth; +import static me.itzg.helpers.http.Uris.QueryParameters.queryParameters; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collections; +import java.util.List; import me.itzg.helpers.errors.GenericException; +import me.itzg.helpers.errors.InvalidParameterException; import me.itzg.helpers.http.Fetch; import me.itzg.helpers.http.FileDownloadedHandler; import me.itzg.helpers.http.SharedFetch; @@ -12,15 +21,6 @@ import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import java.io.IOException; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; -import java.util.List; - -import static me.itzg.helpers.http.Uris.QueryParameters.queryParameters; - public class ModrinthApiClient implements AutoCloseable { private final UriBuilder uriBuilder; @@ -118,7 +118,14 @@ public Mono> getVersionsForProject(String projectIdOrSlug, ) ) .toObjectList(Version.class) - .assemble(); + .assemble() + .flatMap(versions -> + versions.isEmpty() ? Mono.error(new InvalidParameterException( + String.format("No files are available for the project %s for loader %s and Minecraft version %s", + projectIdOrSlug, loader, gameVersion + ))) + : Mono.just(versions) + ); } public Mono getVersionFromId(String versionId) { diff --git a/src/main/java/me/itzg/helpers/modrinth/ModrinthCommand.java b/src/main/java/me/itzg/helpers/modrinth/ModrinthCommand.java index d81d87f3..f1cfb110 100644 --- a/src/main/java/me/itzg/helpers/modrinth/ModrinthCommand.java +++ b/src/main/java/me/itzg/helpers/modrinth/ModrinthCommand.java @@ -292,6 +292,12 @@ else if (projectRef.hasVersionId()) { } else { final List versions = getVersionsForProject(project.getId()); + if (versions.isEmpty()) { + throw new InvalidParameterException( + String.format("No files are available for the project '%s' (%s) for %s loader and Minecraft version %s", + project.getTitle(), project.getSlug(), loader, gameVersion + )); + } return pickVersion(versions); } }