From 08a7c27353c1b660d08ce9eb7c5fade09d002a3d Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 22 Sep 2018 21:03:37 +0800 Subject: [PATCH] Fix config file is checked before created --- .../jackhuang/hmcl/setting/ConfigHolder.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 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 f1b11831f..92c3e164c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java @@ -28,10 +28,10 @@ import java.util.Map; import java.util.logging.Level; import org.jackhuang.hmcl.util.InvocationDispatcher; +import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.platform.OperatingSystem; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.jackhuang.hmcl.util.Lang.thread; import static org.jackhuang.hmcl.util.Logging.LOG; public final class ConfigHolder { @@ -45,19 +45,6 @@ public final class ConfigHolder { private static Config configInstance; private static boolean newlyCreated; - private static InvocationDispatcher configWriter = new InvocationDispatcher<>(content -> { - thread(() -> { - LOG.info("Saving config"); - try { - synchronized (configLocation) { - Files.write(configLocation, content.get().getBytes(UTF_8)); - } - } catch (IOException e) { - LOG.log(Level.SEVERE, "Failed to save config", e); - } - }); - }); - public static Config config() { if (configInstance == null) { throw new IllegalStateException("Configuration hasn't been loaded"); @@ -84,7 +71,7 @@ public final class ConfigHolder { Settings.init(); if (newlyCreated) { - markConfigDirty(); + saveConfigSync(); // hide the config file on windows if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { @@ -138,7 +125,26 @@ public final class ConfigHolder { return new Config(); } + private static InvocationDispatcher configWriter = InvocationDispatcher.runOn(Lang::thread, content -> { + try { + writeToConfig(content); + } catch (IOException e) { + LOG.log(Level.SEVERE, "Failed to save config", e); + } + }); + + private static void writeToConfig(String content) throws IOException { + LOG.info("Saving config"); + synchronized (configLocation) { + Files.write(configLocation, content.getBytes(UTF_8)); + } + } + static void markConfigDirty() { configWriter.accept(configInstance.toJson()); } + + private static void saveConfigSync() throws IOException { + writeToConfig(configInstance.toJson()); + } }