package launchserver.command.hash;
import launcher.helper.IOHelper;
import launcher.helper.LogHelper;
import launcher.serialize.config.entry.StringConfigEntry;
import launchserver.LaunchServer;
import launchserver.command.Command;
import launchserver.helpers.HTTPRequestHelper;
import launchserver.helpers.UnzipHelper;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
public final class DownloadAssetCommand extends Command
{
public DownloadAssetCommand(LaunchServer server)
{
super(server);
}
@Override
public String getArgsDescription()
{
return "<version> <dir>";
}
@Override
public String getUsageDescription()
{
return "Download asset dir";
}
@Override
public void invoke(String... args) throws Throwable
{
verifyArgs(args, 2);
String version = args[0];
String dirName = IOHelper.verifyFileName(args[1]);
Path assetDir = server.updatesDir.resolve(dirName);
String[] mirrors = server.config.mirrors.stream(StringConfigEntry.class).toArray(String[]::new);
String assetMask = String.format("assets/%s.zip", version);
for (String mirror : mirrors) {
URL assetUrl = new URL(mirror + assetMask);
if (!HTTPRequestHelper.fileExist(assetUrl)) continue;
// Create asset dir
LogHelper.subInfo("Asset found. Creating asset dir: '%s'", dirName);
Files.createDirectory(assetDir);
// Download required asset
LogHelper.subInfo("Downloading asset, it may take some time");
if(!UnzipHelper.downloadZip(assetUrl, assetDir)) return;
// Finished
server.syncUpdatesDir(Collections.singleton(dirName));
LogHelper.subInfo("Asset successfully downloaded: '%s'", dirName);
return;
}
LogHelper.error("Error download %s. All mirrors return error", dirName);
}
}