ctbrec-5.3.2-experimental/src/main/java/ctbrec/Config.java

94 lines
3.1 KiB
Java

package ctbrec;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
import static java.nio.file.StandardOpenOption.WRITE;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import ctbrec.io.ModelJsonAdapter;
import okio.Buffer;
import okio.BufferedSource;
public class Config {
private static final transient Logger LOG = LoggerFactory.getLogger(Config.class);
private static Config instance;
private Settings settings;
private String filename;
private Config() throws FileNotFoundException, IOException {
if(System.getProperty("ctbrec.config") != null) {
filename = System.getProperty("ctbrec.config");
} else {
filename = "settings.json";
}
load();
}
private void load() throws FileNotFoundException, IOException {
Moshi moshi = new Moshi.Builder()
.add(Model.class, new ModelJsonAdapter())
.build();
JsonAdapter<Settings> adapter = moshi.adapter(Settings.class);
File configDir = OS.getConfigDir();
File configFile = new File(configDir, filename);
LOG.debug("Loading config from {}", configFile.getAbsolutePath());
if(configFile.exists()) {
try(FileInputStream fin = new FileInputStream(configFile); Buffer buffer = new Buffer()) {
BufferedSource source = buffer.readFrom(fin);
settings = adapter.fromJson(source);
}
} else {
LOG.error("Config file does not exist. Falling back to default values.");
settings = OS.getDefaultSettings();
}
}
public static synchronized void init() throws FileNotFoundException, IOException {
if(instance == null) {
instance = new Config();
}
}
public static synchronized Config getInstance() {
if(instance == null) {
throw new IllegalStateException("Config not initialized, call init() first");
}
return instance;
}
public Settings getSettings() {
return settings;
}
public void save() throws IOException {
Moshi moshi = new Moshi.Builder()
.add(Model.class, new ModelJsonAdapter())
.build();
JsonAdapter<Settings> adapter = moshi.adapter(Settings.class).indent(" ");
String json = adapter.toJson(settings);
File configDir = OS.getConfigDir();
File configFile = new File(configDir, filename);
LOG.debug("Saving config to {}", configFile.getAbsolutePath());
Files.createDirectories(configDir.toPath());
Files.write(configFile.toPath(), json.getBytes("utf-8"), CREATE, WRITE, TRUNCATE_EXISTING);
}
public boolean isServerMode() {
return Objects.equals(System.getProperty("ctbrec.server.mode"), "1");
}
}