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 10642b8d4253316d7e111b72dcf5cdddbe5c7d1d..1d3bef002f2e3bc46be27605a5e5469de2a894f5 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 7494734c76e5c329780be2fa74e1767e79415c5e..e6cfa96db17d40a04010d544dafee6dbbe2bba6c 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 b173d805b38430363d7c586fb8ad6380c3347408..1497da495769c9df7a64ec507eb0a360c8f9e264 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 365a45b53ebf37094a32d15b0264722e7f6715e5..022835cc1ff5cb43fa9058d126457b921f338cf2 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 42a6edf03c2d29c0c37a0c1278cd5afe87d2b4dc..9c413bbe85e19e849b6c5af25076713ddda4d6e0 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 cb57ced7af0a4f0df38b86a4a5abd890ea607b47..11f0afcddf392cd7654f3b993bde9d1cbcb14509 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 a17ec01f1722c18448710d456679d94750b6543e..188ddef0567129c86f11353b250dc112f8be4a49 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 b696f8b9d89c171d2d0c746dec9757a10b5cf3cb..3763df344257f0d45c5725acb8863a8a0e13e0d2 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 950b24b67191e3bd89da234864066f9eeed34a17..706a31d75a1f484e0006917c63b0332e963b2ff1 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";