mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-10 12:26:16 -04:00
修复下载 Java 不会尝试备用下载源的问题 (#2869)
* 修复下载 Java 不会尝试备用下载源的问题 * Fix checkstyle * Fix checkstyle
This commit is contained in:
parent
6fad149410
commit
c539702a1b
@ -68,7 +68,7 @@ public final class FabricVersionList extends VersionList<FabricRemoteVersion> {
|
|||||||
private static final String GAME_META_URL = "https://meta.fabricmc.net/v2/versions/game";
|
private static final String GAME_META_URL = "https://meta.fabricmc.net/v2/versions/game";
|
||||||
|
|
||||||
private List<String> getGameVersions(String metaUrl) throws IOException {
|
private List<String> getGameVersions(String metaUrl) throws IOException {
|
||||||
String json = NetworkUtils.doGet(NetworkUtils.toURL(downloadProvider.injectURL(metaUrl)));
|
String json = NetworkUtils.doGet(downloadProvider.injectURLWithCandidates(metaUrl));
|
||||||
return JsonUtils.GSON.<ArrayList<GameVersion>>fromJson(json, new TypeToken<ArrayList<GameVersion>>() {
|
return JsonUtils.GSON.<ArrayList<GameVersion>>fromJson(json, new TypeToken<ArrayList<GameVersion>>() {
|
||||||
}.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList());
|
}.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@ import org.jackhuang.hmcl.task.Task;
|
|||||||
import org.jackhuang.hmcl.util.gson.JsonUtils;
|
import org.jackhuang.hmcl.util.gson.JsonUtils;
|
||||||
import org.jackhuang.hmcl.util.io.ChecksumMismatchException;
|
import org.jackhuang.hmcl.util.io.ChecksumMismatchException;
|
||||||
import org.jackhuang.hmcl.util.io.FileUtils;
|
import org.jackhuang.hmcl.util.io.FileUtils;
|
||||||
import org.jackhuang.hmcl.util.io.NetworkUtils;
|
|
||||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||||
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
||||||
import org.tukaani.xz.LZMAInputStream;
|
import org.tukaani.xz.LZMAInputStream;
|
||||||
@ -58,8 +57,8 @@ public class JavaDownloadTask extends Task<Void> {
|
|||||||
this.javaVersion = javaVersion;
|
this.javaVersion = javaVersion;
|
||||||
this.rootDir = rootDir;
|
this.rootDir = rootDir;
|
||||||
this.downloadProvider = downloadProvider;
|
this.downloadProvider = downloadProvider;
|
||||||
this.javaDownloadsTask = new GetTask(NetworkUtils.toURL(downloadProvider.injectURL(
|
this.javaDownloadsTask = new GetTask(downloadProvider.injectURLWithCandidates(
|
||||||
"https://piston-meta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json")))
|
"https://piston-meta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json"))
|
||||||
.thenComposeAsync(javaDownloadsJson -> {
|
.thenComposeAsync(javaDownloadsJson -> {
|
||||||
JavaDownloads allDownloads = JsonUtils.fromNonNullJson(javaDownloadsJson, JavaDownloads.class);
|
JavaDownloads allDownloads = JsonUtils.fromNonNullJson(javaDownloadsJson, JavaDownloads.class);
|
||||||
if (!allDownloads.getDownloads().containsKey(platform)) throw new UnsupportedPlatformException();
|
if (!allDownloads.getDownloads().containsKey(platform)) throw new UnsupportedPlatformException();
|
||||||
@ -69,7 +68,7 @@ public class JavaDownloadTask extends Task<Void> {
|
|||||||
for (JavaDownloads.JavaDownload download : candidates) {
|
for (JavaDownloads.JavaDownload download : candidates) {
|
||||||
if (VersionNumber.compare(download.getVersion().getName(), Integer.toString(javaVersion.getMajorVersion())) >= 0) {
|
if (VersionNumber.compare(download.getVersion().getName(), Integer.toString(javaVersion.getMajorVersion())) >= 0) {
|
||||||
this.download = download;
|
this.download = download;
|
||||||
return new GetTask(NetworkUtils.toURL(downloadProvider.injectURL(download.getManifest().getUrl())));
|
return new GetTask(downloadProvider.injectURLWithCandidates(download.getManifest().getUrl()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new UnsupportedPlatformException();
|
throw new UnsupportedPlatformException();
|
||||||
@ -117,7 +116,7 @@ public class JavaDownloadTask extends Task<Void> {
|
|||||||
if (file.getDownloads().containsKey("lzma")) {
|
if (file.getDownloads().containsKey("lzma")) {
|
||||||
DownloadInfo download = file.getDownloads().get("lzma");
|
DownloadInfo download = file.getDownloads().get("lzma");
|
||||||
File tempFile = jvmDir.resolve(entry.getKey() + ".lzma").toFile();
|
File tempFile = jvmDir.resolve(entry.getKey() + ".lzma").toFile();
|
||||||
FileDownloadTask task = new FileDownloadTask(NetworkUtils.toURL(downloadProvider.injectURL(download.getUrl())), tempFile, new FileDownloadTask.IntegrityCheck("SHA-1", download.getSha1()));
|
FileDownloadTask task = new FileDownloadTask(downloadProvider.injectURLWithCandidates(download.getUrl()), tempFile, new FileDownloadTask.IntegrityCheck("SHA-1", download.getSha1()));
|
||||||
task.setName(entry.getKey());
|
task.setName(entry.getKey());
|
||||||
dependencies.add(task.thenRunAsync(() -> {
|
dependencies.add(task.thenRunAsync(() -> {
|
||||||
Path decompressed = jvmDir.resolve(entry.getKey() + ".tmp");
|
Path decompressed = jvmDir.resolve(entry.getKey() + ".tmp");
|
||||||
@ -135,7 +134,7 @@ public class JavaDownloadTask extends Task<Void> {
|
|||||||
}));
|
}));
|
||||||
} else if (file.getDownloads().containsKey("raw")) {
|
} else if (file.getDownloads().containsKey("raw")) {
|
||||||
DownloadInfo download = file.getDownloads().get("raw");
|
DownloadInfo download = file.getDownloads().get("raw");
|
||||||
FileDownloadTask task = new FileDownloadTask(NetworkUtils.toURL(downloadProvider.injectURL(download.getUrl())), dest.toFile(), new FileDownloadTask.IntegrityCheck("SHA-1", download.getSha1()));
|
FileDownloadTask task = new FileDownloadTask(downloadProvider.injectURLWithCandidates(download.getUrl()), dest.toFile(), new FileDownloadTask.IntegrityCheck("SHA-1", download.getSha1()));
|
||||||
task.setName(entry.getKey());
|
task.setName(entry.getKey());
|
||||||
if (file.isExecutable()) {
|
if (file.isExecutable()) {
|
||||||
dependencies.add(task.thenRunAsync(() -> dest.toFile().setExecutable(true)));
|
dependencies.add(task.thenRunAsync(() -> dest.toFile().setExecutable(true)));
|
||||||
|
@ -22,12 +22,12 @@ import com.google.gson.annotations.SerializedName;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import org.jackhuang.hmcl.download.VersionList;
|
import org.jackhuang.hmcl.download.VersionList;
|
||||||
import org.jackhuang.hmcl.util.Immutable;
|
import org.jackhuang.hmcl.util.Immutable;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
import org.jackhuang.hmcl.util.gson.Validation;
|
import org.jackhuang.hmcl.util.gson.Validation;
|
||||||
import org.jackhuang.hmcl.util.io.HttpRequest;
|
import org.jackhuang.hmcl.util.io.HttpRequest;
|
||||||
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
import org.jackhuang.hmcl.util.versioning.VersionNumber;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -86,7 +86,7 @@ public final class NeoForgeBMCLVersionList extends VersionList<NeoForgeRemoteVer
|
|||||||
versions.put(gameVersion, new NeoForgeRemoteVersion(
|
versions.put(gameVersion, new NeoForgeRemoteVersion(
|
||||||
neoForgeVersion.mcVersion,
|
neoForgeVersion.mcVersion,
|
||||||
nf,
|
nf,
|
||||||
Lang.immutableListOf(
|
Collections.singletonList(
|
||||||
apiRoot + "/neoforge/version/" + neoForgeVersion.version + "/download/installer.jar"
|
apiRoot + "/neoforge/version/" + neoForgeVersion.version + "/download/installer.jar"
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
@ -2,10 +2,10 @@ package org.jackhuang.hmcl.download.neoforge;
|
|||||||
|
|
||||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
import org.jackhuang.hmcl.download.DownloadProvider;
|
||||||
import org.jackhuang.hmcl.download.VersionList;
|
import org.jackhuang.hmcl.download.VersionList;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
import org.jackhuang.hmcl.util.io.HttpRequest;
|
import org.jackhuang.hmcl.util.io.HttpRequest;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -53,8 +53,8 @@ public final class NeoForgeOfficialVersionList extends VersionList<NeoForgeRemot
|
|||||||
for (String version : results[0].versions) {
|
for (String version : results[0].versions) {
|
||||||
versions.put("1.20.1", new NeoForgeRemoteVersion(
|
versions.put("1.20.1", new NeoForgeRemoteVersion(
|
||||||
"1.20.1", StringUtils.removePrefix(version, "1.20.1-"),
|
"1.20.1", StringUtils.removePrefix(version, "1.20.1-"),
|
||||||
Lang.immutableListOf(
|
Collections.singletonList(
|
||||||
downloadProvider.injectURL("https://maven.neoforged.net/releases/net/neoforged/forge/" + version + "/forge-" + version + "-installer.jar")
|
"https://maven.neoforged.net/releases/net/neoforged/forge/" + version + "/forge-" + version + "-installer.jar"
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -63,8 +63,8 @@ public final class NeoForgeOfficialVersionList extends VersionList<NeoForgeRemot
|
|||||||
String mcVersion = "1." + version.substring(0, version.indexOf('.', version.indexOf('.') + 1));
|
String mcVersion = "1." + version.substring(0, version.indexOf('.', version.indexOf('.') + 1));
|
||||||
versions.put(mcVersion, new NeoForgeRemoteVersion(
|
versions.put(mcVersion, new NeoForgeRemoteVersion(
|
||||||
mcVersion, version,
|
mcVersion, version,
|
||||||
Lang.immutableListOf(
|
Collections.singletonList(
|
||||||
downloadProvider.injectURL("https://maven.neoforged.net/releases/net/neoforged/neoforge/" + version + "/neoforge-" + version + "-installer.jar")
|
"https://maven.neoforged.net/releases/net/neoforged/neoforge/" + version + "/neoforge-" + version + "-installer.jar"
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ public final class QuiltVersionList extends VersionList<QuiltRemoteVersion> {
|
|||||||
private static final String GAME_META_URL = "https://meta.quiltmc.org/v3/versions/game";
|
private static final String GAME_META_URL = "https://meta.quiltmc.org/v3/versions/game";
|
||||||
|
|
||||||
private List<String> getGameVersions(String metaUrl) throws IOException {
|
private List<String> getGameVersions(String metaUrl) throws IOException {
|
||||||
String json = NetworkUtils.doGet(NetworkUtils.toURL(downloadProvider.injectURL(metaUrl)));
|
String json = NetworkUtils.doGet(downloadProvider.injectURLWithCandidates(metaUrl));
|
||||||
return JsonUtils.GSON.<ArrayList<GameVersion>>fromJson(json, new TypeToken<ArrayList<GameVersion>>() {
|
return JsonUtils.GSON.<ArrayList<GameVersion>>fromJson(json, new TypeToken<ArrayList<GameVersion>>() {
|
||||||
}.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList());
|
}.getType()).stream().map(GameVersion::getVersion).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
@ -178,6 +178,34 @@ public final class NetworkUtils {
|
|||||||
return IOUtils.readFullyAsString(con.getInputStream());
|
return IOUtils.readFullyAsString(con.getInputStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String doGet(List<URL> urls) throws IOException {
|
||||||
|
List<IOException> exceptions = null;
|
||||||
|
for (URL url : urls) {
|
||||||
|
try {
|
||||||
|
HttpURLConnection con = createHttpConnection(url);
|
||||||
|
con = resolveConnection(con);
|
||||||
|
return IOUtils.readFullyAsString(con.getInputStream());
|
||||||
|
} catch (IOException e) {
|
||||||
|
if (exceptions == null) {
|
||||||
|
exceptions = new ArrayList<>(1);
|
||||||
|
}
|
||||||
|
exceptions.add(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exceptions == null) {
|
||||||
|
throw new IOException("No candidate URL");
|
||||||
|
} else if (exceptions.size() == 1) {
|
||||||
|
throw exceptions.get(0);
|
||||||
|
} else {
|
||||||
|
IOException exception = new IOException("Failed to doGet");
|
||||||
|
for (IOException e : exceptions) {
|
||||||
|
exception.addSuppressed(e);
|
||||||
|
}
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String doPost(URL u, Map<String, String> params) throws IOException {
|
public static String doPost(URL u, Map<String, String> params) throws IOException {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (params != null) {
|
if (params != null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user