From 37a39098f8d4d6d0c8d4bf4aec50154b3f33fdc9 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Fri, 8 Jun 2018 16:03:43 +0800 Subject: [PATCH] Try to fix VersionNotFoundException. Closes #298 --- .../hmcl/game/DefaultGameRepository.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java index 9594d79f5..67cb425fb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java @@ -155,8 +155,26 @@ public class DefaultGameRepository implements GameRepository { File file = getVersionRoot(id); if (!file.exists()) return true; + // test if no file in this version directory is occupied. + File removedFile = new File(file.getAbsoluteFile().getParentFile(), file.getName() + "_removed"); + if (!file.renameTo(removedFile)) + return false; + + // remove json files first to ensure HMCL will not recognize this folder as a valid version. + List jsons = FileUtils.listFilesByExtension(removedFile, "json"); + jsons.forEach(f -> { + if (!f.delete()) + Logging.LOG.warning("Unable to delete file " + f); + }); + versions.remove(id); - return FileUtils.deleteDirectoryQuietly(file); + // remove the version from version list regardless of whether the directory was removed successfully or not. + try { + FileUtils.deleteDirectory(removedFile); + } catch (IOException e) { + Logging.LOG.log(Level.WARNING, "Unable to remove version folder: " + file, e); + } + return true; } protected void refreshVersionsImpl() {