Newer
Older
KeeperJerry_Launcher / LaunchServer / source / command / hash / DownloadAssetCommand.java
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);
    }
}