From dd5c864d603071bc2a6c72cf15318e37fec1fa75 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 31 Aug 2020 22:07:22 +0200 Subject: [PATCH] make config io in other thread, only save config if favicon changed, launcher: hide empty cells --- .../minosoft/config/Configuration.java | 29 ++++++++++++------- .../minosoft/gui/main/ServerListCell.java | 10 ++++++- src/main/resources/layout/cells/server.fxml | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/config/Configuration.java b/src/main/java/de/bixilon/minosoft/config/Configuration.java index ea3ac9e6c..47309174d 100644 --- a/src/main/java/de/bixilon/minosoft/config/Configuration.java +++ b/src/main/java/de/bixilon/minosoft/config/Configuration.java @@ -15,6 +15,7 @@ package de.bixilon.minosoft.config; import de.bixilon.minosoft.Config; import de.bixilon.minosoft.gui.main.Server; +import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.util.mojang.api.MojangAccount; import org.yaml.snakeyaml.Yaml; @@ -27,7 +28,7 @@ import java.util.Map; import java.util.UUID; public class Configuration { - LinkedHashMap config; + final LinkedHashMap config; public Configuration(String filename) throws IOException { @@ -171,15 +172,23 @@ public class Configuration { } public void saveToFile(String filename) { - Yaml yaml = new Yaml(); - FileWriter writer; - try { - writer = new FileWriter(Config.homeDir + "config/" + filename); - } catch (IOException e) { - e.printStackTrace(); - return; - } - yaml.dump(config, writer); + + Thread thread = new Thread(() -> { + Yaml yaml = new Yaml(); + FileWriter writer; + try { + writer = new FileWriter(Config.homeDir + "config/" + filename); + } catch (IOException e) { + e.printStackTrace(); + return; + } + synchronized (config) { + yaml.dump(config, writer); + } + Log.verbose(String.format("Configuration saved to file %s", filename)); + }); + thread.setName("IO-Thread"); + thread.start(); } public ArrayList getMojangAccounts() { diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java index ce93c791c..6ad6e0c74 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java @@ -57,6 +57,8 @@ public class ServerListCell extends ListCell implements Initializable { public MenuItem optionsEdit; @FXML public MenuItem optionsDelete; + @FXML + public MenuButton optionsMenu; boolean canConnect = false; @FXML private Label serverName; @@ -90,9 +92,11 @@ public class ServerListCell extends ListCell implements Initializable { protected void updateItem(Server server, boolean empty) { super.updateItem(server, empty); + root.setVisible(!empty); if (empty) { return; } + if (server == null) { return; } @@ -165,9 +169,12 @@ public class ServerListCell extends ListCell implements Initializable { } motd.setText(ping.getMotd().getRawMessage()); if (ping.getFavicon() != null) { + icon.setImage(ping.getFavicon()); + if (ping.getBase64EncodedFavicon().equals(server.getBase64Favicon())) { + return; + } server.setBase64Favicon(ping.getBase64EncodedFavicon()); server.saveToConfig(); - icon.setImage(ping.getFavicon()); } })); @@ -242,6 +249,7 @@ public class ServerListCell extends ListCell implements Initializable { public void delete() { listView.getItems().remove(server); server.delete(); + Log.info(String.format("Deleted server (name=\"%s\", address=\"%s\")", server.getName(), server.getAddress())); } public void connect() { diff --git a/src/main/resources/layout/cells/server.fxml b/src/main/resources/layout/cells/server.fxml index 3840b0f5a..e5bcbecb9 100644 --- a/src/main/resources/layout/cells/server.fxml +++ b/src/main/resources/layout/cells/server.fxml @@ -26,7 +26,7 @@ AnchorPane.topAnchor="40.0"/>