add: retry other download providers for libraries

This commit is contained in:
huanghongxun
2020-02-19 00:16:12 +08:00
parent ca577475fc
commit 1b1f532988

View File

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