diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java index e2a02ac29..6d33a01d4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java @@ -42,6 +42,7 @@ import java.util.jar.JarInputStream; import java.util.jar.JarOutputStream; import java.util.jar.Pack200; import java.util.logging.Level; +import java.util.stream.Collectors; import static org.jackhuang.hmcl.util.DigestUtils.digest; import static org.jackhuang.hmcl.util.Hex.encodeHex; @@ -50,6 +51,7 @@ public class LibraryDownloadTask extends Task { private FileDownloadTask task; protected final File jar; protected final DefaultCacheRepository cacheRepository; + protected final AbstractDependencyManager dependencyManager; private final File xzFile; protected final Library library; protected final String url; @@ -58,6 +60,7 @@ public class LibraryDownloadTask extends Task { private boolean cached = false; public LibraryDownloadTask(AbstractDependencyManager dependencyManager, File file, Library library) { + this.dependencyManager = dependencyManager; this.originalLibrary = library; setSignificance(TaskSignificance.MODERATE); @@ -68,7 +71,7 @@ public class LibraryDownloadTask extends Task { this.library = library; this.cacheRepository = dependencyManager.getCacheRepository(); - url = dependencyManager.getPrimaryDownloadProvider().injectURL(library.getDownload().getUrl()); + url = library.getDownload().getUrl(); jar = file; xzFile = new File(file.getAbsoluteFile().getParentFile(), file.getName() + ".pack.xz"); @@ -127,15 +130,22 @@ public class LibraryDownloadTask extends Task { } try { - URL packXz = NetworkUtils.toURL(url + ".pack.xz"); + URL packXz = NetworkUtils.toURL(dependencyManager.getPrimaryDownloadProvider().injectURL(url) + ".pack.xz"); if (NetworkUtils.urlExists(packXz)) { - task = new FileDownloadTask(packXz, xzFile, null) + List urls = dependencyManager.getPreferredDownloadProviders().stream() + .map(downloadProvider -> downloadProvider.injectURL(url) + ".pack.xz") + .map(NetworkUtils::toURL) + .collect(Collectors.toList()); + task = new FileDownloadTask(urls, xzFile, null) .setCacheRepository(cacheRepository) .setCaching(true); xz = true; } else { - task = new FileDownloadTask(NetworkUtils.toURL(url), - jar, + List urls = dependencyManager.getPreferredDownloadProviders().stream() + .map(downloadProvider -> downloadProvider.injectURL(url)) + .map(NetworkUtils::toURL) + .collect(Collectors.toList()); + task = new FileDownloadTask(urls, jar, library.getDownload().getSha1() != null ? new IntegrityCheck("SHA-1", library.getDownload().getSha1()) : null) .setCacheRepository(cacheRepository) .setCaching(true);