2021-10-29 22:50:42 +02:00
|
|
|
package io.gitlab.jfronny.inceptum.windows;
|
2021-10-27 22:00:08 +02:00
|
|
|
|
|
|
|
import imgui.ImGui;
|
2021-10-28 21:31:51 +02:00
|
|
|
import imgui.flag.ImGuiWindowFlags;
|
|
|
|
import imgui.type.ImBoolean;
|
2021-10-29 22:50:42 +02:00
|
|
|
import imgui.type.ImInt;
|
|
|
|
import io.gitlab.jfronny.inceptum.Inceptum;
|
2021-10-30 16:12:39 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.install.SetupStepInfo;
|
|
|
|
import io.gitlab.jfronny.inceptum.install.Step;
|
|
|
|
import io.gitlab.jfronny.inceptum.install.Steps;
|
2021-10-30 14:22:07 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.model.inceptum.InstanceMeta;
|
2021-10-30 16:12:39 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.model.inceptum.LoaderInfo;
|
2021-10-29 22:50:42 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.model.mojang.VersionInfo;
|
|
|
|
import io.gitlab.jfronny.inceptum.model.mojang.VersionsListInfo;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.MapAppender;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.Utils;
|
2021-10-30 14:22:07 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.util.api.FabricMetaApi;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.api.McApi;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.api.account.AccountManager;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.api.account.AuthInfo;
|
|
|
|
import io.gitlab.jfronny.inceptum.util.api.account.MicrosoftAccount;
|
2021-10-30 16:12:39 +02:00
|
|
|
import io.gitlab.jfronny.inceptum.windows.control.InstanceView;
|
2021-10-28 23:27:47 +02:00
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.nio.file.Path;
|
|
|
|
import java.util.List;
|
2021-10-30 16:12:39 +02:00
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
2021-10-27 22:00:08 +02:00
|
|
|
|
|
|
|
public class MainWindow extends Window {
|
2021-10-29 22:50:42 +02:00
|
|
|
private final ImBoolean darkTheme = new ImBoolean(Inceptum.CONFIG.darkTheme);
|
2021-10-28 21:31:51 +02:00
|
|
|
private final ImBoolean debugTools = new ImBoolean(false);
|
2021-10-29 22:50:42 +02:00
|
|
|
private final ImInt accountIndex = new ImInt(0);
|
2021-10-27 22:00:08 +02:00
|
|
|
public MainWindow() {
|
2021-10-29 22:50:42 +02:00
|
|
|
super("Inceptum");
|
2021-10-27 22:00:08 +02:00
|
|
|
}
|
|
|
|
|
2021-10-28 21:31:51 +02:00
|
|
|
@Override
|
|
|
|
public int getFlags() {
|
|
|
|
return ImGuiWindowFlags.MenuBar | ImGuiWindowFlags.AlwaysAutoResize;
|
|
|
|
}
|
|
|
|
|
2021-10-27 22:00:08 +02:00
|
|
|
@Override
|
|
|
|
public void draw() {
|
2021-10-28 21:31:51 +02:00
|
|
|
ImGui.beginMenuBar();
|
|
|
|
if (ImGui.beginMenu("File")) {
|
2021-10-29 22:50:42 +02:00
|
|
|
if (ImGui.menuItem("New Instance")) Inceptum.open(new NewInstanceWindow());
|
2021-10-30 16:12:39 +02:00
|
|
|
if (ImGui.menuItem("Re-download resources")) {
|
|
|
|
try {
|
|
|
|
Files.list(Inceptum.INSTANCE_DIR).forEach(p -> {
|
|
|
|
try {
|
|
|
|
if (Files.exists(p.resolve("inceptum.setup.lock"))) return;
|
|
|
|
if (Files.exists(p.resolve("inceptum.lock"))) return;
|
|
|
|
InstanceMeta im = Utils.loadObject(p.resolve("instance.json"), InstanceMeta.class);
|
|
|
|
for (VersionsListInfo version : McApi.getVersions().versions) {
|
|
|
|
if (version.id.equals(im.getMinecraftVersion())) {
|
|
|
|
VersionInfo vi = McApi.getVersionInfo(version);
|
|
|
|
if (im.isFabric()) FabricMetaApi.addFabric(vi, im.getLoaderVersion());
|
|
|
|
LoaderInfo li = im.isFabric()
|
|
|
|
? new LoaderInfo(LoaderInfo.Type.Fabric, im.getLoaderVersion())
|
|
|
|
: LoaderInfo.NONE;
|
|
|
|
SetupStepInfo info = new SetupStepInfo(vi, li, p.getFileName().toString());
|
|
|
|
for (Step step : Steps.STEPS) {
|
|
|
|
step.execute(info, new AtomicBoolean(false));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
|
|
Inceptum.LOGGER.error("Could not execute refresh task", e);
|
|
|
|
Inceptum.open(new AlertWindow("Something went wrong", e.toString()));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} catch (IOException e) {
|
|
|
|
Inceptum.LOGGER.error("Could not execute refresh task", e);
|
|
|
|
Inceptum.open(new AlertWindow("Something went wrong", e.toString()));
|
|
|
|
}
|
|
|
|
}
|
2021-10-29 22:50:42 +02:00
|
|
|
if (ImGui.menuItem("Exit Inceptum")) Inceptum.exit();
|
|
|
|
ImGui.endMenu();
|
|
|
|
}
|
|
|
|
if (ImGui.beginMenu("Account")) {
|
|
|
|
if (ImGui.menuItem("New")) Inceptum.open(new MicrosoftLoginWindow());
|
|
|
|
AuthInfo selected = AccountManager.getSelectedAccount();
|
|
|
|
List<MicrosoftAccount> accounts = AccountManager.getAccounts();
|
|
|
|
for (int i = 0, accountsSize = accounts.size(); i < accountsSize; i++) {
|
|
|
|
MicrosoftAccount account = accounts.get(i);
|
|
|
|
if (selected.equals(account)) accountIndex.set(i);
|
|
|
|
if (ImGui.radioButton(account.minecraftUsername, accountIndex, i)) {
|
|
|
|
AccountManager.switchAccount(account);
|
|
|
|
}
|
|
|
|
ImGui.sameLine();
|
|
|
|
if (ImGui.button("X")) AccountManager.removeAccount(account);
|
|
|
|
}
|
2021-10-28 21:31:51 +02:00
|
|
|
ImGui.endMenu();
|
|
|
|
}
|
|
|
|
if (ImGui.beginMenu("Settings")) {
|
|
|
|
if (ImGui.checkbox("Dark Theme", darkTheme)) {
|
2021-10-29 22:50:42 +02:00
|
|
|
Inceptum.CONFIG.darkTheme = darkTheme.get();
|
|
|
|
Inceptum.saveConfig();
|
|
|
|
Inceptum.applyTheme();
|
2021-10-28 21:31:51 +02:00
|
|
|
}
|
|
|
|
ImGui.endMenu();
|
|
|
|
}
|
|
|
|
if (ImGui.beginMenu("Help")) {
|
2021-10-29 22:50:42 +02:00
|
|
|
if (ImGui.menuItem("About")) Inceptum.open(new AboutWindow());
|
|
|
|
if (ImGui.menuItem("Log")) Inceptum.open(new LogWindow(MapAppender.LOG));
|
2021-10-28 21:31:51 +02:00
|
|
|
ImGui.checkbox("Debug Tools", debugTools);
|
|
|
|
ImGui.endMenu();
|
|
|
|
}
|
|
|
|
ImGui.endMenuBar();
|
|
|
|
|
|
|
|
if (debugTools.get()) {
|
|
|
|
ImGui.showDemoWindow();
|
|
|
|
}
|
|
|
|
|
2021-10-30 14:22:07 +02:00
|
|
|
List<Path> paths;
|
|
|
|
try {
|
|
|
|
paths = Files.list(Inceptum.INSTANCE_DIR).filter(Files::isDirectory).toList();
|
|
|
|
} catch (IOException e) {
|
|
|
|
Inceptum.LOGGER.error("Could not list instances");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (paths.isEmpty()) {
|
2021-10-28 23:27:47 +02:00
|
|
|
ImGui.text("You have not yet created an instance");
|
|
|
|
ImGui.text("Use File->New Instance to do so");
|
|
|
|
}
|
2021-10-30 16:12:39 +02:00
|
|
|
else InstanceView.draw(paths);
|
2021-10-27 22:00:08 +02:00
|
|
|
}
|
|
|
|
}
|