Files
HyperLap2D/src/main/java/games/rednblack/editor/proxy/SettingsManager.java
T
2023-07-06 00:14:02 +02:00

133 lines
4.9 KiB
Java

package games.rednblack.editor.proxy;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Json;
import games.rednblack.editor.CustomExceptionHandler;
import games.rednblack.editor.Main;
import games.rednblack.editor.renderer.utils.HyperJson;
import games.rednblack.editor.utils.HyperLap2DUtils;
import games.rednblack.editor.utils.KeyBindingsLayout;
import games.rednblack.h2d.common.vo.EditorConfigVO;
import games.rednblack.puremvc.Facade;
import games.rednblack.puremvc.Proxy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import java.io.*;
import java.util.List;
public class SettingsManager extends Proxy {
private static final String TAG = SettingsManager.class.getCanonicalName();
public static final String NAME = TAG;
private String DEFAULT_FOLDER = "HyperLap2D";
private String defaultWorkspacePath;
public EditorConfigVO editorConfigVO;
public File[] pluginDirs;
public File cacheDir;
public SettingsManager() {
super(NAME, null);
initWorkspace();
}
@Override
public void onRegister() {
super.onRegister();
KeyBindingsLayout.init();
}
private void initWorkspace() {
try {
editorConfigVO = getEditorConfig();
String myDocPath = HyperLap2DUtils.MY_DOCUMENTS_PATH;
defaultWorkspacePath = myDocPath + File.separator + DEFAULT_FOLDER;
FileUtils.forceMkdir(new File(defaultWorkspacePath));
FileUtils.forceMkdir(new File(HyperLap2DUtils.getKeyMapPath()));
pluginDirs = new File[]{new File(Main.getJarContainingFolder(Main.class) + File.separator + "plugins"),
new File(HyperLap2DUtils.getRootPath() + File.separator + "plugins"),
new File(System.getProperty("user.dir") + File.separator + "plugins")};
cacheDir = new File(HyperLap2DUtils.getRootPath() + File.separator + "cache");
FileUtils.forceMkdir(cacheDir);
} catch (IOException e) {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
e.printStackTrace();
String stacktrace = result.toString();
CustomExceptionHandler.showErrorDialog(stacktrace);
}
}
public FileHandle getWorkspacePath() {
if (!editorConfigVO.lastOpenedSystemPath.isEmpty()) {
return new FileHandle(editorConfigVO.lastOpenedSystemPath);
}
return new FileHandle(defaultWorkspacePath);
}
public FileHandle getImportPath() {
if (!editorConfigVO.lastImportedSystemPath.isEmpty()) {
return new FileHandle(editorConfigVO.lastImportedSystemPath);
}
return null;
}
public String[] getKeyMappingFiles() {
File mappingDir = new File(HyperLap2DUtils.getKeyMapPath());
String[] extensions = new String[]{"keymap"};
List<File> files = (List<File>) FileUtils.listFiles(mappingDir, extensions, true);
String[] maps = new String[files.size() + 1];
maps[0] = "default";
for (int i = 0; i < files.size(); i++) {
maps[i + 1] = FilenameUtils.removeExtension(files.get(i).getName());
}
return maps;
}
private EditorConfigVO getEditorConfig() {
EditorConfigVO editorConfig = new EditorConfigVO();
String configFilePath = HyperLap2DUtils.getRootPath() + File.separator + "configs" + File.separator + EditorConfigVO.EDITOR_CONFIG_FILE;
File configFile = new File(configFilePath);
if (!configFile.exists()) {
try {
FileUtils.writeStringToFile(new File(configFilePath), editorConfig.constructJsonString(), "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
} else {
Json json = HyperJson.getJson();
String editorConfigJson;
try {
editorConfigJson = FileUtils.readFileToString(configFile, "utf-8");
editorConfig = json.fromJson(EditorConfigVO.class, editorConfigJson);
} catch (IOException e) {
e.printStackTrace();
}
}
return editorConfig;
}
public void setLastOpenedPath(String path) {
editorConfigVO.lastOpenedSystemPath = path;
saveEditorConfig();
}
public void setLastImportedPath(String path) {
editorConfigVO.lastImportedSystemPath = path;
saveEditorConfig();
}
public void saveEditorConfig() {
try {
String configFilePath = HyperLap2DUtils.getRootPath() + File.separator + "configs" + File.separator + EditorConfigVO.EDITOR_CONFIG_FILE;
FileUtils.writeStringToFile(new File(configFilePath), editorConfigVO.constructJsonString(), "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
}
}