From 89efa71ced728a61e8ce8600d058db5fcf303dfc Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sun, 29 Jan 2017 12:23:38 +0800 Subject: [PATCH] Supported BMCL Liteloader downloads --- .../launcher/core/asset/IAssetsHandler.java | 2 +- .../core/asset/MinecraftAssetService.java | 4 +- .../download/BMCLAPIDownloadProvider.java | 5 +- .../download/MinecraftDownloadService.java | 2 +- .../install/MinecraftInstallerService.java | 6 +- .../core/install/forge/ForgeInstaller.java | 4 +- .../liteloader/LiteLoaderInstaller.java | 8 +-- .../LiteLoaderInstallerVersion.java | 58 +++++++++++++++++++ .../liteloader/LiteLoaderVersionList.java | 40 +------------ .../install/optifine/OptiFineInstaller.java | 2 +- .../install/optifine/OptiFineVersion.java | 7 ++- .../bmcl/OptiFineBMCLVersionList.java | 20 +++---- .../core/mod/MinecraftModService.java | 2 +- .../core/version/MinecraftVersionManager.java | 2 +- .../util/upgrade/AppDataUpgrader.java | 2 +- .../hellominecraft/util/system/FileUtils.java | 17 +++--- .../util/tasks/download/FileDownloadTask.java | 3 +- 17 files changed, 106 insertions(+), 78 deletions(-) create mode 100644 HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstallerVersion.java diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java index d09a6275f..ef3d3f327 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java @@ -107,7 +107,7 @@ public abstract class IAssetsHandler { String mark = assetsDownloadURLs.get(i); String url = u + mark; File location = assetsLocalNames.get(i); - if (!location.getParentFile().exists() && !location.getParentFile().mkdirs()) + if (!FileUtils.makeDirectory(location.getParentFile())) HMCLog.warn("Failed to make directories: " + location.getParent()); if (location.isDirectory()) continue; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java index 1c3b3c948..4452668be 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java @@ -71,7 +71,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { @Override public Task downloadMinecraftAssetsIndex(AssetIndexDownloadInfo assetIndex) { File assetsLocation = getAssets(); - if (!assetsLocation.exists() && !assetsLocation.mkdirs()) + if (!FileUtils.makeDirectory(assetsLocation)) HMCLog.warn("Failed to make directories: " + assetsLocation); File assetsIndex = getIndexFile(assetIndex.getId()); File renamed = null; @@ -101,7 +101,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { @Override public boolean downloadMinecraftAssetsIndexAsync(AssetIndexDownloadInfo assetIndex) { File assetsDir = getAssets(); - if (!assetsDir.mkdirs() && !assetsDir.isDirectory()) + if (!FileUtils.makeDirectory(assetsDir)) HMCLog.warn("Failed to make directories: " + assetsDir); File assetsIndex = getIndexFile(assetIndex.getId()); File renamed = null; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java index 24536b9b3..94e11757d 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java @@ -18,6 +18,7 @@ package org.jackhuang.hellominecraft.launcher.core.download; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList; +import org.jackhuang.hellominecraft.util.C; /** * @@ -71,7 +72,9 @@ public class BMCLAPIDownloadProvider extends IDownloadProvider { : str.replace("https://launchermeta.mojang.com", "http://bmclapi2.bangbang93.com") .replace("https://launcher.mojang.com", "http://bmclapi2.bangbang93.com") .replace("https://libraries.minecraft.net", "http://bmclapi2.bangbang93.com/libraries") - .replace("http://files.minecraftforge.net/maven", "http://bmclapi2.bangbang93.com/maven"); + .replace("http://files.minecraftforge.net/maven", "http://bmclapi2.bangbang93.com/maven") + .replace(C.URL_LITELOADER_LIST, "http://bmclapi2.bangbang93.com/maven/com/mumfrey/liteloader/versions.json") + .replace("http://dl.liteloader.com/versions", "http://bmclapi2.bangbang93.com/maven"); } @Override diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java index 034f2a0f7..aa3f09fa6 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java @@ -144,7 +144,7 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { String jsonURL = currentVersion.getUrl(service.getDownloadType()); File vpath = new File(service.baseDirectory(), "versions/" + id); File mvt = new File(vpath, id + ".json"); - if (!vpath.exists() && !vpath.mkdirs()) + if (!FileUtils.makeDirectory(vpath)) HMCLog.warn("Failed to make directories: " + vpath); if (mvt.exists() && !mvt.delete()) HMCLog.warn("Failed to delete " + mvt); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java index 4a79cb7b5..e6ab59ab8 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java @@ -23,7 +23,7 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList.InstallerVersion; import org.jackhuang.hellominecraft.launcher.core.install.forge.ForgeInstaller; import org.jackhuang.hellominecraft.launcher.core.install.liteloader.LiteLoaderInstaller; -import org.jackhuang.hellominecraft.launcher.core.install.liteloader.LiteLoaderVersionList; +import org.jackhuang.hellominecraft.launcher.core.install.liteloader.LiteLoaderInstallerVersion; import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineInstaller; import org.jackhuang.hellominecraft.launcher.core.install.optifine.vanilla.OptiFineDownloadFormatter; import org.jackhuang.hellominecraft.util.tasks.Task; @@ -79,11 +79,11 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService @Override public Task downloadLiteLoader(String installId, InstallerVersion v) { - if (!(v instanceof LiteLoaderVersionList.LiteLoaderInstallerVersion)) + if (!(v instanceof LiteLoaderInstallerVersion)) throw new Error("Download lite loader but the version is not ll's."); File filepath = IOUtils.tryGetCanonicalFile("liteloader-universal.jar"); FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader"); - return task.with(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task)) + return task.with(new LiteLoaderInstaller(service, installId, (LiteLoaderInstallerVersion) v).registerPreviousResult(task)) .with(new DeleteFileTask(filepath)); } } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java index 573dc87f7..e6b7ab404 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java @@ -64,7 +64,7 @@ public class ForgeInstaller extends Task { } else throw new IllegalStateException(C.i18n("install.no_version")); File to = new File(gameDir, "versions" + File.separator + profile.install.getTarget()); - if (!to.exists() && !to.mkdirs()) + if (!FileUtils.makeDirectory(to)) HMCLog.warn("Failed to make new version folder " + to); HMCLog.log("Copying jar..." + profile.install.getMinecraft() + ".jar to " + profile.install.getTarget() + ".jar"); @@ -79,7 +79,7 @@ public class ForgeInstaller extends Task { InputStream is = zipFile.getInputStream(entry); MinecraftLibrary forge = new MinecraftLibrary(profile.install.getPath()); File file = new File(gameDir, "libraries/" + forge.getDownloadInfo().path); - if (file.getParentFile().mkdirs()) + if (!FileUtils.makeDirectory(file)) HMCLog.warn("Failed to make library directory " + file.getParent()); try (FileOutputStream fos = FileUtils.openOutputStream(file)) { IOUtils.copyStream(is, fos); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java index 0610c2a32..2597f6e67 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java @@ -36,16 +36,16 @@ import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion; */ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar { - public LiteLoaderVersionList.LiteLoaderInstallerVersion version; + public LiteLoaderInstallerVersion version; public File installer; public String installId; public IMinecraftService service; - public LiteLoaderInstaller(IMinecraftService service, String installId, LiteLoaderVersionList.LiteLoaderInstallerVersion v) { + public LiteLoaderInstaller(IMinecraftService service, String installId, LiteLoaderInstallerVersion v) { this(service, installId, v, null); } - public LiteLoaderInstaller(IMinecraftService service, String installId, LiteLoaderVersionList.LiteLoaderInstallerVersion v, File installer) { + public LiteLoaderInstaller(IMinecraftService service, String installId, LiteLoaderInstallerVersion v, File installer) { this.service = service; this.installId = installId; this.version = v; @@ -75,7 +75,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar mv.mainClass = "net.minecraft.launchwrapper.Launch"; mv.minecraftArguments += " --tweakClass " + version.tweakClass; File folder = new File(service.baseDirectory(), "versions/" + mv.id); - if (!folder.exists() && folder.mkdirs()) + if (!FileUtils.makeDirectory(folder)) HMCLog.warn("Failed to create new liteloader version " + folder); File json = new File(folder, mv.id + ".json"); HMCLog.log("Creating new version profile..." + mv.id + ".json"); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstallerVersion.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstallerVersion.java new file mode 100644 index 000000000..9b5cab2a0 --- /dev/null +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstallerVersion.java @@ -0,0 +1,58 @@ +/* + * Hello Minecraft! Launcher. + * Copyright (C) 2013 huangyuhui + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see {http://www.gnu.org/licenses/}. + */ +package org.jackhuang.hellominecraft.launcher.core.install.liteloader; + +import java.util.Arrays; +import java.util.Objects; +import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList; +import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary; + +/** + * + * @author huang + */ +public class LiteLoaderInstallerVersion extends InstallerVersionList.InstallerVersion { + + public MinecraftLibrary[] libraries; + public String tweakClass; + + public LiteLoaderInstallerVersion(String selfVersion, String mcVersion) { + super(selfVersion, mcVersion); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 13 * hash + Arrays.deepHashCode(this.libraries); + hash = 13 * hash + Objects.hashCode(this.tweakClass); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null || !(obj instanceof LiteLoaderVersionList)) + return false; + if (this == obj) + return true; + final LiteLoaderInstallerVersion other = (LiteLoaderInstallerVersion) obj; + if (!Objects.equals(this.tweakClass, other.tweakClass)) + return false; + return Arrays.deepEquals(this.libraries, other.libraries); + } + +} diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java index b689478a5..c3b8cf918 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java @@ -23,9 +23,8 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Objects; +import org.jackhuang.hellominecraft.launcher.core.download.DownloadType; import org.jackhuang.hellominecraft.util.C; -import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator; import org.jackhuang.hellominecraft.util.StrUtils; @@ -54,7 +53,7 @@ public class LiteLoaderVersionList extends InstallerVersionList { if (root != null) return null; return new TaskInfo(C.i18n("install.liteloader.get_list")) { - HTTPGetTask task = new HTTPGetTask(C.URL_LITELOADER_LIST); + HTTPGetTask task = new HTTPGetTask(DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(C.URL_LITELOADER_LIST)); @Override public Collection getDependTasks() { @@ -82,7 +81,7 @@ public class LiteLoaderVersionList extends InstallerVersionList { continue; LiteLoaderVersion v = entry.getValue(); LiteLoaderInstallerVersion iv = new LiteLoaderInstallerVersion(v.version, StrUtils.formatVersion(arr.getKey())); - iv.universal = "http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + arr.getKey() + "/" + v.file; + iv.universal = DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL("http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + arr.getKey() + "/" + v.file); iv.tweakClass = v.tweakClass; iv.libraries = Arrays.copyOf(v.libraries, v.libraries.length); iv.installer = "http://dl.liteloader.com/redist/" + iv.mcVersion + "/liteloader-installer-" + iv.selfVersion.replace("_", "-") + ".jar"; @@ -103,37 +102,4 @@ public class LiteLoaderVersionList extends InstallerVersionList { return "LiteLoader - LiteLoader Official Site(By: Mumfrey)"; } - public static class LiteLoaderInstallerVersion extends InstallerVersion { - - public MinecraftLibrary[] libraries; - public String tweakClass; - - public LiteLoaderInstallerVersion(String selfVersion, String mcVersion) { - super(selfVersion, mcVersion); - } - - @Override - public int hashCode() { - int hash = 7; - hash = 13 * hash + Arrays.deepHashCode(this.libraries); - hash = 13 * hash + Objects.hashCode(this.tweakClass); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof LiteLoaderVersionList)) - return false; - if (this == obj) - return true; - final LiteLoaderInstallerVersion other = (LiteLoaderInstallerVersion) obj; - if (!Objects.equals(this.tweakClass, other.tweakClass)) - return false; - return Arrays.deepEquals(this.libraries, other.libraries); - } - - - - } - } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java index 41ffc7c69..636edab41 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java @@ -73,7 +73,7 @@ public class OptiFineInstaller extends Task implements PreviousResultRegistrar(); versions = new ArrayList<>(); + + HashSet duplicates = new HashSet<>(); if (s == null) return; root = C.GSON.fromJson(s, TYPE); for (OptiFineVersion v : root) { - v.setMirror(v.getMirror().replace("http://optifine.net/http://optifine.net/", "http://optifine.net/")); - - if (StrUtils.isBlank(v.getMCVersion())) { - Pattern p = Pattern.compile("OptiFine (.*) HD"); - Matcher m = p.matcher(v.getVersion()); - while (m.find()) - v.setMCVersion(m.group(1)); - } + v.setVersion(v.type + '_' + v.patch); + v.setMirror(String.format("http://bmclapi2.bangbang93.com/optifine/%s/%s/%s", v.getMCVersion(), v.type, v.patch)); + if (duplicates.contains(v.getMirror())) + continue; + else + duplicates.add(v.getMirror()); InstallerVersion iv = new InstallerVersion(v.getVersion(), StrUtils.formatVersion(v.getMCVersion())); List al = ArrayUtils.tryGetMapWithList(versionMap, StrUtils.formatVersion(v.getMCVersion())); - //String url = "http://bmclapi.bangbang93.com/optifine/" + iv.selfVersion.replace(" ", "%20"); iv.installer = iv.universal = v.getMirror(); al.add(iv); versions.add(iv); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java index c29b00c49..16cdf6605 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java @@ -78,7 +78,7 @@ public class MinecraftModService extends IMinecraftModService { if (!modCache.containsKey(id)) recacheMods(id); File modsFolder = service.version().getRunDirectory(id, "mods"); - if (!modsFolder.exists() && !modsFolder.mkdirs()) + if (!FileUtils.makeDirectory(modsFolder)) HMCLog.warn("Failed to make directories: " + modsFolder); File newf = new File(modsFolder, f.getName()); FileUtils.copyFile(f, newf); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java index 5536459e3..88a758ea0 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java @@ -256,7 +256,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { @Override public boolean onLaunch(String id) { File resourcePacks = new File(getRunDirectory(id), "resourcepacks"); - if (!resourcePacks.exists() && !resourcePacks.mkdirs()) + if (!FileUtils.makeDirectory(resourcePacks)) HMCLog.warn("Failed to make resourcePacks: " + resourcePacks); return true; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java index 8feb96497..b5df83372 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java @@ -163,7 +163,7 @@ public class AppDataUpgrader extends IUpgrader { public void executeTask(boolean areDependTasksSucceeded) throws Exception { HashMap json = new HashMap<>(); File f = getSelf(newestVersion); - if (!f.getParentFile().exists() && !f.getParentFile().mkdirs()) + if (!FileUtils.makeDirectory(f.getParentFile())) HMCLog.warn("Failed to make directories: " + f.getParent()); for (int i = 0; f.exists(); i++) diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java index 41fb160dd..32caf44d1 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java @@ -39,6 +39,10 @@ public final class FileUtils { private FileUtils() { } + + public static boolean makeDirectory(File directory) { + return directory.isDirectory() || directory.mkdirs(); + } public static void deleteDirectory(File directory) throws IOException { @@ -78,7 +82,7 @@ public final class FileUtils { public static void cleanDirectory(File directory) throws IOException { if (!directory.exists()) { - if (!directory.mkdirs() && !directory.isDirectory()) + if (!FileUtils.makeDirectory(directory)) throw new IOException("Failed to create directory: " + directory); return; } @@ -174,7 +178,7 @@ public final class FileUtils { if (destDir.exists()) { if (!destDir.isDirectory()) throw new IOException("Destination '" + destDir + "' exists but is not a directory"); - } else if ((!destDir.mkdirs()) && (!destDir.isDirectory())) + } else if (!FileUtils.makeDirectory(destDir)) throw new IOException("Destination '" + destDir + "' directory cannot be created"); if (!destDir.canWrite()) @@ -229,11 +233,9 @@ public final class FileUtils { if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same"); File parentFile = destFile.getParentFile(); - if ((parentFile != null) - && (!parentFile.mkdirs()) && (!parentFile.isDirectory())) + if (parentFile != null && !FileUtils.makeDirectory(parentFile)) throw new IOException("Destination '" + parentFile + "' directory cannot be created"); - - if ((destFile.exists()) && (!destFile.canWrite())) + if (destFile.exists() && !destFile.canWrite()) throw new IOException("Destination '" + destFile + "' exists but is read-only"); doCopyFile(srcFile, destFile); } @@ -352,8 +354,7 @@ public final class FileUtils { throw new IOException("File '" + file + "' cannot be written to"); } else { File parent = file.getParentFile(); - if ((parent != null) - && (!parent.mkdirs()) && (!parent.isDirectory())) + if (parent != null && !FileUtils.makeDirectory(parent)) throw new IOException("Directory '" + parent + "' could not be created"); if (!file.createNewFile()) throw new IOException("File `" + file + "` cannot be created."); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java index 02e2bf16e..227acd351 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java @@ -30,6 +30,7 @@ import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.code.DigestUtils; import org.jackhuang.hellominecraft.util.func.Function; import org.jackhuang.hellominecraft.util.logging.HMCLog; +import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.tasks.Task; import org.jackhuang.hellominecraft.util.tasks.comm.PreviousResult; import org.jackhuang.hellominecraft.util.tasks.comm.PreviousResultRegistrar; @@ -137,7 +138,7 @@ public class FileDownloadTask extends Task implements PreviousResult, Prev if (contentLength < 1) throw new IOException("The content length is invalid."); - if (!filePath.getParentFile().mkdirs() && !filePath.getParentFile().isDirectory()) + if (!FileUtils.makeDirectory(filePath.getParentFile())) throw new IOException("Could not make directory"); // We use temp file to prevent files from aborting downloading and broken.