From 93e5851167b05cf60380136b12d434a926e0c495 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 7 Aug 2018 18:40:23 +0800 Subject: [PATCH] Improve config compatibility with HMCL 2.x. Fix #411 --- .../jackhuang/hmcl/setting/ConfigHolder.java | 20 ++++++++++++++++--- .../hmcl/setting/EnumBackgroundImage.java | 9 +-------- .../org/jackhuang/hmcl/setting/Theme.java | 12 +++++++++++ .../hmcl/setting/VersionSetting.java | 4 +++- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java index 1246f5a22..3e03d95b0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java @@ -29,6 +29,7 @@ import java.util.logging.Level; import com.google.gson.Gson; import com.google.gson.JsonParseException; +import org.jackhuang.hmcl.util.StringUtils; public final class ConfigHolder { @@ -78,7 +79,8 @@ public final class ConfigHolder { LOG.info("Config is empty"); } else { Map raw = new Gson().fromJson(content, Map.class); - return upgradeConfig(deserialized, raw); + upgradeConfig(deserialized, raw); + return deserialized; } } catch (IOException | JsonParseException e) { LOG.log(Level.WARNING, "Something went wrong when loading config.", e); @@ -99,9 +101,21 @@ public final class ConfigHolder { } } - private static Config upgradeConfig(Config deserialized, Map rawJson) { + /** + * This method is for the compatibility with old HMCL 3.x as well as HMCL 2.x. + * @param deserialized deserialized config settings + * @param rawJson raw json structure of the config settings without modification + * @return {@code deserialized} + */ + private static void upgradeConfig(Config deserialized, Map rawJson) { + // Following is for the compatibility with HMCL 2.x if (!rawJson.containsKey("commonDirType")) deserialized.setCommonDirType(deserialized.getCommonDirectory().equals(Settings.getDefaultCommonDirectory()) ? EnumCommonDirectory.DEFAULT : EnumCommonDirectory.CUSTOM); - return deserialized; + if (!rawJson.containsKey("backgroundType")) + deserialized.setBackgroundImageType(StringUtils.isNotBlank(deserialized.getBackgroundImage()) ? EnumBackgroundImage.CUSTOM : EnumBackgroundImage.DEFAULT); + if (!rawJson.containsKey("hasProxy")) + deserialized.setHasProxy(StringUtils.isNotBlank(deserialized.getProxyHost())); + if (!rawJson.containsKey("hasProxyAuth")) + deserialized.setHasProxyAuth(StringUtils.isNotBlank(deserialized.getProxyUser())); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java index e12a67420..cf197287a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/EnumBackgroundImage.java @@ -19,12 +19,5 @@ package org.jackhuang.hmcl.setting; public enum EnumBackgroundImage { DEFAULT, - CUSTOM; - - public static EnumBackgroundImage indexOf(int index) { - if (index >= values().length || index < 0) - return DEFAULT; - else - return values()[index]; - } + CUSTOM } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index 5aea647a6..e95ef5498 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -104,6 +104,18 @@ public class Theme { public static Optional getTheme(String name) { if (name == null) return Optional.empty(); + else if (name.equalsIgnoreCase("blue")) + return Optional.of(custom("#5C6BC0")); + else if (name.equalsIgnoreCase("darker_blue")) + return Optional.of(custom("#283593")); + else if (name.equalsIgnoreCase("green")) + return Optional.of(custom("#43A047")); + else if (name.equalsIgnoreCase("orange")) + return Optional.of(custom("#E67E22")); + else if (name.equalsIgnoreCase("purple")) + return Optional.of(custom("#9C27B0")); + else if (name.equalsIgnoreCase("red")) + return Optional.of(custom("#F44336")); if (name.startsWith("#")) try { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index 061639a6e..3b87a2afe 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -601,7 +601,9 @@ public final class VersionSetting { } private int parseJsonPrimitive(JsonPrimitive primitive, int defaultValue) { - if (primitive.isNumber()) + if (primitive == null) + return defaultValue; + else if (primitive.isNumber()) return primitive.getAsInt(); else return Lang.parseInt(primitive.getAsString(), defaultValue);