auto-creamapi/src/main/java/CreamApiConfig.java
Jeddunk 14408cd9a6 Languages can now be defined in a file.
INI properties which are not editable will now be set.
Code improvements.
2019-11-06 01:21:43 +01:00

159 lines
5.1 KiB
Java

import org.apache.commons.configuration2.*;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import java.io.*;
import java.text.MessageFormat;
import java.util.*;
@SuppressWarnings("WeakerAccess")
public class CreamApiConfig {
private static CreamApiConfig configInstance;
private static final Configurations CONFIGS = new Configurations();
private INIConfiguration config;
private String path = "cream_api.ini";
private Integer appId;
private String language;
private Boolean unlockAll;
private Boolean extraProtection;
private Boolean forceOffline;
private Map<Integer, String> dlc = new HashMap<>();
private List<String> languages = new ArrayList<>();
private CreamApiConfig() {
try {
config = CONFIGS.ini(path);
config.setCommentLeadingCharsUsedInInput(";");
} catch (ConfigurationException e) {
e.printStackTrace();
}
File langFile = new File("languages.txt");
try {
BufferedReader fIn = new BufferedReader(new FileReader(langFile));
fIn.lines().filter(line -> !line.isEmpty() && !line.startsWith("#")).forEach(line -> languages.add(line));
} catch (IOException e) {
e.printStackTrace();
}
read();
}
public static synchronized CreamApiConfig getInstance() {
if (configInstance == null) {
configInstance = new CreamApiConfig();
}
return configInstance;
}
public void read() {
appId = config.getInt("steam.appid");
language = config.getString("steam.language");
if (language == null) {
language = "english";
}
unlockAll = config.getBoolean("steam.unlockall");
extraProtection = config.getBoolean("steam.extraprotection");
forceOffline = config.getBoolean("steam.forceoffline");
final SubnodeConfiguration dlc_section = config.getSection("dlc");
dlc_section.getKeys().forEachRemaining(k -> dlc.put(Integer.parseInt(k), dlc_section.getString(k)));
}
public void sync() throws ConfigurationException {
FileBasedConfigurationBuilder<INIConfiguration> builder = CONFIGS.iniBuilder(path);
config = builder.getConfiguration();
config.setCommentLeadingCharsUsedInInput(";");
config.setProperty("steam.appid", appId);
config.setProperty("steam.language", language);
config.setProperty("steam.unlockall", unlockAll);
config.setProperty("steam.extraprotection", extraProtection);
config.setProperty("steam.forceoffline", forceOffline);
final SubnodeConfiguration dlc_section = config.getSection("dlc");
dlc_section.clear();
this.dlc.forEach((key, value) -> config.setProperty("dlc." + key.toString(), value));
// default settings
config.setProperty("steam.orgapi", "steam_api_o.dll");
config.setProperty("steam.orgapi64", "steam_api64_o.dll");
config.setProperty("steam.lowviolence", false);
config.setProperty("steam_misc.disableuserinterface", false);
builder.save();
}
// DLC list parsing
public String getDlcListAsString() {
StringBuilder sb = new StringBuilder();
dlc.forEach((key, value) -> sb.append(key).append("=").append(value).append("\r\n"));
return sb.toString();
}
public void setDlcListFromString(String str) {
dlc.clear();
Arrays.stream(str.split("\\R+")).forEach(line -> {
final String[] split = line.split("\\s*=\\s*", 2);
if (split.length == 2) dlc.put(Integer.parseInt(split[0]), split[1]);
else System.err.println(MessageFormat.format("Error while splitting line: \"{0}\"", line));
});
}
// GETTERS AND SETTERS
public Integer getAppId() {
return appId;
}
public void setAppId(Integer appId) {
this.appId = appId;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public Boolean getUnlockAll() {
return unlockAll;
}
public void setUnlockAll(Boolean unlockAll) {
this.unlockAll = unlockAll;
}
public Boolean getExtraProtection() {
return extraProtection;
}
public void setExtraProtection(Boolean extraProtection) {
this.extraProtection = extraProtection;
}
public Boolean getForceOffline() {
return forceOffline;
}
public void setForceOffline(Boolean forceOffline) {
this.forceOffline = forceOffline;
}
public List<String> getLanguages() {
return languages;
}
public void setConfig(String path) throws ConfigurationException, IOException {
File file = new File(path);
if (!file.exists()) {
final boolean newFile = file.createNewFile();
}
this.config = CONFIGS.ini(path);
this.config.setCommentLeadingCharsUsedInInput(";");
this.path = path;
}
}