Inceptum/wrapper/src/main/java/io/gitlab/jfronny/inceptum/util/MetaHolder.java

74 lines
2.8 KiB
Java
Raw Normal View History

2021-11-02 13:43:18 +01:00
package io.gitlab.jfronny.inceptum.util;
import com.google.gson.GsonBuilder;
import io.gitlab.jfronny.inceptum.gson.ComparableVersionAdapter;
import io.gitlab.jfronny.inceptum.model.ComparableVersion;
import io.gitlab.jfronny.inceptum.model.inceptum.InceptumVersion;
2021-11-11 18:14:51 +01:00
import java.io.File;
2021-11-02 13:43:18 +01:00
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
2021-11-11 18:14:51 +01:00
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
2021-11-02 13:43:18 +01:00
import java.nio.file.Path;
public class MetaHolder {
public static final InceptumVersion VERSION;
public static final Path BASE_PATH;
static {
try (InputStream is = MetaHolder.class.getClassLoader().getResourceAsStream("version.json");
InputStreamReader isr = new InputStreamReader(is)) {
VERSION = new GsonBuilder()
.registerTypeAdapter(ComparableVersion.class, new ComparableVersionAdapter())
.create()
.fromJson(isr, InceptumVersion.class);
if (System.getProperty("inceptum.base") == null) {
Path runDir = getRunDir();
BASE_PATH = VERSION.isRelease && !Files.exists(runDir)
? getConfigPath().resolve("Inceptum")
: runDir;
}
else {
BASE_PATH = Path.of(System.getProperty("inceptum.base"));
}
2021-11-02 13:43:18 +01:00
} catch (IOException e) {
throw new RuntimeException("Could not get version info", e);
}
}
private static Path getConfigPath() {
return switch (OSCheck.OS) {
case WINDOWS -> Path.of(System.getenv("APPDATA"));
case MAC_OS -> Path.of(System.getProperty("user.home")).resolve("Library").resolve("Application Support");
case LINUX -> {
String s = System.getenv().get("XDG_CONFIG_HOME");
if (s == null)
yield Path.of(System.getProperty("user.home")).resolve(".config");
else
yield Path.of(s);
}
};
}
2021-11-11 20:11:20 +01:00
private static Path getRunDir() {
Path simpleRunDir = Path.of(".").resolve("run");
if (Files.exists(simpleRunDir)) return simpleRunDir;
2021-11-11 18:14:51 +01:00
URL url = MetaHolder.class.getProtectionDomain().getCodeSource().getLocation();
String p = url.getPath();
2021-11-02 13:43:18 +01:00
if (p.endsWith(".jar") && !p.endsWith("/build/libs/wrapper-" + VERSION.version + ".jar")) {
2021-11-11 18:14:51 +01:00
try {
2021-11-11 20:11:20 +01:00
return new File(url.toURI()).toPath().getParent().resolve("run");
2021-11-11 18:14:51 +01:00
} catch (URISyntaxException e) {
e.printStackTrace();
2021-11-11 20:11:20 +01:00
return simpleRunDir;
2021-11-11 18:14:51 +01:00
}
2021-11-02 13:43:18 +01:00
} else {
System.out.println("Not running in a jar, using ./run");
2021-11-11 20:11:20 +01:00
return simpleRunDir;
2021-11-02 13:43:18 +01:00
}
}
}