Add: support for user-global configuration.
This commit is contained in:
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -57,6 +59,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.photosync.platform.impl;
|
||||
|
||||
import dev.photosync.core.capture.CameraPose;
|
||||
import dev.photosync.mcapi.GameContext;
|
||||
import dev.photosync.platform.UserDataDirectory;
|
||||
import dev.photosync.platform.WindowTitle;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
@@ -23,6 +24,7 @@ public final class GameAdapter implements GameContext {
|
||||
* loader's answers have not moved once in the supported range.
|
||||
*/
|
||||
private final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve("photosync");
|
||||
private final Path userDataDirectory = UserDataDirectory.resolve();
|
||||
private final String minecraftVersion = FabricLoader.getInstance()
|
||||
.getModContainer("minecraft")
|
||||
.map(container -> container.getMetadata().getVersion().getFriendlyString())
|
||||
@@ -58,6 +60,11 @@ public final class GameAdapter implements GameContext {
|
||||
return configDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path userDataDirectory() {
|
||||
return userDataDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submit(Runnable task) {
|
||||
Minecraft game = Minecraft.getInstance();
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.photosync.platform;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
/**
|
||||
* The OS-user-level directory PhotoSync offers for its settings file.
|
||||
*
|
||||
* <p>One rule, written once: Windows keeps per-user application data under
|
||||
* {@code %APPDATA%}, everything else under {@code ~/.config} (the convention
|
||||
* the Linux desktops and macOS share). Nine buckets compile this class, so a
|
||||
* fix to the rule needs one edit instead of nine.
|
||||
*/
|
||||
public final class UserDataDirectory {
|
||||
|
||||
private UserDataDirectory() {
|
||||
}
|
||||
|
||||
public static Path resolve() {
|
||||
String appData = System.getenv("APPDATA");
|
||||
Path base = appData == null || appData.isBlank()
|
||||
? Path.of(System.getProperty("user.home"), ".config")
|
||||
: Path.of(appData);
|
||||
return base.resolve("photosyncmod");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user