/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.model.modpack; import com.fasterxml.jackson.annotation.JsonIgnore; import com.skcraft.launcher.install.InstallLog; import com.skcraft.launcher.install.InstallLogFileMover; import com.skcraft.launcher.install.Installer; import com.skcraft.launcher.install.UpdateCache; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import static com.google.common.base.Preconditions.checkNotNull; import static com.skcraft.launcher.LauncherUtils.concat; @Data @EqualsAndHashCode(callSuper = false) public class FileInstall extends ManifestEntry { private String version; private String hash; private String location; private String to; private long size; private boolean userFile; @JsonIgnore public String getImpliedVersion() { return checkNotNull(version != null ? version : hash); } @JsonIgnore public String getTargetPath() { return checkNotNull(this.to != null ? this.to : location); } @Override public void install(@NonNull Installer installer, @NonNull InstallLog log, @NonNull UpdateCache cache, @NonNull File contentDir) throws MalformedURLException { if (getWhen() != null && !getWhen().matches()) { return; } String targetPath = getTargetPath(); File targetFile = new File(contentDir, targetPath); String fileVersion = getImpliedVersion(); URL url = concat(getManifest().getObjectsUrl(), getLocation()); if (!(isUserFile() && targetFile.exists()) && (!targetFile.exists() || cache.mark(FilenameUtils.normalize(targetPath), fileVersion))) { long size = this.size; if (size <= 0) { size = 10 * 1024; } File tempFile = installer.getDownloader().download(url, fileVersion, size, to); installer.queue(new InstallLogFileMover(log, tempFile, targetFile)); } else { log.add(to, to); } } }