From f0c7f54cc64b19f744635eb02e0eb753f375cf92 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 8 Feb 2019 15:54:28 +0800 Subject: [PATCH] Redownload asset index when install new game --- .../java/org/jackhuang/hmcl/ui/versions/Versions.java | 3 +-- .../jackhuang/hmcl/download/DefaultDependencyManager.java | 2 +- .../org/jackhuang/hmcl/download/DefaultGameBuilder.java | 2 +- .../hmcl/download/game/GameAssetDownloadTask.java | 8 +++++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java index a810a21d2..45c91f1c1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java @@ -81,8 +81,7 @@ public class Versions { public static void updateGameAssets(Profile profile, String version) { Version resolvedVersion = profile.getRepository().getResolvedVersion(version); - TaskExecutor executor = new GameAssetIndexDownloadTask(profile.getDependency(), resolvedVersion) - .then(new GameAssetDownloadTask(profile.getDependency(), resolvedVersion)) + TaskExecutor executor = new GameAssetDownloadTask(profile.getDependency(), resolvedVersion, GameAssetDownloadTask.DOWNLOAD_INDEX_FORCIBLY) .executor(); Controllers.taskDialog(executor, i18n("version.manage.redownload_assets_index")); executor.start(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java index 481034a2d..a955527ca 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java @@ -74,7 +74,7 @@ public class DefaultDependencyManager extends AbstractDependencyManager { @Override public Task checkGameCompletionAsync(Version version) { return new ParallelTask( - new GameAssetDownloadTask(this, version), + new GameAssetDownloadTask(this, version, GameAssetDownloadTask.DOWNLOAD_INDEX_IF_NECESSARY), new GameLibrariesTask(this, version) ); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java index fac219b47..5ed67f757 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java @@ -54,7 +54,7 @@ public class DefaultGameBuilder extends GameBuilder { version = version.setId(name).setJar(null); variables.set("version", version); Task result = downloadGameAsync(gameVersion, version).then(new ParallelTask( - new GameAssetDownloadTask(dependencyManager, version), + new GameAssetDownloadTask(dependencyManager, version, GameAssetDownloadTask.DOWNLOAD_INDEX_FORCIBLY), new GameLibrariesTask(dependencyManager, version) // Game libraries will be downloaded for multiple times partly, this time is for vanilla libraries. ).with(new VersionJsonSaveTask(dependencyManager.getGameRepository(), version))); // using [with] because download failure here are tolerant. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java index b064d3172..9c435ce41 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java @@ -53,13 +53,13 @@ public final class GameAssetDownloadTask extends Task { * @param dependencyManager the dependency manager that can provides {@link org.jackhuang.hmcl.game.GameRepository} * @param version the resolved version */ - public GameAssetDownloadTask(AbstractDependencyManager dependencyManager, Version version) { + public GameAssetDownloadTask(AbstractDependencyManager dependencyManager, Version version, boolean forceDownloadingIndex) { this.dependencyManager = dependencyManager; this.version = version; this.assetIndexInfo = version.getAssetIndex(); this.assetIndexFile = dependencyManager.getGameRepository().getIndexFile(version.getId(), assetIndexInfo.getId()); - if (!assetIndexFile.exists()) + if (!assetIndexFile.exists() || forceDownloadingIndex) dependents.add(new GameAssetIndexDownloadTask(dependencyManager, version)); } @@ -99,5 +99,7 @@ public final class GameAssetDownloadTask extends Task { updateProgress(++progress, index.getObjects().size()); } } - + + public static final boolean DOWNLOAD_INDEX_FORCIBLY = true; + public static final boolean DOWNLOAD_INDEX_IF_NECESSARY = false; }