@@ -17,12 +17,7 @@
|
||||
*/
|
||||
package org.jackhuang.hmcl.download.java;
|
||||
|
||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
||||
import org.jackhuang.hmcl.task.Task;
|
||||
import org.jackhuang.hmcl.util.platform.Platform;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* @author Glavo
|
||||
@@ -31,6 +26,4 @@ public interface JavaDistribution<V extends JavaRemoteVersion> {
|
||||
String getDisplayName();
|
||||
|
||||
Set<JavaPackageType> getSupportedPackageTypes();
|
||||
|
||||
Task<TreeMap<Integer, V>> getFetchJavaVersionsTask(DownloadProvider provider, Platform platform, JavaPackageType packageType);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,13 @@ public enum JavaPackageType {
|
||||
this.javafx = javafx;
|
||||
}
|
||||
|
||||
public static JavaPackageType of(boolean jdk, boolean javafx) {
|
||||
if (jdk)
|
||||
return javafx ? JDKFX : JDK;
|
||||
else
|
||||
return javafx ? JREFX : JRE;
|
||||
}
|
||||
|
||||
public boolean isJDK() {
|
||||
return jdk;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import java.util.*;
|
||||
/**
|
||||
* @author Glavo
|
||||
*/
|
||||
public final class DiscoFetchJavaListTask extends Task<TreeMap<Integer, DiscoJavaRemoteVersion>> {
|
||||
public final class DiscoFetchJavaListTask extends Task<EnumMap<JavaPackageType, TreeMap<Integer, DiscoJavaRemoteVersion>>> {
|
||||
|
||||
public static final String API_ROOT = System.getProperty("hmcl.discoapi.override", "https://api.foojay.io/disco/v3.0");
|
||||
|
||||
@@ -46,21 +46,15 @@ public final class DiscoFetchJavaListTask extends Task<TreeMap<Integer, DiscoJav
|
||||
}
|
||||
|
||||
private final DiscoJavaDistribution distribution;
|
||||
private final String packageType;
|
||||
private final boolean isJavaFXBundled;
|
||||
private final String archiveType;
|
||||
private final Task<String> fetchPackagesTask;
|
||||
|
||||
public DiscoFetchJavaListTask(DownloadProvider downloadProvider, DiscoJavaDistribution distribution, Platform platform, JavaPackageType packageType) {
|
||||
public DiscoFetchJavaListTask(DownloadProvider downloadProvider, DiscoJavaDistribution distribution, Platform platform) {
|
||||
this.distribution = distribution;
|
||||
this.packageType = packageType.isJDK() ? "jdk" : "jre";
|
||||
this.isJavaFXBundled = packageType.isJavaFXBundled();
|
||||
this.archiveType = platform.getOperatingSystem() == OperatingSystem.WINDOWS ? "zip" : "tar.gz";
|
||||
|
||||
HashMap<String, String> params = new HashMap<>();
|
||||
params.put("distribution", distribution.getApiParameter());
|
||||
params.put("package", this.packageType);
|
||||
params.put("javafx_bundled", Boolean.toString(isJavaFXBundled));
|
||||
params.put("operating_system", getOperatingSystemName(platform.getOperatingSystem()));
|
||||
params.put("architecture", getArchitectureName(platform.getArchitecture()));
|
||||
params.put("archive_type", archiveType);
|
||||
@@ -79,29 +73,28 @@ public final class DiscoFetchJavaListTask extends Task<TreeMap<Integer, DiscoJav
|
||||
@Override
|
||||
public void execute() throws Exception {
|
||||
String json = fetchPackagesTask.getResult();
|
||||
List<DiscoJavaRemoteVersion> result = JsonUtils.fromNonNullJson(json, DiscoResult.typeOf(DiscoJavaRemoteVersion.class)).getResult();
|
||||
List<DiscoJavaRemoteVersion> list = JsonUtils.fromNonNullJson(json, DiscoResult.typeOf(DiscoJavaRemoteVersion.class)).getResult();
|
||||
EnumMap<JavaPackageType, TreeMap<Integer, DiscoJavaRemoteVersion>> result = new EnumMap<>(JavaPackageType.class);
|
||||
|
||||
TreeMap<Integer, DiscoJavaRemoteVersion> map = new TreeMap<>();
|
||||
|
||||
for (DiscoJavaRemoteVersion version : result) {
|
||||
for (DiscoJavaRemoteVersion version : list) {
|
||||
if (!distribution.getApiParameter().equals(version.getDistribution())
|
||||
|| !version.isDirectlyDownloadable()
|
||||
|| !packageType.equals(version.getPackageType())
|
||||
|| !archiveType.equals(version.getArchiveType())
|
||||
|| isJavaFXBundled != version.isJavaFXBundled())
|
||||
|| !archiveType.equals(version.getArchiveType()))
|
||||
continue;
|
||||
|
||||
if (!distribution.testVersion(version))
|
||||
continue;
|
||||
|
||||
JavaPackageType packageType = JavaPackageType.of("jdk".equals(version.getPackageType()), version.isJavaFXBundled());
|
||||
TreeMap<Integer, DiscoJavaRemoteVersion> map = result.computeIfAbsent(packageType, ignored -> new TreeMap<>());
|
||||
|
||||
int jdkVersion = version.getJdkVersion();
|
||||
DiscoJavaRemoteVersion oldVersion = map.get(jdkVersion);
|
||||
if (oldVersion == null || VersionNumber.compare(version.getDistributionVersion(), oldVersion.getDistributionVersion()) > 0) {
|
||||
if (oldVersion == null || VersionNumber.compare(version.getDistributionVersion(), oldVersion.getDistributionVersion()) > 0)
|
||||
map.put(jdkVersion, version);
|
||||
}
|
||||
}
|
||||
|
||||
setResult(map);
|
||||
setResult(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,10 +17,8 @@
|
||||
*/
|
||||
package org.jackhuang.hmcl.download.java.disco;
|
||||
|
||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
||||
import org.jackhuang.hmcl.download.java.JavaDistribution;
|
||||
import org.jackhuang.hmcl.download.java.JavaPackageType;
|
||||
import org.jackhuang.hmcl.task.Task;
|
||||
import org.jackhuang.hmcl.util.Pair;
|
||||
import org.jackhuang.hmcl.util.platform.Architecture;
|
||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||
@@ -131,11 +129,6 @@ public enum DiscoJavaDistribution implements JavaDistribution<DiscoJavaRemoteVer
|
||||
return architectures != null && architectures.contains(platform.getArchitecture());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<TreeMap<Integer, DiscoJavaRemoteVersion>> getFetchJavaVersionsTask(DownloadProvider provider, Platform platform, JavaPackageType packageType) {
|
||||
return new DiscoFetchJavaListTask(provider, this, platform, packageType);
|
||||
}
|
||||
|
||||
public boolean testVersion(DiscoJavaRemoteVersion version) {
|
||||
return this.getApiParameter().equals(version.getDistribution());
|
||||
}
|
||||
|
||||
@@ -171,6 +171,10 @@ public final class DiscoJavaRemoteVersion implements JavaRemoteVersion {
|
||||
return termOfSupport;
|
||||
}
|
||||
|
||||
public boolean isLTS() {
|
||||
return "lts".equals(termOfSupport);
|
||||
}
|
||||
|
||||
public String getOperatingSystem() {
|
||||
return operatingSystem;
|
||||
}
|
||||
|
||||
@@ -17,16 +17,12 @@
|
||||
*/
|
||||
package org.jackhuang.hmcl.download.java.mojang;
|
||||
|
||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
||||
import org.jackhuang.hmcl.download.java.JavaDistribution;
|
||||
import org.jackhuang.hmcl.download.java.JavaPackageType;
|
||||
import org.jackhuang.hmcl.download.java.JavaRemoteVersion;
|
||||
import org.jackhuang.hmcl.task.Task;
|
||||
import org.jackhuang.hmcl.util.platform.Platform;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* @author Glavo
|
||||
@@ -47,9 +43,4 @@ public final class MojangJavaDistribution implements JavaDistribution<JavaRemote
|
||||
public Set<JavaPackageType> getSupportedPackageTypes() {
|
||||
return Collections.singleton(JavaPackageType.JRE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task<TreeMap<Integer, JavaRemoteVersion>> getFetchJavaVersionsTask(DownloadProvider provider, Platform platform, JavaPackageType packageType) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user