Redownload asset index when install new game

This commit is contained in:
huanghongxun 2019-02-08 15:54:28 +08:00
parent 62c38482f6
commit f0c7f54cc6
4 changed files with 8 additions and 7 deletions

View File

@ -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();

View File

@ -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)
);
}

View File

@ -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.

View File

@ -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 <b>resolved</b> 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));
}
@ -100,4 +100,6 @@ public final class GameAssetDownloadTask extends Task {
}
}
public static final boolean DOWNLOAD_INDEX_FORCIBLY = true;
public static final boolean DOWNLOAD_INDEX_IF_NECESSARY = false;
}