diff --git a/src/main/java/io/gitlab/jfronny/inceptum/cli/LaunchCommand.java b/src/main/java/io/gitlab/jfronny/inceptum/cli/LaunchCommand.java index 378649f..64133d9 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/cli/LaunchCommand.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/cli/LaunchCommand.java @@ -3,6 +3,7 @@ package io.gitlab.jfronny.inceptum.cli; import io.gitlab.jfronny.inceptum.Inceptum; import io.gitlab.jfronny.inceptum.install.Steps; import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; +import io.gitlab.jfronny.inceptum.util.InceptumLockReader; import io.gitlab.jfronny.inceptum.util.launch.ClientLauncher; import io.gitlab.jfronny.inceptum.util.ProcessUtils; import io.gitlab.jfronny.inceptum.util.Utils; @@ -48,20 +49,18 @@ public class LaunchCommand extends Command { Inceptum.LOGGER.error("Not a valid instance"); return; } - if (Files.exists(instanceDir.resolve("inceptum.setup.lock"))) { + if (InceptumLockReader.isSetupLocked(instanceDir)) { Inceptum.LOGGER.error("This instance is still being set up"); return; } - if (Files.exists(instanceDir.resolve("inceptum.lock"))) { - try { - if (ProcessUtils.isProcessAlive(Files.readString(instanceDir.resolve("inceptum.lock")))) { - Inceptum.LOGGER.error("This instance is already being ran"); - return; - } - } catch (IOException e) { - Inceptum.showError("Could not read inceptum lock", e); + try { + if (InceptumLockReader.isRunningLocked(instanceDir)) { + Inceptum.LOGGER.error("This instance is already running"); return; } + } catch (IOException e) { + Inceptum.showError("Could not read inceptum lock", e); + return; } InstanceMeta instance; try { diff --git a/src/main/java/io/gitlab/jfronny/inceptum/install/Steps.java b/src/main/java/io/gitlab/jfronny/inceptum/install/Steps.java index 030721b..efd5279 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/install/Steps.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/install/Steps.java @@ -6,6 +6,7 @@ import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; import io.gitlab.jfronny.inceptum.model.inceptum.LoaderInfo; import io.gitlab.jfronny.inceptum.model.mojang.VersionInfo; import io.gitlab.jfronny.inceptum.model.mojang.VersionsListInfo; +import io.gitlab.jfronny.inceptum.util.InceptumLockReader; import io.gitlab.jfronny.inceptum.util.ProcessUtils; import io.gitlab.jfronny.inceptum.util.Utils; import io.gitlab.jfronny.inceptum.util.api.FabricMetaApi; @@ -41,12 +42,7 @@ public class Steps { } public static void reDownload(Path instance) throws IOException { - if (Files.exists(instance.resolve("inceptum.setup.lock"))) return; - if (Files.exists(instance.resolve("inceptum.lock"))) { - if (ProcessUtils.isProcessAlive(Files.readString(instance.resolve("inceptum.lock")))) { - return; - } else Files.delete(instance.resolve("inceptum.lock")); - } + if (InceptumLockReader.isLocked(instance)) return; InstanceMeta im = Utils.loadObject(instance.resolve("instance.json"), InstanceMeta.class); boolean found = false; for (VersionsListInfo version : McApi.getVersions().versions) { diff --git a/src/main/java/io/gitlab/jfronny/inceptum/install/steps/SetupDirsStep.java b/src/main/java/io/gitlab/jfronny/inceptum/install/steps/SetupDirsStep.java index 1f809d8..28ac74a 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/install/steps/SetupDirsStep.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/install/steps/SetupDirsStep.java @@ -5,6 +5,7 @@ import io.gitlab.jfronny.inceptum.install.SetupStepInfo; import io.gitlab.jfronny.inceptum.install.Step; import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; import io.gitlab.jfronny.inceptum.model.inceptum.LoaderInfo; +import io.gitlab.jfronny.inceptum.util.InceptumLockReader; import java.io.IOException; import java.nio.file.Files; @@ -16,8 +17,8 @@ public class SetupDirsStep implements Step { public void execute(SetupStepInfo info, AtomicBoolean stopThread) throws IOException { info.setState("Setting up instance dirs"); Path iDir = Inceptum.INSTANCE_DIR.resolve(info.name()); + InceptumLockReader.setSetupLock(iDir, true); if (!Files.exists(iDir)) { - Files.createDirectories(iDir.resolve("inceptum.setup.lock")); Files.createDirectories(iDir.resolve("resourcepacks")); Files.createDirectories(iDir.resolve("saves")); Files.createDirectories(iDir.resolve("screenshots")); diff --git a/src/main/java/io/gitlab/jfronny/inceptum/install/steps/WriteMetadataStep.java b/src/main/java/io/gitlab/jfronny/inceptum/install/steps/WriteMetadataStep.java index a9f83e8..a6a89f3 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/install/steps/WriteMetadataStep.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/install/steps/WriteMetadataStep.java @@ -4,6 +4,7 @@ import io.gitlab.jfronny.inceptum.Inceptum; import io.gitlab.jfronny.inceptum.install.SetupStepInfo; import io.gitlab.jfronny.inceptum.install.Step; import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; +import io.gitlab.jfronny.inceptum.util.InceptumLockReader; import io.gitlab.jfronny.inceptum.util.Utils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -22,8 +23,7 @@ public class WriteMetadataStep implements Step { InstanceMeta meta = new InstanceMeta(); meta.version = info.version().id; Utils.writeObject(metaDir, meta); - Path lock = instance.resolve("inceptum.setup.lock"); - if (Files.exists(lock)) Files.delete(lock); + InceptumLockReader.setSetupLock(instance, false); if (!Files.exists(instance.resolve(".gitignore"))) { Files.writeString(instance.resolve(".gitignore"), """ realms_persistence.json diff --git a/src/main/java/io/gitlab/jfronny/inceptum/util/InceptumLockReader.java b/src/main/java/io/gitlab/jfronny/inceptum/util/InceptumLockReader.java new file mode 100644 index 0000000..8f1ea92 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/inceptum/util/InceptumLockReader.java @@ -0,0 +1,38 @@ +package io.gitlab.jfronny.inceptum.util; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class InceptumLockReader { + private static final String INCEPTUM_LOCK = "inceptum.lock"; + private static final String INCEPTUM_SETUP_LOCK = "inceptum.setup.lock"; + public static void setSetupLock(Path instancePath, boolean state) throws IOException { + if (isSetupLocked(instancePath)) { + if (!state) Files.delete(instancePath.resolve(INCEPTUM_SETUP_LOCK)); + } + else { + if (state) Files.createDirectories(instancePath.resolve(INCEPTUM_SETUP_LOCK)); + } + } + + public static boolean isSetupLocked(Path instancePath) { + return Files.exists(instancePath.resolve(INCEPTUM_SETUP_LOCK)); + } + + public static void setRunningLock(Path instancePath, long pid) throws IOException { + Files.writeString(instancePath.resolve(INCEPTUM_LOCK), Long.toString(pid)); + } + + public static boolean isRunningLocked(Path instancePath) throws IOException { + if (!Files.exists(instancePath.resolve(INCEPTUM_LOCK))) return false; + if (ProcessUtils.isProcessAlive(Files.readString(instancePath.resolve(INCEPTUM_LOCK)))) + return true; + Files.delete(instancePath.resolve(INCEPTUM_LOCK)); + return false; + } + + public static boolean isLocked(Path instancePath) throws IOException { + return isSetupLocked(instancePath) || isRunningLocked(instancePath); + } +} diff --git a/src/main/java/io/gitlab/jfronny/inceptum/util/launch/InstanceLauncher.java b/src/main/java/io/gitlab/jfronny/inceptum/util/launch/InstanceLauncher.java index 5430dd8..cad6a58 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/util/launch/InstanceLauncher.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/util/launch/InstanceLauncher.java @@ -9,10 +9,7 @@ import io.gitlab.jfronny.inceptum.model.inceptum.source.ModSource; import io.gitlab.jfronny.inceptum.model.mojang.MinecraftArgument; import io.gitlab.jfronny.inceptum.model.mojang.VersionInfo; import io.gitlab.jfronny.inceptum.model.mojang.VersionsListInfo; -import io.gitlab.jfronny.inceptum.util.JvmUtils; -import io.gitlab.jfronny.inceptum.util.MetaHolder; -import io.gitlab.jfronny.inceptum.util.Utils; -import io.gitlab.jfronny.inceptum.util.VersionInfoLibraryResolver; +import io.gitlab.jfronny.inceptum.util.*; import io.gitlab.jfronny.inceptum.util.api.FabricMetaApi; import io.gitlab.jfronny.inceptum.util.api.McApi; import io.gitlab.jfronny.inceptum.util.api.account.AuthInfo; @@ -122,7 +119,7 @@ public class InstanceLauncher { Runnable starterRunner = () -> { try { proc.set(pb.start()); - Files.writeString(instancePath.resolve("inceptum.lock"), Long.toString(proc.get().pid())); + InceptumLockReader.setRunningLock(instancePath, proc.get().pid()); } catch (IOException e) { Inceptum.LOGGER.error("Could not start " + launchType.name, e); } diff --git a/src/main/java/io/gitlab/jfronny/inceptum/windows/InstanceEditWindow.java b/src/main/java/io/gitlab/jfronny/inceptum/windows/InstanceEditWindow.java index de1419e..1e168c1 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/windows/InstanceEditWindow.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/windows/InstanceEditWindow.java @@ -85,7 +85,6 @@ public class InstanceEditWindow extends Window { instance.java = customJavaPath.get();; save(); } - ImGui.text("Did you know that every instance in Inceptum is a git repository?"); ImGui.endTabItem(); } //TODO drag-and-drop mods diff --git a/src/main/java/io/gitlab/jfronny/inceptum/windows/control/InstanceView.java b/src/main/java/io/gitlab/jfronny/inceptum/windows/control/InstanceView.java index 12dd931..d2fcc44 100644 --- a/src/main/java/io/gitlab/jfronny/inceptum/windows/control/InstanceView.java +++ b/src/main/java/io/gitlab/jfronny/inceptum/windows/control/InstanceView.java @@ -6,6 +6,7 @@ import io.gitlab.jfronny.inceptum.Inceptum; import io.gitlab.jfronny.inceptum.InceptumGui; import io.gitlab.jfronny.inceptum.install.Steps; import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta; +import io.gitlab.jfronny.inceptum.util.InceptumLockReader; import io.gitlab.jfronny.inceptum.util.launch.ClientLauncher; import io.gitlab.jfronny.inceptum.util.ProcessUtils; import io.gitlab.jfronny.inceptum.util.Utils; @@ -20,7 +21,7 @@ public class InstanceView { public static void draw(List paths) { if (ImGui.beginTable("Instances", 2, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.Borders)) { for (Path path : paths) { - if (Files.exists(path.resolve("inceptum.setup.lock"))) { + if (InceptumLockReader.isSetupLocked(path)) { ImGui.tableNextColumn(); ImGui.text("Setting up"); ImGui.tableNextColumn(); @@ -40,14 +41,11 @@ public class InstanceView { } ImGui.tableNextColumn(); boolean disabled = false; - if (Files.exists(path.resolve("inceptum.lock"))) { - try { - if (ProcessUtils.isProcessAlive(Files.readString(path.resolve("inceptum.lock")))) - disabled = true; - else Files.delete(path.resolve("inceptum.lock")); - } catch (IOException e) { - continue; - } + try { + if (InceptumLockReader.isRunningLocked(path)) + disabled = true; + } catch (IOException e) { + continue; } if (disabled) ImGui.beginDisabled(); if (ImGui.button(path.getFileName().toString())) {