diff --git a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/client/WebApiRemoteConnectionStateListener.java b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/client/WebApiRemoteConnectionStateListener.java index 1f1dc56f3ffbb352ebe5c78f8989c3af4b8ed6eb..20756ec1df83ec7c0d199c8c7b3ee2003878e66b 100644 --- a/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/client/WebApiRemoteConnectionStateListener.java +++ b/PlayWallPlugins/PlayWallPluginWebAPI/src/main/java/de/tobias/playpad/plugin/api/client/WebApiRemoteConnectionStateListener.java @@ -1,6 +1,9 @@ package de.tobias.playpad.plugin.api.client; +import com.neovisionaries.ws.client.WebSocketException; import com.neovisionaries.ws.client.WebSocketState; +import de.thecodelabs.logger.Logger; +import de.thecodelabs.utils.threading.Worker; import de.thecodelabs.utils.ui.icon.FontAwesomeType; import de.thecodelabs.utils.ui.icon.FontIcon; import de.thecodelabs.utils.util.Localization; @@ -8,13 +11,18 @@ import de.tobias.playpad.api.PlayPadClient; import de.tobias.playpad.plugin.MainWindowListener; import de.tobias.playpad.plugin.api.WebApiPlugin$; import de.tobias.playpad.viewcontroller.main.IMainViewController; +import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.IntegerProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.scene.control.Tooltip; +import javafx.scene.input.MouseEvent; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; public class WebApiRemoteConnectionStateListener implements MainWindowListener { @@ -28,22 +36,27 @@ public class WebApiRemoteConnectionStateListener implements MainWindowListener { connectedProperty = new SimpleIntegerProperty(0); connectedProperty.addListener((observable, oldValue, newValue) -> { - boolean allConnected = newValue.intValue() == 0; - - connectionStateIcon.setIcons(allConnected ? FontAwesomeType.CLOUD : FontAwesomeType.EXCLAMATION_CIRCLE); - if (!allConnected) { - final String disconnectedServers = WebApiPlugin$.MODULE$.connections().entrySet().stream() - .filter(entry -> entry.getValue().getPlayPadConnectionState() != WebSocketState.OPEN) - .map(entry -> entry.getKey().getName()).collect(Collectors.joining(", ")); - connectionStateIcon.setTooltip(new Tooltip(Localization.getString("webapi-settings.remote.state.tooltip", disconnectedServers))); - connectionStateIcon.setStyle("-fx-text-fill: red;"); - } else { - connectionStateIcon.setTooltip(null); - connectionStateIcon.setStyle(""); - } + Platform.runLater(() -> { + boolean allConnected = newValue.intValue() == 0; + connectionStateIcon.setIcons(allConnected ? FontAwesomeType.CLOUD : FontAwesomeType.EXCLAMATION_CIRCLE); + if (!allConnected) { + final String disconnectedServers = WebApiPlugin$.MODULE$.connections().entrySet().stream() + .filter(entry -> entry.getValue().getPlayPadConnectionState() != WebSocketState.OPEN) + .map(entry -> entry.getKey().getName()).collect(Collectors.joining(", ")); + connectionStateIcon.setTooltip(new Tooltip(Localization.getString("webapi-settings.remote.state.tooltip", disconnectedServers))); + connectionStateIcon.setStyle("-fx-text-fill: red;"); + } else { + connectionStateIcon.setTooltip(null); + connectionStateIcon.setStyle(""); + } + }); }); - WebApiPlugin$.MODULE$.connections().addListener((InvalidationListener) observable -> createConnectionStateBinding()); + WebApiPlugin$.MODULE$.connections().addListener((InvalidationListener) observable -> { + createConnectionStateBinding(); + connectionStateIcon.setVisible(!WebApiPlugin$.MODULE$.connections().isEmpty()); + }); + connectionStateIcon.setVisible(!WebApiPlugin$.MODULE$.connections().isEmpty()); createConnectionStateBinding(); }