diff --git a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java index 27bd2292b11de1fc582f4fabf810c1d2c4b1909a..bfd251cfe0bbb528fbaa15f7335eefce01eb3a25 100644 --- a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java +++ b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java @@ -27,6 +27,7 @@ import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmaster.logic.RepeatingPayment; import de.deadlocker8.budgetmaster.logic.RepeatingPaymentEntry; import de.deadlocker8.budgetmaster.logic.Settings; +import de.deadlocker8.budgetmaster.logic.updater.VersionInformation; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import de.deadlocker8.budgetmasterserver.logic.database.Database; import tools.Read; @@ -37,7 +38,7 @@ public class ServerConnection private Gson gson; public ServerConnection(Settings settings) throws Exception - { + { this.settings = settings; this.gson = new Gson(); @@ -494,7 +495,7 @@ public class ServerConnection /* * VERSION */ - public int getServerVersion() throws Exception + public VersionInformation getServerVersion() throws Exception { URL url = new URL(settings.getUrl() + "/version?secret=" + Helpers.getURLEncodedString(settings.getSecret())); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); @@ -503,7 +504,8 @@ public class ServerConnection if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) { - return Integer.parseInt(Read.getStringFromInputStream(httpsCon.getInputStream())); + String result = Read.getStringFromInputStream(httpsCon.getInputStream()); + return gson.fromJson(result, VersionInformation.class); } else { diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java index 1318e3fd03cfb2fd894908e46e9cbfb2049efa02..1d8693f632532ded522ce0fe57954fd1dcfadbe3 100644 --- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -58,6 +58,7 @@ public class Strings public static final String URL_PLACEHOLDER = "url.placeholder"; public static final String CURRENCY_PLACEHOLDER = "currency.placeholder"; public static final String TRUSTED_HOSTS_PLACEHOLDER = "trusted.hosts.placeholder"; + public static final String VERSION = "version"; //REPORT public static final String REPORT_POSITION = "report.position"; @@ -159,6 +160,7 @@ public class Strings public static final String WARNING_WRONG_VERIFICATION_CODE = "warning.wrong.verificationcode"; public static final String WARNING_EMPTY_PASSWORD = "warning.empty.password"; public static final String WARNING_WRONG_PASSWORD = "warning.wrong.password"; + public static final String WARNING_SERVER_VERSION = "warning.server.version"; //ERROR public static final String ERROR_UNKNOWN_HOST = "error.unknown.host"; diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties index 16a7e731663ae8a8c02beb1354e2d09a26650c71..85268750b60aec53721a06b3593e8c8c16ad2887 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties @@ -1,6 +1,6 @@ # DEFAULT app.name=BudgetMaster -version.code=1 +version.code=9 version.name=1.5.0_alpha version.date=23.08.17 author=Robert Goldmann @@ -157,6 +157,7 @@ warning.empty.currency=Bitte gib deine gew warning.wrong.verificationcode=Die Eingabe stimmt nicht mit dem Best�tigungscode �berein. warning.empty.password=Bitte gib dein Passwort ein. warning.wrong.password=Das Passwort ist nicht korrekt. +warning.server.version=Die installierte Serverversion (Version: {0}) ist nicht kompatibel mit deinem Client (Version: {1}).\n\nBitte aktualisiere deinen Server:\nSchritt 1: Server stoppen\nSchritt 2: BudgetMasterServer.jar mit aktuellester Version ersetzen\nSchritt 3: Server starten # ERROR error.unknown.host=Es konnte keine Verbindung mit dem Internet hergestellt werden. diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties index a54e0f13761a94109079bc72f0333ce7410a47d3..a1d9e6dd66aa79279f4f77e43213ac823d5886b2 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties @@ -157,6 +157,7 @@ warning.empty.currency=Please enter your desired currency. warning.wrong.verificationcode=The input does not match the verification code. warning.empty.password=Please enter your password. warning.wrong.password=The password is not correct. +warning.server.version=The installed server version (version: {0}) is not compatible with your client (version: {1}).\n\nPlease update your server:\nStep 1: stop server\nStep 2: replace BudgetMasterServer.jar with latest version\nStep 3: start server # ERROR error.unknown.host=Could not connect to the Internet. diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java index 5d976acd08e90a6f5d7a46f7a3be3b453f6a1743..c35bb05415888b0f0675ba7d9963a80cf5637d83 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java @@ -15,6 +15,7 @@ import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.Updater; import de.deadlocker8.budgetmaster.logic.serverconnection.ExceptionHandler; import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection; +import de.deadlocker8.budgetmaster.logic.updater.VersionInformation; import de.deadlocker8.budgetmaster.logic.utils.Colors; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import de.deadlocker8.budgetmaster.logic.utils.Strings; @@ -411,6 +412,28 @@ public class Controller { ServerConnection connection = new ServerConnection(settings); + //check if server is compatible with client + VersionInformation serverVersion = connection.getServerVersion(); + if(serverVersion.getVersionCode() < Integer.parseInt(Localization.getString(Strings.VERSION_CODE))) + { + Platform.runLater(()->{; + AlertGenerator.showAlert(AlertType.WARNING, + Localization.getString(Strings.TITLE_WARNING), + "", + Localization.getString(Strings.WARNING_SERVER_VERSION, serverVersion.getVersionName(), Localization.getString(Strings.VERSION_NAME)), + icon, stage, null, false); + + if(modalStage != null) + { + modalStage.close(); + }; + categoryHandler = new CategoryHandler(null); + toggleAllTabsExceptSettings(true); + tabPane.getSelectionModel().select(tabSettings); + }); + return; + } + paymentHandler = new PaymentHandler(); paymentHandler.getPayments().addAll(connection.getPayments(currentDate.getYear(), currentDate.getMonthOfYear())); paymentHandler.getPayments().addAll(connection.getRepeatingPayments(currentDate.getYear(), currentDate.getMonthOfYear())); diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java index 04920fa91c8d9a4222eda79d3099c706de3305b5..2279f648c1a25c02fd56bcbfd0c9644bafa8574c 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java @@ -173,7 +173,7 @@ public class SplashScreenController Parent root = (Parent)fxmlLoader.load(); Stage newStage = new Stage(); newStage.setTitle(Localization.getString(Strings.APP_NAME)); - newStage.setScene(new Scene(root, 650, 675)); + newStage.setScene(new Scene(root, 650, 700)); newStage.getIcons().add(icon); newStage.setResizable(true); newStage.setMinHeight(650); diff --git a/src/de/deadlocker8/budgetmasterserver/main/Main.java b/src/de/deadlocker8/budgetmasterserver/main/Main.java index c191960967bea6ac788dcc55a7bf1e12ab16f7e8..435a3378ed8f85f2416e00c6738cd4fb952c701e 100644 --- a/src/de/deadlocker8/budgetmasterserver/main/Main.java +++ b/src/de/deadlocker8/budgetmasterserver/main/Main.java @@ -9,6 +9,7 @@ import java.nio.file.Paths; import java.util.Locale; import java.util.ResourceBundle; +import de.deadlocker8.budgetmaster.logic.updater.VersionInformation; import de.deadlocker8.budgetmasterserver.logic.Settings; import de.deadlocker8.budgetmasterserver.logic.Utils; import de.deadlocker8.budgetmasterserver.server.SparkServer; @@ -60,7 +61,12 @@ public class Main try { settings = Utils.loadSettings(); - new SparkServer(settings, bundle.getString("version.code")); + VersionInformation versionInfo = new VersionInformation(); + versionInfo.setVersionCode(Integer.parseInt(bundle.getString("version.code"))); + versionInfo.setVersionName(bundle.getString("version.name")); + versionInfo.setDate(bundle.getString("version.date")); + + new SparkServer(settings, versionInfo); } catch(IOException | URISyntaxException e) { diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index ce364e936552397ad5fc864e4625ee0bbb1f3e4c..72771a73be50526a7fa3398eb0352a3e9aeb72b3 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -17,6 +17,7 @@ import org.joda.time.DateTime; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import de.deadlocker8.budgetmaster.logic.updater.VersionInformation; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import de.deadlocker8.budgetmasterserver.logic.Settings; import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; @@ -51,11 +52,9 @@ public class SparkServer { private Gson gson; private DatabaseHandler handler; - private String versionCode; - public SparkServer(Settings settings, String versionCode) - { - this.versionCode = versionCode; + public SparkServer(Settings settings, VersionInformation versionInfo) + { Logger.info("Initializing SparkServer..."); gson = new GsonBuilder().setPrettyPrinting().create(); @@ -130,7 +129,7 @@ public class SparkServer post("/database", new DatabaseImport(handler, gson)); delete("/database", new DatabaseDelete(handler, settings)); - get("/version", new VersionGet(versionCode)); + get("/version", new VersionGet(gson, versionInfo)); after((request, response) -> { new RepeatingPaymentUpdater(handler).updateRepeatingPayments(DateTime.now()); diff --git a/src/de/deadlocker8/budgetmasterserver/server/version/VersionGet.java b/src/de/deadlocker8/budgetmasterserver/server/version/VersionGet.java index 5e9b3e5d92d3012345bc8ceba1fd51645a34b415..dfbb05e481e274b158baf6c4e5e0371ae4cd7313 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/version/VersionGet.java +++ b/src/de/deadlocker8/budgetmasterserver/server/version/VersionGet.java @@ -1,21 +1,26 @@ package de.deadlocker8.budgetmasterserver.server.version; +import com.google.gson.Gson; + +import de.deadlocker8.budgetmaster.logic.updater.VersionInformation; import spark.Request; import spark.Response; import spark.Route; public class VersionGet implements Route { - private String versionCode; + private Gson gson; + private VersionInformation versionInfo; - public VersionGet( String versionCode) + public VersionGet(Gson gson, VersionInformation versionInfo) { - this.versionCode = versionCode; + this.gson=gson; + this.versionInfo = versionInfo; } @Override public Object handle(Request req, Response res) throws Exception { - return versionCode; + return gson.toJson(versionInfo); } } \ No newline at end of file