diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadAssetCommand.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadAssetCommand.java index 977f0fd7..db2c7a4a 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadAssetCommand.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadAssetCommand.java @@ -5,6 +5,7 @@ import org.apache.logging.log4j.Logger; import pro.gravit.launcher.base.Launcher; import pro.gravit.launcher.base.Downloader; +import pro.gravit.launcher.core.hasher.HashedDir; import pro.gravit.launchserver.HttpRequester; import pro.gravit.launchserver.LaunchServer; import pro.gravit.launchserver.command.Command; @@ -46,6 +47,10 @@ public void invoke(String... args) throws Exception { String type = args.length > 2 ? args[2] : "mojang"; Path assetDir = server.createTempDirectory("assets"); var updatesDir = server.config.updatesProvider.getUpdatesDir(dirName); + if(updatesDir == null) { + updatesDir = new HashedDir(); + server.config.updatesProvider.create(dirName); + } // Create asset dir if (Files.notExists(assetDir)) { @@ -92,7 +97,7 @@ public void invoke(String... args) throws Exception { hash = hash.substring(0, 2) + "/" + hash; var size = value.get("size").getAsLong(); var path = "objects/" + hash; - if (updatesDir.findRecursive(path).isFound()) { + if (updatesDir.tryFindRecursive(path).isFound()) { continue; } toDownload.add(new Downloader.SizedFile(hash, path, size)); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadClientCommand.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadClientCommand.java index c13a5a5c..cdedf5d3 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadClientCommand.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/DownloadClientCommand.java @@ -43,6 +43,7 @@ public void invoke(String... args) throws IOException, CommandException { String versionName = args[0]; String dirName = IOHelper.verifyFileName(args[1] != null ? args[1] : args[0]); Path clientDir = server.createTempDirectory("client"); + server.config.updatesProvider.create(dirName); boolean isMirrorClientDownload = false; if (args.length > 2) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/UnindexAssetCommand.java b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/UnindexAssetCommand.java index 3d596998..89ce4bc8 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/UnindexAssetCommand.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/command/hash/UnindexAssetCommand.java @@ -5,6 +5,7 @@ import com.google.gson.JsonParser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import pro.gravit.launcher.core.hasher.HashedDir; import pro.gravit.launchserver.LaunchServer; import pro.gravit.launchserver.command.Command; import pro.gravit.utils.command.CommandException; @@ -41,6 +42,9 @@ public void invoke(String... args) throws Exception { String indexFileName = IOHelper.verifyFileName(args[1]); String outputAssetDirName = IOHelper.verifyFileName(args[2]); var updatesDir = server.config.updatesProvider.getUpdatesDir(inputAssetDirName); + if(updatesDir == null) { + server.config.updatesProvider.create(inputAssetDirName); + } Path outputAssetDir = Path.of(outputAssetDirName); // Create new asset dir diff --git a/LauncherCore/src/main/java/pro/gravit/launcher/core/hasher/HashedDir.java b/LauncherCore/src/main/java/pro/gravit/launcher/core/hasher/HashedDir.java index 5a6f45f4..427b323f 100644 --- a/LauncherCore/src/main/java/pro/gravit/launcher/core/hasher/HashedDir.java +++ b/LauncherCore/src/main/java/pro/gravit/launcher/core/hasher/HashedDir.java @@ -95,6 +95,35 @@ public FindRecursiveResult findRecursive(String path) { return new FindRecursiveResult(current, entry, name); } + public FindRecursiveResult tryFindRecursive(String path) { + StringTokenizer t = new StringTokenizer(path, "/"); + HashedDir current = this; + HashedEntry entry = null; + String name = null; + while (t.hasMoreTokens()) { + name = t.nextToken(); + HashedEntry e = current.map.get(name); + if (e == null && !t.hasMoreTokens()) { + break; + } + if (e == null) { + return new FindRecursiveResult(current, entry, name); + } + if (e.getType() == Type.DIR) { + if (!t.hasMoreTokens()) { + entry = e; + break; + } else { + current = ((HashedDir) e); + } + } else { + entry = e; + break; + } + } + return new FindRecursiveResult(current, entry, name); + } + public HashedEntry getEntry(String name) { return map.get(name); } diff --git a/modules b/modules index 287d0b83..38788df6 160000 --- a/modules +++ b/modules @@ -1 +1 @@ -Subproject commit 287d0b83b3c71fc7146e2b1cba7bc1760629ade1 +Subproject commit 38788df61f8efc5453fe9c05017b629648b5fe6f