Allow edit window on running instance but add a warning

This commit is contained in:
Johannes Frohnmeyer 2022-01-04 13:00:15 +01:00
parent dc312a94ad
commit a577f5676f
Signed by: Johannes
GPG Key ID: E76429612C2929F4
8 changed files with 31 additions and 23 deletions

View File

@ -3,9 +3,8 @@ 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.InstanceLock;
import io.gitlab.jfronny.inceptum.util.launch.ClientLauncher;
import io.gitlab.jfronny.inceptum.util.ProcessUtils;
import io.gitlab.jfronny.inceptum.util.Utils;
import io.gitlab.jfronny.inceptum.util.api.account.AccountManager;
import io.gitlab.jfronny.inceptum.util.launch.InstanceLauncher;
@ -14,7 +13,6 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Optional;
public class LaunchCommand extends Command {
public LaunchCommand() {
@ -49,12 +47,12 @@ public class LaunchCommand extends Command {
Inceptum.LOGGER.error("Not a valid instance");
return;
}
if (InceptumLockReader.isSetupLocked(instanceDir)) {
if (InstanceLock.isSetupLocked(instanceDir)) {
Inceptum.LOGGER.error("This instance is still being set up");
return;
}
try {
if (InceptumLockReader.isRunningLocked(instanceDir)) {
if (InstanceLock.isRunningLocked(instanceDir)) {
Inceptum.LOGGER.error("This instance is already running");
return;
}

View File

@ -6,14 +6,12 @@ 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.InstanceLock;
import io.gitlab.jfronny.inceptum.util.Utils;
import io.gitlab.jfronny.inceptum.util.api.FabricMetaApi;
import io.gitlab.jfronny.inceptum.util.api.McApi;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedHashSet;
import java.util.List;
@ -42,7 +40,7 @@ public class Steps {
}
public static void reDownload(Path instance) throws IOException {
if (InceptumLockReader.isLocked(instance)) return;
if (InstanceLock.isLocked(instance)) return;
InstanceMeta im = Utils.loadObject(instance.resolve("instance.json"), InstanceMeta.class);
boolean found = false;
for (VersionsListInfo version : McApi.getVersions().versions) {

View File

@ -5,7 +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 io.gitlab.jfronny.inceptum.util.InstanceLock;
import java.io.IOException;
import java.nio.file.Files;
@ -17,7 +17,7 @@ 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);
InstanceLock.setSetupLock(iDir, true);
if (!Files.exists(iDir)) {
Files.createDirectories(iDir.resolve("resourcepacks"));
Files.createDirectories(iDir.resolve("saves"));

View File

@ -4,7 +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.InstanceLock;
import io.gitlab.jfronny.inceptum.util.Utils;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
@ -23,7 +23,7 @@ public class WriteMetadataStep implements Step {
InstanceMeta meta = new InstanceMeta();
meta.version = info.version().id;
Utils.writeObject(metaDir, meta);
InceptumLockReader.setSetupLock(instance, false);
InstanceLock.setSetupLock(instance, false);
if (!Files.exists(instance.resolve(".gitignore"))) {
Files.writeString(instance.resolve(".gitignore"), """
realms_persistence.json

View File

@ -4,7 +4,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class InceptumLockReader {
public class InstanceLock {
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 {

View File

@ -119,7 +119,7 @@ public class InstanceLauncher {
Runnable starterRunner = () -> {
try {
proc.set(pb.start());
InceptumLockReader.setRunningLock(instancePath, proc.get().pid());
InstanceLock.setRunningLock(instancePath, proc.get().pid());
} catch (IOException e) {
Inceptum.LOGGER.error("Could not start " + launchType.name, e);
}

View File

@ -8,6 +8,7 @@ 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.model.inceptum.source.ModSource;
import io.gitlab.jfronny.inceptum.util.InstanceLock;
import io.gitlab.jfronny.inceptum.util.JvmUtils;
import io.gitlab.jfronny.inceptum.util.ModsDirScanner;
import io.gitlab.jfronny.inceptum.util.Utils;
@ -43,6 +44,18 @@ public class InstanceEditWindow extends Window {
@Override
public void draw() {
if (InstanceLock.isSetupLocked(path)) {
ImGui.text("This instance is still being set up.");
return;
}
try {
if (InstanceLock.isRunningLocked(path)) {
ImGui.text("This instance is running. Edits in this state will result in breakage.");
}
} catch (IOException e) {
ImGui.text("Could not read lock state on this instance");
Inceptum.LOGGER.error("Could not read lock state", e);
}
if (ImGui.beginTabBar("InstanceEdit" + path)) {
if (ImGui.beginTabItem("General")) {
if (ImGui.button("Open Directory")) {

View File

@ -6,9 +6,8 @@ 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.InstanceLock;
import io.gitlab.jfronny.inceptum.util.launch.ClientLauncher;
import io.gitlab.jfronny.inceptum.util.ProcessUtils;
import io.gitlab.jfronny.inceptum.util.Utils;
import io.gitlab.jfronny.inceptum.windows.InstanceEditWindow;
@ -21,7 +20,7 @@ public class InstanceView {
public static void draw(List<Path> paths) {
if (ImGui.beginTable("Instances", 2, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.Borders)) {
for (Path path : paths) {
if (InceptumLockReader.isSetupLocked(path)) {
if (InstanceLock.isSetupLocked(path)) {
ImGui.tableNextColumn();
ImGui.text("Setting up");
ImGui.tableNextColumn();
@ -40,14 +39,14 @@ public class InstanceView {
continue;
}
ImGui.tableNextColumn();
boolean disabled = false;
boolean runDisabled = false;
try {
if (InceptumLockReader.isRunningLocked(path))
disabled = true;
if (InstanceLock.isRunningLocked(path))
runDisabled = true;
} catch (IOException e) {
continue;
}
if (disabled) ImGui.beginDisabled();
if (runDisabled) ImGui.beginDisabled();
if (ImGui.button(path.getFileName().toString())) {
try {
Steps.reDownload(path);
@ -56,9 +55,9 @@ public class InstanceView {
}
ClientLauncher.launch(path, instance);
}
if (runDisabled) ImGui.endDisabled();
ImGui.tableNextColumn();
if (ImGui.button("Edit##" + path)) InceptumGui.open(new InstanceEditWindow(path, instance));
if (disabled) ImGui.endDisabled();
}
ImGui.endTable();
}