From 1066f6f3d2cb57d7f56e449e4f8b5e0932039c06 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Tue, 28 Apr 2020 03:31:55 +0200 Subject: [PATCH] remember last connection --- G-Earth/src/main/java/gearth/misc/Cacher.java | 2 +- .../java/gearth/protocol/HConnection.java | 2 +- .../ui/connection/ConnectionController.java | 59 ++++++++++++++++++- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/G-Earth/src/main/java/gearth/misc/Cacher.java b/G-Earth/src/main/java/gearth/misc/Cacher.java index 6c382b1..ace14c9 100644 --- a/G-Earth/src/main/java/gearth/misc/Cacher.java +++ b/G-Earth/src/main/java/gearth/misc/Cacher.java @@ -58,7 +58,7 @@ public class Cacher { private static void updateCache(JSONObject contents, String cache_filename) { updateCache(contents.toString(), cache_filename); } - public static void updateCache(String content, String cache_filename){ + public static void updateCache(String content, String cache_filename){ File parent_dir = new File(getCacheDir()); parent_dir.mkdirs(); diff --git a/G-Earth/src/main/java/gearth/protocol/HConnection.java b/G-Earth/src/main/java/gearth/protocol/HConnection.java index c18c555..1f3c400 100644 --- a/G-Earth/src/main/java/gearth/protocol/HConnection.java +++ b/G-Earth/src/main/java/gearth/protocol/HConnection.java @@ -117,7 +117,7 @@ public class HConnection { private static volatile ConnectionInfoOverrider connectionInfoOverrider; public static volatile boolean DECRYPTPACKETS = true; - public static volatile boolean DEBUG = true; + public static volatile boolean DEBUG = false; private static final HostReplacer hostsReplacer = HostReplacerFactory.get(); private volatile boolean hostRedirected = false; diff --git a/G-Earth/src/main/java/gearth/ui/connection/ConnectionController.java b/G-Earth/src/main/java/gearth/ui/connection/ConnectionController.java index 99f7c37..e12c95e 100644 --- a/G-Earth/src/main/java/gearth/ui/connection/ConnectionController.java +++ b/G-Earth/src/main/java/gearth/ui/connection/ConnectionController.java @@ -1,10 +1,12 @@ package gearth.ui.connection; +import gearth.misc.Cacher; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.scene.control.*; import gearth.protocol.HConnection; import gearth.ui.SubForm; +import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; @@ -14,6 +16,11 @@ import java.util.Set; public class ConnectionController extends SubForm { + private final String CONNECTION_INFO_CACHE_KEY = "last_connection_settings"; + private final String AUTODETECT_CACHE = "auto_detect"; + private final String HOST_CACHE = "host"; + private final String PORT_CACHE = "port"; + public ComboBox inpPort; public ComboBox inpHost; public Button btnConnect; @@ -23,7 +30,21 @@ public class ConnectionController extends SubForm { public CheckBox cbx_autodetect; public TextField txtfield_hotelversion; + private final Object lock = new Object(); + private volatile int fullyInitialized = 0; + public void initialize() { + Object object; + String hostRemember = null; + String portRemember = null; + if ((object = Cacher.get(CONNECTION_INFO_CACHE_KEY)) != null) { + JSONObject connectionSettings = (JSONObject) object; + boolean autoDetect = connectionSettings.getBoolean(AUTODETECT_CACHE); + hostRemember = connectionSettings.getString(HOST_CACHE); + portRemember = connectionSettings.getInt(PORT_CACHE) + ""; + cbx_autodetect.setSelected(autoDetect); + } + inpPort.getEditor().textProperty().addListener(observable -> { updateInputUI(); }); @@ -47,17 +68,33 @@ public class ConnectionController extends SubForm { List portsSorted = new ArrayList<>(ports); portsSorted.sort(String::compareTo); + int hostSelectIndex = 0; + int portSelectIndex = 0; + if (hostRemember != null) { + hostSelectIndex = hostsSorted.indexOf(hostRemember); + portSelectIndex = portsSorted.indexOf(portRemember); + hostSelectIndex = Math.max(hostSelectIndex, 0); + portSelectIndex = Math.max(portSelectIndex, 0); + } + + inpPort.getItems().addAll(portsSorted); inpHost.getItems().addAll(hostsSorted); - inpPort.getSelectionModel().selectFirst(); - inpHost.getSelectionModel().selectFirst(); + inpPort.getSelectionModel().select(portSelectIndex); + inpHost.getSelectionModel().select(hostSelectIndex); + + synchronized (lock) { + fullyInitialized++; + if (fullyInitialized == 2) { + Platform.runLater(this::updateInputUI); + } + } } private void updateInputUI() { txtfield_hotelversion.setText(getHConnection().getHotelVersion()); - System.out.println(getHConnection().getState()); btnConnect.setDisable(getHConnection().getState() == HConnection.State.PREPARING || getHConnection().getState() == HConnection.State.ABORTING); if (!cbx_autodetect.isSelected() && !btnConnect.isDisable()) { try { @@ -74,6 +111,13 @@ public class ConnectionController extends SubForm { } public void onParentSet(){ + synchronized (lock) { + fullyInitialized++; + if (fullyInitialized == 2) { + Platform.runLater(this::updateInputUI); + } + } + getHConnection().getStateObservable().addListener((oldState, newState) -> Platform.runLater(() -> { updateInputUI(); if (newState == HConnection.State.NOT_CONNECTED) { @@ -95,6 +139,14 @@ public class ConnectionController extends SubForm { lblState.setText("Waiting for connection"); } + if (newState == HConnection.State.CONNECTED) { + JSONObject connectionSettings = new JSONObject(); + connectionSettings.put(AUTODETECT_CACHE, cbx_autodetect.isSelected()); + connectionSettings.put(HOST_CACHE, inpHost.getEditor().getText()); + connectionSettings.put(PORT_CACHE, Integer.parseInt(inpPort.getEditor().getText())); + + Cacher.put(CONNECTION_INFO_CACHE_KEY, connectionSettings); + } })); } @@ -118,6 +170,7 @@ public class ConnectionController extends SubForm { } }).start(); + } else { getHConnection().abort();