From c1de5665942b15325825c31e5c39b5b12ab0ab76 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 6 Dec 2017 17:35:30 +0100 Subject: [PATCH] #235 - added modals for download and starting --- .../ui/controller/Controller.java | 24 ++++--- .../LocalServerSettingsController.java | 66 ++++++++++++++----- .../ui/controller/ModalController.java | 5 ++ .../OnlineServerSettingsController.java | 2 + .../utils/LoadingModal.java | 18 +++-- .../budgetmaster/languages/_de.properties | 3 + .../budgetmaster/languages/_en.properties | 3 + .../ui/fxml/SettingsTabLocalServer.fxml | 3 + .../budgetmaster/logic/utils/Strings.java | 4 ++ 9 files changed, 93 insertions(+), 35 deletions(-) diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java index 10642b8d4..1d3bef002 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java @@ -134,17 +134,19 @@ public class Controller extends BaseController public void shutdown() { - Logger.debug("Stopping local BudgetMasterServer..."); - try + if(settings.getServerType().equals(ServerType.LOCAL)) { - ServerConnection connection = new ServerConnection(settings); - connection.shutdownServer(); - } - catch(Exception e) - { - Logger.error(e); + Logger.debug("Stopping local BudgetMasterServer..."); + try + { + ServerConnection connection = new ServerConnection(settings); + connection.shutdownServer(); + } + catch(Exception e) + { + Logger.error(e); + } } - Worker.shutdown(); System.exit(0); } @@ -293,10 +295,6 @@ public class Controller extends BaseController AlertGenerator.showAlert(AlertType.INFORMATION, Localization.getString(Strings.TITLE_INFO), "", Localization.getString(Strings.INFO_FIRST_START), icon, getStage(), null, false); }); } - else - { - refresh(filterSettings); - } } public void loadSettingsTab() diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java index 7494734c7..e6cfa96db 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java @@ -65,6 +65,9 @@ public class LocalServerSettingsController extends SettingsController @FXML private Label labelLatestVersion; private LanguageType previousLanguage; + + private final int MILLIS_UNTIL_NEXT_RETRY = 2000; + private final int MAX_NUMBER_OF_RETRIES = 5; @Override public void init(Controller controller) @@ -139,10 +142,7 @@ public class LocalServerSettingsController extends SettingsController { case ACTIVE: labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK)); - buttonLocalServerAction.setVisible(false); - - RestartHandler restartHandler = new RestartHandler(controller); - restartHandler.handleRestart(controller.getSettings().getLanguage()); + buttonLocalServerAction.setVisible(false); refreshLabelsUpdate(); save(); break; @@ -156,21 +156,38 @@ public class LocalServerSettingsController extends SettingsController Logger.debug("Starting local Server..."); serverHandler.createServerSettingsIfNotExists(); serverHandler.startServer(); - try - { - //DEBUG magic number - //TODO retry reconnecting - System.out.println("Start sleep"); - Thread.sleep(2000); - System.out.println("End sleep"); - } - catch(InterruptedException e) - { - } - if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE)) + Logger.debug("Trying to connect to local server..."); + Platform.runLater(()->{LoadingModal.setMessage(Localization.getString(Strings.LOAD_LOCAL_SERVER_CONNECT));}); + int retryCount = 1; + while(retryCount <= MAX_NUMBER_OF_RETRIES) { - throw new LocalServerException(""); + final int retries = retryCount; + boolean isActive = serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE); + if(isActive) + { + Logger.debug("Connected to local server"); + break; + } + + if(retryCount == MAX_NUMBER_OF_RETRIES) + { + Logger.debug("Couldn't connect to local server. Giving up after " + retryCount + " retries."); + throw new LocalServerException(""); + } + else + { + Logger.debug("Couldn't connect to local server. Retry " + retryCount + "/" + MAX_NUMBER_OF_RETRIES + ". Next Retry in " + MILLIS_UNTIL_NEXT_RETRY/1000 + " Seconds..."); + Platform.runLater(()->{LoadingModal.setMessage(Localization.getString(Strings.LOAD_LOCAL_SERVER_RETRY, retries, MAX_NUMBER_OF_RETRIES));}); + retryCount++; + try + { + Thread.sleep(MILLIS_UNTIL_NEXT_RETRY); + } + catch(InterruptedException e) + { + } + } } } catch(IOException e) @@ -180,7 +197,9 @@ public class LocalServerSettingsController extends SettingsController Platform.runLater(()->{ LoadingModal.closeModal(); AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false); + controller.refresh(controller.getFilterSettings()); }); + return; } catch(LocalServerException ex) { @@ -188,8 +207,19 @@ public class LocalServerSettingsController extends SettingsController Platform.runLater(()->{ LoadingModal.closeModal(); AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, ""), controller.getIcon(), controller.getStage(), null, false); + controller.refresh(controller.getFilterSettings()); + buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_STARTED)); + buttonLocalServerAction.setVisible(true); + buttonLocalServerAction.setDisable(false); + + buttonLocalServerAction.setOnAction((event) -> { + buttonLocalServerAction.setDisable(true); + checkServerStatus(); + }); }); + return; } + Platform.runLater(()->{ checkServerStatus(); LoadingModal.closeModal(); @@ -204,7 +234,7 @@ public class LocalServerSettingsController extends SettingsController buttonLocalServerAction.setOnAction((event) -> { buttonLocalServerAction.setDisable(true); - LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon()); + LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DOWNLOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon()); Worker.runLater(() -> { try diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java index b173d805b..1497da495 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ModalController.java @@ -15,4 +15,9 @@ public class ModalController e.consume(); }); } + + public void setMessage(String message) + { + labelMessage.setText(message); + } } \ No newline at end of file diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java index 365a45b53..022835cc1 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/OnlineServerSettingsController.java @@ -103,6 +103,8 @@ public class OnlineServerSettingsController extends SettingsController hboxSettings.prefWidthProperty().bind(scrollPane.widthProperty().subtract(25)); refreshLabelsUpdate(); + + controller.refresh(controller.getFilterSettings()); } @Override diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java index 42a6edf03..9c413bbe8 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/utils/LoadingModal.java @@ -16,20 +16,29 @@ import tools.Localization; public class LoadingModal { private static Stage modalStage; + private static ModalController modalController; public static void showModal(String title, String message, Stage owner, Image icon) { closeModal(); modalStage = createModal(title, message, owner, icon); - } + } + + public static void setMessage(String message) + { + if(modalController != null) + { + modalController.setMessage(message); + } + } public static void closeModal() { - System.out.println(Thread.currentThread().getStackTrace()[2]); if(modalStage != null) { modalStage.close(); modalStage = null; + modalController = null; } } @@ -52,8 +61,9 @@ public class LoadingModal newStage.setScene(new Scene(root)); newStage.getIcons().add(icon); newStage.setResizable(false); - ModalController newController = fxmlLoader.getController(); - newController.init(newStage, message); + newStage.setAlwaysOnTop(true); + modalController = fxmlLoader.getController(); + modalController.init(newStage, message); newStage.show(); return newStage; diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties index cb57ced7a..11f0afcdd 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties @@ -49,6 +49,8 @@ load.update=Update wird heruntergeladen, bitte warten... load.search=Buchungen werden gesucht, bitte warten... load.local.server=Der lokale Server wird gestartet, bitte warten... load.download.local.server=Der lokale Server wird heruntergeladen, bitte warten... +load.local.server.connect=Verbinde mit lokalem Server, bitte warten... +load.local.server.retry=Verbinde mit lokalem Server... (Versuch {0}/{1}) # MISC category.none=Keine Kategorie @@ -71,6 +73,7 @@ tagfield.placeholder=Neuen Tag hier eingeben shortcut.dev.console=F12 local.server.status.ok=Server ist gestartet. local.server.status.not.started=Server konnte nicht gestartet werden. +local.server.action.not.started=Starten local.server.status.not.present=Server nicht gefunden. local.server.action.not.present=Herunterladen diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties index a17ec01f1..188ddef05 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties @@ -49,6 +49,8 @@ load.update=Please wait while the update is being downloaded... load.search=Please wait while payments are being searched... load.local.server=Please wait while the local server is being started... load.download.local.server=Please wait while the local server is being downloaded... +load.local.server.connect=Connecting to local server... +load.local.server.retry=Connecting to local server... (Retry {0}/{1}) # MISC category.none=No Category @@ -71,6 +73,7 @@ tagfield.placeholder=Enter new Tag here shortcut.dev.console=F12 local.server.status.ok=Server is running. local.server.status.not.started=Server couldn't be started. +local.server.action.not.started=Start local.server.status.not.present=Server not found. local.server.action.not.present=Download diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml index b696f8b9d..3763df344 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/fxml/SettingsTabLocalServer.fxml @@ -90,6 +90,9 @@ <HBox.margin> <Insets right="25.0" /> </HBox.margin> + <padding> + <Insets top="3.0" /> + </padding> </VBox> <VBox alignment="CENTER_LEFT" prefHeight="200.0" prefWidth="100.0" spacing="15.0" HBox.hgrow="ALWAYS"> <children> diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java index 950b24b67..706a31d75 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -51,6 +51,9 @@ public class Strings public static final String LOAD_SEARCH = "load.search"; public static final String LOAD_LOCAL_SERVER = "load.local.server"; public static final String LOAD_DOWNLOAD_LOCAL_SERVER = "load.download.local.server"; + public static final String LOAD_LOCAL_SERVER_CONNECT = "load.local.server.connect"; + public static final String LOAD_LOCAL_SERVER_RETRY = "load.local.server.retry"; + //MISC public static final String CATEGORY_NONE = "category.none"; @@ -74,6 +77,7 @@ public class Strings public static final String SHORTCUT_DEV_CONSOLE = "shortcut.dev.console"; public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok"; public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started"; + public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started"; public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present"; public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present"; -- GitLab