Rewrite download utils (#681)

- eTag support (It seems Mojang's CDN and our meta/maven do not support this right now)
- Age based caching.
- Sha1 based caching.
- HTTP(S) proxy settings should now be respected.
- The downloader has better awareness of offline mode and refresh deps, cleaning up the calling code a bit.
- Uses the new Java 11 HTTP client, provides async support for downloading multiple files
- Progress handling (TODO needs hooking up to gradle)
- Better compression support. Handled by [Methanol](https://mizosoft.github.io/methanol/) 
- Unit tested with a real web server.
This commit is contained in:
modmuss50
2022-07-25 18:01:11 +01:00
committed by GitHub
parent 4bc7e39149
commit c4c6de23e3
40 changed files with 1440 additions and 896 deletions

View File

@@ -24,6 +24,7 @@
package net.fabricmc.loom.extension;
import java.net.URISyntaxException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -48,6 +49,8 @@ import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider;
import net.fabricmc.loom.util.download.Download;
import net.fabricmc.loom.util.download.DownloadBuilder;
public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implements LoomGradleExtension {
private final Project project;
@@ -206,9 +209,36 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
transitiveAccessWideners.addAll(accessWidenerFiles);
}
@Override
public DownloadBuilder download(String url) {
DownloadBuilder builder;
try {
builder = Download.create(url);
} catch (URISyntaxException e) {
throw new RuntimeException("Failed to create downloader for: " + e);
}
if (project.getGradle().getStartParameter().isOffline()) {
builder.offline();
}
if (project.getGradle().getStartParameter().isRefreshDependencies() || Boolean.getBoolean("loom.refresh")) {
builder.forceDownload();
}
// TODO
//builder.executor();
return builder;
}
@Override
protected <T extends IntermediateMappingsProvider> void configureIntermediateMappingsProviderInternal(T provider) {
provider.getMinecraftVersion().set(getProject().provider(() -> getMinecraftProvider().minecraftVersion()));
provider.getMinecraftVersion().disallowChanges();
provider.getDownloader().set(this::download);
provider.getDownloader().disallowChanges();
}
}