Refactor VersionSetting.clone() & .addListener(), fix javaVersionType is not saved
This commit is contained in:
@@ -218,7 +218,7 @@ public class HMCLGameRepository extends DefaultGameRepository {
|
|||||||
|
|
||||||
private VersionSetting initLocalVersionSetting(String id, VersionSetting vs) {
|
private VersionSetting initLocalVersionSetting(String id, VersionSetting vs) {
|
||||||
localVersionSettings.put(id, vs);
|
localVersionSettings.put(id, vs);
|
||||||
vs.addPropertyChangedListener(a -> saveVersionSetting(id));
|
vs.addListener(a -> saveVersionSetting(id));
|
||||||
return vs;
|
return vs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ import java.net.Proxy;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
public final class Config implements Cloneable, Observable {
|
public final class Config implements Observable {
|
||||||
|
|
||||||
public static final int CURRENT_UI_VERSION = 0;
|
public static final int CURRENT_UI_VERSION = 0;
|
||||||
|
|
||||||
@@ -223,11 +223,6 @@ public final class Config implements Cloneable, Observable {
|
|||||||
return CONFIG_GSON.toJson(this);
|
return CONFIG_GSON.toJson(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Config clone() {
|
|
||||||
return fromJson(this.toJson());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Getters & Setters & Properties
|
// Getters & Setters & Properties
|
||||||
public String getSelectedProfile() {
|
public String getSelectedProfile() {
|
||||||
return selectedProfile.get();
|
return selectedProfile.get();
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ public final class ConfigHolder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void markConfigDirty() {
|
private static void markConfigDirty() {
|
||||||
configWriter.accept(configInstance.toJson());
|
configWriter.accept(configInstance.toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,11 +241,7 @@ public final class ConfigHolder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void markGlobalConfigDirty() {
|
private static void markGlobalConfigDirty() {
|
||||||
globalConfigWriter.accept(globalConfigInstance.toJson());
|
globalConfigWriter.accept(globalConfigInstance.toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void saveGlobalConfigSync() throws IOException {
|
|
||||||
writeToConfig(globalConfigInstance.toJson());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import java.lang.reflect.Type;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@JsonAdapter(GlobalConfig.Serializer.class)
|
@JsonAdapter(GlobalConfig.Serializer.class)
|
||||||
public final class GlobalConfig implements Cloneable, Observable {
|
public final class GlobalConfig implements Observable {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static GlobalConfig fromJson(String json) throws JsonParseException {
|
public static GlobalConfig fromJson(String json) throws JsonParseException {
|
||||||
@@ -79,11 +79,6 @@ public final class GlobalConfig implements Cloneable, Observable {
|
|||||||
return Config.CONFIG_GSON.toJson(this);
|
return Config.CONFIG_GSON.toJson(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public GlobalConfig clone() {
|
|
||||||
return fromJson(this.toJson());
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getAgreementVersion() {
|
public int getAgreementVersion() {
|
||||||
return agreementVersion.get();
|
return agreementVersion.get();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ public final class Profile implements Observable {
|
|||||||
global.addListener(listener);
|
global.addListener(listener);
|
||||||
gameDir.addListener(listener);
|
gameDir.addListener(listener);
|
||||||
useRelativePath.addListener(listener);
|
useRelativePath.addListener(listener);
|
||||||
global.get().addPropertyChangedListener(listener);
|
global.get().addListener(listener);
|
||||||
selectedVersion.addListener(listener);
|
selectedVersion.addListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,14 @@ package org.jackhuang.hmcl.setting;
|
|||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import com.google.gson.annotations.JsonAdapter;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import javafx.beans.InvalidationListener;
|
import javafx.beans.InvalidationListener;
|
||||||
|
import javafx.beans.Observable;
|
||||||
import javafx.beans.property.*;
|
import javafx.beans.property.*;
|
||||||
import org.jackhuang.hmcl.game.*;
|
import org.jackhuang.hmcl.game.*;
|
||||||
import org.jackhuang.hmcl.java.JavaManager;
|
import org.jackhuang.hmcl.java.JavaManager;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
import org.jackhuang.hmcl.util.Lang;
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
|
import org.jackhuang.hmcl.util.javafx.ObservableHelper;
|
||||||
|
import org.jackhuang.hmcl.util.javafx.PropertyUtils;
|
||||||
import org.jackhuang.hmcl.java.JavaRuntime;
|
import org.jackhuang.hmcl.java.JavaRuntime;
|
||||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||||
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
|
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
|
||||||
@@ -42,7 +45,13 @@ import static org.jackhuang.hmcl.util.logging.Logger.LOG;
|
|||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
@JsonAdapter(VersionSetting.Serializer.class)
|
@JsonAdapter(VersionSetting.Serializer.class)
|
||||||
public final class VersionSetting implements Cloneable {
|
public final class VersionSetting implements Cloneable, Observable {
|
||||||
|
|
||||||
|
private transient ObservableHelper helper = new ObservableHelper(this);
|
||||||
|
|
||||||
|
public VersionSetting() {
|
||||||
|
PropertyUtils.attachListener(this, helper);
|
||||||
|
}
|
||||||
|
|
||||||
private final BooleanProperty usesGlobalProperty = new SimpleBooleanProperty(this, "usesGlobal", true);
|
private final BooleanProperty usesGlobalProperty = new SimpleBooleanProperty(this, "usesGlobal", true);
|
||||||
|
|
||||||
@@ -698,79 +707,21 @@ public final class VersionSetting implements Cloneable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPropertyChangedListener(InvalidationListener listener) {
|
@Override
|
||||||
usesGlobalProperty.addListener(listener);
|
public void addListener(InvalidationListener listener) {
|
||||||
javaVersionProperty.addListener(listener);
|
helper.addListener(listener);
|
||||||
javaDirProperty.addListener(listener);
|
}
|
||||||
wrapperProperty.addListener(listener);
|
|
||||||
permSizeProperty.addListener(listener);
|
@Override
|
||||||
maxMemoryProperty.addListener(listener);
|
public void removeListener(InvalidationListener listener) {
|
||||||
minMemoryProperty.addListener(listener);
|
helper.removeListener(listener);
|
||||||
autoMemory.addListener(listener);
|
|
||||||
preLaunchCommandProperty.addListener(listener);
|
|
||||||
postExitCommand.addListener(listener);
|
|
||||||
javaArgsProperty.addListener(listener);
|
|
||||||
minecraftArgsProperty.addListener(listener);
|
|
||||||
environmentVariablesProperty.addListener(listener);
|
|
||||||
noJVMArgsProperty.addListener(listener);
|
|
||||||
notCheckGameProperty.addListener(listener);
|
|
||||||
notCheckJVMProperty.addListener(listener);
|
|
||||||
notPatchNativesProperty.addListener(listener);
|
|
||||||
showLogsProperty.addListener(listener);
|
|
||||||
serverIpProperty.addListener(listener);
|
|
||||||
fullscreenProperty.addListener(listener);
|
|
||||||
widthProperty.addListener(listener);
|
|
||||||
heightProperty.addListener(listener);
|
|
||||||
gameDirTypeProperty.addListener(listener);
|
|
||||||
gameDirProperty.addListener(listener);
|
|
||||||
processPriorityProperty.addListener(listener);
|
|
||||||
rendererProperty.addListener(listener);
|
|
||||||
useNativeGLFW.addListener(listener);
|
|
||||||
useNativeOpenAL.addListener(listener);
|
|
||||||
launcherVisibilityProperty.addListener(listener);
|
|
||||||
defaultJavaPathProperty.addListener(listener);
|
|
||||||
nativesDirProperty.addListener(listener);
|
|
||||||
nativesDirTypeProperty.addListener(listener);
|
|
||||||
versionIcon.addListener(listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VersionSetting clone() {
|
public VersionSetting clone() {
|
||||||
VersionSetting versionSetting = new VersionSetting();
|
VersionSetting cloned = new VersionSetting();
|
||||||
versionSetting.setUsesGlobal(isUsesGlobal());
|
PropertyUtils.copyProperties(this, cloned);
|
||||||
versionSetting.setJavaVersionType(getJavaVersionType());
|
return cloned;
|
||||||
versionSetting.setJavaVersion(getJavaVersion());
|
|
||||||
versionSetting.setDefaultJavaPath(getDefaultJavaPath());
|
|
||||||
versionSetting.setJavaDir(getJavaDir());
|
|
||||||
versionSetting.setWrapper(getWrapper());
|
|
||||||
versionSetting.setPermSize(getPermSize());
|
|
||||||
versionSetting.setMaxMemory(getMaxMemory());
|
|
||||||
versionSetting.setMinMemory(getMinMemory());
|
|
||||||
versionSetting.setAutoMemory(isAutoMemory());
|
|
||||||
versionSetting.setPreLaunchCommand(getPreLaunchCommand());
|
|
||||||
versionSetting.setPostExitCommand(getPostExitCommand());
|
|
||||||
versionSetting.setJavaArgs(getJavaArgs());
|
|
||||||
versionSetting.setMinecraftArgs(getMinecraftArgs());
|
|
||||||
versionSetting.setEnvironmentVariables(getEnvironmentVariables());
|
|
||||||
versionSetting.setNoJVMArgs(isNoJVMArgs());
|
|
||||||
versionSetting.setNotCheckGame(isNotCheckGame());
|
|
||||||
versionSetting.setNotCheckJVM(isNotCheckJVM());
|
|
||||||
versionSetting.setNotPatchNatives(isNotPatchNatives());
|
|
||||||
versionSetting.setShowLogs(isShowLogs());
|
|
||||||
versionSetting.setServerIp(getServerIp());
|
|
||||||
versionSetting.setFullscreen(isFullscreen());
|
|
||||||
versionSetting.setWidth(getWidth());
|
|
||||||
versionSetting.setHeight(getHeight());
|
|
||||||
versionSetting.setGameDirType(getGameDirType());
|
|
||||||
versionSetting.setGameDir(getGameDir());
|
|
||||||
versionSetting.setProcessPriority(getProcessPriority());
|
|
||||||
versionSetting.setRenderer(getRenderer());
|
|
||||||
versionSetting.setUseNativeGLFW(isUseNativeGLFW());
|
|
||||||
versionSetting.setUseNativeOpenAL(isUseNativeOpenAL());
|
|
||||||
versionSetting.setLauncherVisibility(getLauncherVisibility());
|
|
||||||
versionSetting.setNativesDir(getNativesDir());
|
|
||||||
versionSetting.setVersionIcon(getVersionIcon());
|
|
||||||
return versionSetting;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Serializer implements JsonSerializer<VersionSetting>, JsonDeserializer<VersionSetting> {
|
public static class Serializer implements JsonSerializer<VersionSetting>, JsonDeserializer<VersionSetting> {
|
||||||
|
|||||||
Reference in New Issue
Block a user