mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-16 07:16:27 -04:00
Fixed crash when a version inherits from a nonexistent version. Closes #269
This commit is contained in:
parent
08a31a92f2
commit
35047477fe
@ -137,7 +137,7 @@ public class DefaultGameRepository implements GameRepository {
|
|||||||
|
|
||||||
FileUtils.writeText(toJson, Constants.GSON.toJson(fromVersion.setId(to)));
|
FileUtils.writeText(toJson, Constants.GSON.toJson(fromVersion.setId(to)));
|
||||||
return true;
|
return true;
|
||||||
} catch (IOException | JsonSyntaxException | VersionNotFoundException e) {
|
} catch (IOException | JsonParseException | VersionNotFoundException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,6 +158,8 @@ public class DefaultGameRepository implements GameRepository {
|
|||||||
versions.put(version.getId(), version);
|
versions.put(version.getId(), version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SimpleVersionProvider provider = new SimpleVersionProvider();
|
||||||
|
|
||||||
File[] files = new File(getBaseDirectory(), "versions").listFiles();
|
File[] files = new File(getBaseDirectory(), "versions").listFiles();
|
||||||
if (files != null)
|
if (files != null)
|
||||||
for (File dir : files)
|
for (File dir : files)
|
||||||
@ -194,15 +196,25 @@ public class DefaultGameRepository implements GameRepository {
|
|||||||
try {
|
try {
|
||||||
FileUtils.writeText(json, Constants.GSON.toJson(version));
|
FileUtils.writeText(json, Constants.GSON.toJson(version));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logging.LOG.log(Level.WARNING, "Ignoring version {0} because wrong id {1} is set and cannot correct it.", new Object[] { id, version.getId() });
|
Logging.LOG.log(Level.WARNING, "Ignoring version {0} because wrong id {1} is set and cannot correct it.", new Object[]{id, version.getId()});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EventBus.EVENT_BUS.fireEvent(new LoadedOneVersionEvent(this, version)) != Event.Result.DENY)
|
provider.addVersion(version);
|
||||||
versions.put(id, version);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Version version : provider.getVersionMap().values()) {
|
||||||
|
try {
|
||||||
|
Version resolved = version.resolve(provider);
|
||||||
|
|
||||||
|
if (EventBus.EVENT_BUS.fireEvent(new LoadedOneVersionEvent(this, resolved)) != Event.Result.DENY)
|
||||||
|
versions.put(version.getId(), version);
|
||||||
|
} catch (VersionNotFoundException e) {
|
||||||
|
Logging.LOG.log(Level.WARNING, "Ignoring version {0} because it inherits from a nonexistent version.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loaded = true;
|
loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,9 +46,10 @@ public interface GameRepository extends VersionProvider {
|
|||||||
*
|
*
|
||||||
* @param id the id of version
|
* @param id the id of version
|
||||||
* @return the version you want
|
* @return the version you want
|
||||||
|
* @throws VersionNotFoundException if no version is id.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
Version getVersion(String id);
|
Version getVersion(String id) throws VersionNotFoundException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many version are there?
|
* How many version are there?
|
||||||
@ -125,7 +126,7 @@ public interface GameRepository extends VersionProvider {
|
|||||||
* @param version version id
|
* @param version version id
|
||||||
* @return the minecraft jar
|
* @return the minecraft jar
|
||||||
*/
|
*/
|
||||||
default File getVersionJar(String version) {
|
default File getVersionJar(String version) throws VersionNotFoundException {
|
||||||
return getVersionJar(getVersion(version).resolve(this));
|
return getVersionJar(getVersion(version).resolve(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,8 +136,7 @@ public interface GameRepository extends VersionProvider {
|
|||||||
* @param from The id of original version
|
* @param from The id of original version
|
||||||
* @param to The new id of the version
|
* @param to The new id of the version
|
||||||
* @throws UnsupportedOperationException if this game repository does not support renaming a version
|
* @throws UnsupportedOperationException if this game repository does not support renaming a version
|
||||||
* @throws java.io.IOException if I/O operation fails.
|
* @return true if the operation is done successfully, false if version `from` not found, version json is malformed or I/O errors occurred.
|
||||||
* @return true if the operation is done successfully.
|
|
||||||
*/
|
*/
|
||||||
boolean renameVersion(String from, String to);
|
boolean renameVersion(String from, String to);
|
||||||
|
|
||||||
@ -147,7 +147,6 @@ public interface GameRepository extends VersionProvider {
|
|||||||
*
|
*
|
||||||
* @param version the id of specific version that is relevant to [assetId]
|
* @param version the id of specific version that is relevant to [assetId]
|
||||||
* @param assetId the asset id, you can find it in [AssetIndexInfo.id] [Version.actualAssetIndex.id]
|
* @param assetId the asset id, you can find it in [AssetIndexInfo.id] [Version.actualAssetIndex.id]
|
||||||
* @throws java.io.IOException if I/O operation fails.
|
|
||||||
* @return the actual asset directory
|
* @return the actual asset directory
|
||||||
*/
|
*/
|
||||||
File getActualAssetDirectory(String version, String assetId);
|
File getActualAssetDirectory(String version, String assetId);
|
||||||
|
@ -44,4 +44,8 @@ public class SimpleVersionProvider implements VersionProvider {
|
|||||||
public void addVersion(Version version) {
|
public void addVersion(Version version) {
|
||||||
versionMap.put(version.getId(), version);
|
versionMap.put(version.getId(), version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Version> getVersionMap() {
|
||||||
|
return versionMap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,11 +143,11 @@ public class Version implements Comparable<Version>, Validation {
|
|||||||
/**
|
/**
|
||||||
* Resolve given version
|
* Resolve given version
|
||||||
*/
|
*/
|
||||||
public Version resolve(VersionProvider provider) {
|
public Version resolve(VersionProvider provider) throws VersionNotFoundException {
|
||||||
return resolve(provider, new HashSet<>());
|
return resolve(provider, new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Version resolve(VersionProvider provider, Set<String> resolvedSoFar) {
|
protected Version resolve(VersionProvider provider, Set<String> resolvedSoFar) throws VersionNotFoundException {
|
||||||
if (inheritsFrom == null)
|
if (inheritsFrom == null)
|
||||||
return this;
|
return this;
|
||||||
|
|
||||||
|
@ -39,5 +39,5 @@ public interface VersionProvider {
|
|||||||
* @param id the id of version
|
* @param id the id of version
|
||||||
* @return the version you want
|
* @return the version you want
|
||||||
*/
|
*/
|
||||||
Version getVersion(String id);
|
Version getVersion(String id) throws VersionNotFoundException;
|
||||||
}
|
}
|
||||||
|
@ -203,7 +203,7 @@ public class FileDownloadTask extends Task {
|
|||||||
if (!FileUtils.makeDirectory(file.getAbsoluteFile().getParentFile()))
|
if (!FileUtils.makeDirectory(file.getAbsoluteFile().getParentFile()))
|
||||||
throw new IOException("Unable to make parent directory " + file);
|
throw new IOException("Unable to make parent directory " + file);
|
||||||
try {
|
try {
|
||||||
FileUtils.cutFile(temp, file);
|
FileUtils.moveFile(temp, file);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IOException("Unable to move temp file from " + temp + " to " + file, e);
|
throw new IOException("Unable to move temp file from " + temp + " to " + file, e);
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ public final class FileUtils {
|
|||||||
doCopyFile(srcFile, destFile);
|
doCopyFile(srcFile, destFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void cutFile(File srcFile, File destFile) throws IOException {
|
public static void moveFile(File srcFile, File destFile) throws IOException {
|
||||||
copyFile(srcFile, destFile);
|
copyFile(srcFile, destFile);
|
||||||
srcFile.delete();
|
srcFile.delete();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user