add: auto fix malformed asset index file
This commit is contained in:
@@ -26,6 +26,7 @@ import org.jackhuang.hmcl.auth.AuthenticationException;
|
|||||||
import org.jackhuang.hmcl.auth.CredentialExpiredException;
|
import org.jackhuang.hmcl.auth.CredentialExpiredException;
|
||||||
import org.jackhuang.hmcl.download.DefaultDependencyManager;
|
import org.jackhuang.hmcl.download.DefaultDependencyManager;
|
||||||
import org.jackhuang.hmcl.download.MaintainTask;
|
import org.jackhuang.hmcl.download.MaintainTask;
|
||||||
|
import org.jackhuang.hmcl.download.game.GameAssetIndexDownloadTask;
|
||||||
import org.jackhuang.hmcl.download.game.LibraryDownloadException;
|
import org.jackhuang.hmcl.download.game.LibraryDownloadException;
|
||||||
import org.jackhuang.hmcl.launch.NotDecompressingNativesException;
|
import org.jackhuang.hmcl.launch.NotDecompressingNativesException;
|
||||||
import org.jackhuang.hmcl.launch.PermissionException;
|
import org.jackhuang.hmcl.launch.PermissionException;
|
||||||
@@ -239,6 +240,8 @@ public final class LauncherHelper {
|
|||||||
message = i18n("launch.failed.decompressing_natives") + ex.getLocalizedMessage();
|
message = i18n("launch.failed.decompressing_natives") + ex.getLocalizedMessage();
|
||||||
} else if (ex instanceof LibraryDownloadException) {
|
} else if (ex instanceof LibraryDownloadException) {
|
||||||
message = i18n("launch.failed.download_library", ((LibraryDownloadException) ex).getLibrary().getName()) + "\n" + StringUtils.getStackTrace(ex.getCause());
|
message = i18n("launch.failed.download_library", ((LibraryDownloadException) ex).getLibrary().getName()) + "\n" + StringUtils.getStackTrace(ex.getCause());
|
||||||
|
} else if (ex instanceof GameAssetIndexDownloadTask.GameAssetIndexMalformedException) {
|
||||||
|
message = i18n("assets.index.malformed");
|
||||||
} else {
|
} else {
|
||||||
message = StringUtils.getStackTrace(ex);
|
message = StringUtils.getStackTrace(ex);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hmcl.download.game;
|
package org.jackhuang.hmcl.download.game;
|
||||||
|
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
import org.jackhuang.hmcl.download.AbstractDependencyManager;
|
import org.jackhuang.hmcl.download.AbstractDependencyManager;
|
||||||
import org.jackhuang.hmcl.game.AssetIndex;
|
import org.jackhuang.hmcl.game.AssetIndex;
|
||||||
import org.jackhuang.hmcl.game.AssetIndexInfo;
|
import org.jackhuang.hmcl.game.AssetIndexInfo;
|
||||||
@@ -46,6 +47,8 @@ public final class GameAssetDownloadTask extends Task<Void> {
|
|||||||
private final File assetIndexFile;
|
private final File assetIndexFile;
|
||||||
private final List<Task<?>> dependents = new LinkedList<>();
|
private final List<Task<?>> dependents = new LinkedList<>();
|
||||||
private final List<Task<?>> dependencies = new LinkedList<>();
|
private final List<Task<?>> dependencies = new LinkedList<>();
|
||||||
|
private AssetIndex index;
|
||||||
|
private boolean retry = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
@@ -72,10 +75,32 @@ public final class GameAssetDownloadTask extends Task<Void> {
|
|||||||
public Collection<Task<?>> getDependencies() {
|
public Collection<Task<?>> getDependencies() {
|
||||||
return dependencies;
|
return dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean doPreExecute() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preExecute() throws Exception {
|
||||||
|
try {
|
||||||
|
index = JsonUtils.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class);
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
dependents.add(new GameAssetIndexDownloadTask(dependencyManager, this.version));
|
||||||
|
retry = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute() throws Exception {
|
public void execute() throws Exception {
|
||||||
AssetIndex index = JsonUtils.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class);
|
if (retry) {
|
||||||
|
try {
|
||||||
|
index = JsonUtils.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class);
|
||||||
|
} catch (JsonSyntaxException e) {
|
||||||
|
throw new GameAssetIndexDownloadTask.GameAssetIndexMalformedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int progress = 0;
|
int progress = 0;
|
||||||
if (index != null)
|
if (index != null)
|
||||||
for (AssetObject assetObject : index.getObjects().values()) {
|
for (AssetObject assetObject : index.getObjects().values()) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jackhuang.hmcl.task.Task;
|
|||||||
import org.jackhuang.hmcl.util.io.NetworkUtils;
|
import org.jackhuang.hmcl.util.io.NetworkUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -69,4 +70,7 @@ public final class GameAssetIndexDownloadTask extends Task<Void> {
|
|||||||
).setCacheRepository(dependencyManager.getCacheRepository()));
|
).setCacheRepository(dependencyManager.getCacheRepository()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class GameAssetIndexMalformedException extends IOException {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user