diff --git a/build/Updater.exe b/build/Updater.exe new file mode 100644 index 0000000000000000000000000000000000000000..f3aef3a80f4815bcaec31389efc23eaf2a383aba Binary files /dev/null and b/build/Updater.exe differ diff --git a/build/Updater.jar b/build/Updater.jar new file mode 100644 index 0000000000000000000000000000000000000000..b868472f67e3d52550ab77618d3bde436a074a2b Binary files /dev/null and b/build/Updater.jar differ diff --git a/build/Updater.xml b/build/Updater.xml new file mode 100644 index 0000000000000000000000000000000000000000..19a89d2aa14992e23ca0831b7ead66097063c928 --- /dev/null +++ b/build/Updater.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launch4jConfig> + <dontWrapJar>false</dontWrapJar> + <headerType>gui</headerType> + <jar>C:\Programmierung\eclipse\workspace\BudgetMaster\build\Updater.jar</jar> + <outfile>C:\Programmierung\eclipse\workspace\BudgetMaster\build\Updater.exe</outfile> + <errTitle></errTitle> + <cmdLine></cmdLine> + <chdir>.</chdir> + <priority>normal</priority> + <downloadUrl>http://java.com/download</downloadUrl> + <supportUrl></supportUrl> + <stayAlive>false</stayAlive> + <restartOnCrash>false</restartOnCrash> + <manifest></manifest> + <icon></icon> + <classPath> + <mainClass>application.Main</mainClass> + <cp>.</cp> + </classPath> + <jre> + <path></path> + <bundledJre64Bit>false</bundledJre64Bit> + <bundledJreAsFallback>false</bundledJreAsFallback> + <minVersion>1.8.0</minVersion> + <maxVersion></maxVersion> + <jdkPreference>preferJre</jdkPreference> + <runtimeBits>64/32</runtimeBits> + </jre> +</launch4jConfig> \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/updater/Updater.java b/src/de/deadlocker8/budgetmaster/logic/updater/Updater.java index f969d027697615e491abf257f7c84bcf70ca5531..68370afb9da695cd24f9892dc5a53458b58f1c03 100644 --- a/src/de/deadlocker8/budgetmaster/logic/updater/Updater.java +++ b/src/de/deadlocker8/budgetmaster/logic/updater/Updater.java @@ -18,7 +18,10 @@ import com.google.gson.JsonParser; import de.deadlocker8.budgetmaster.logic.utils.Strings; import logger.Logger; +import nativeWindows.NativeLauncher; import tools.Localization; +import tools.OS; +import tools.OS.OSType; import tools.PathUtils; public class Updater @@ -113,10 +116,16 @@ public class Updater return null; } - private void downloadLatestUpdater() throws IOException + private void downloadLatestUpdater(OSType osType) throws IOException { - //download into temp directory and file - Path target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/Updater.jar"); + //download into temp directory and file + String ending = "jar"; + if(osType == OSType.Other.Windows) + { + ending = "exe"; + } + + Path target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/Updater." + ending); download(BUILD_FOLDER + "Updater.jar", target); } @@ -126,10 +135,9 @@ public class Updater } - public void downloadLatestVersion() throws IOException + public void downloadLatestVersion() throws Exception { File currentExecutable = getCurrentExecutableName(); - File currentFolder = currentExecutable.getParentFile(); String currentFileName = currentExecutable.getName(); String fileEnding; @@ -148,22 +156,35 @@ public class Updater PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER))); //download latest updater.jar - downloadLatestUpdater(); + //DEBUG +// downloadLatestUpdater(OS.getType()); //download into temp directory and file + Path target; if(fileEnding.equalsIgnoreCase("exe")) { - Path target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/update_BudgetMaster.exe"); + target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/update_BudgetMaster.exe"); download(BUILD_FOLDER + "BudgetMaster.exe", target); } else { - Path target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/update_BudgetMasterClient.jar"); + target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/update_BudgetMasterClient.jar"); download(BUILD_FOLDER + "BudgetMasterClient.jar", target); } - //TODO start upater with params - //--> move temp jar/exe to currentFolder with currentFileName + String params = target.toString().replace(" ", "%20") + " " + currentExecutable.getAbsolutePath().replace(" ", "%20") + " " + Localization.getString(Strings.APP_NAME); + Logger.debug(params); + + if(OS.getType() == OSType.Windows) + { + NativeLauncher.executeAsAdministrator(Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/Updater.exe").toString(), params); + } + else + { + ProcessBuilder pb = new ProcessBuilder("java", "-jar", Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/Updater.jar").toString(), target.toString().replace(" ", "%20"), currentExecutable.toString().replace(" ", "%20"), Localization.getString(Strings.APP_NAME)); + pb.start(); + } + System.exit(0); } public void download(String url, Path target) throws IOException diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java index c018357fb1b0dc181e0341a93ecec7debe89efe8..b0b1939bf35d461331d72e07786d8591f53d46d4 100644 --- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -138,6 +138,9 @@ public class Strings public static final String INFO_TITLE_UPDATE_AVAILABLE = "info.title.update.available"; public static final String INFO_TEXT_UPDATE_AVAILABLE = "info.text.update.available"; public static final String INFO_TEXT_UPDATE_AVAILABLE_NOW = "info.text.update.available.now"; + public static final String INFO_TITLE_START_AFTER_UPDATE = "info.title.start.after.update"; + public static final String INFO_HEADER_TEXT_START_AFTER_UPDATE = "info.header.text.start.after.update"; + public static final String INFO_TEXT_START_AFTER_UPDATE = "info.text.start.after.update"; //WARNING public static final String WARNING_ENDDATE_BEFORE_STARTDATE = "warning.enddate.before.startdate"; diff --git a/src/de/deadlocker8/budgetmaster/main/Main.java b/src/de/deadlocker8/budgetmaster/main/Main.java index ba19acfd72f8c788be3ebb1929488dd50f60b86e..68dec6f3fa6cff1e32a8786b3672fac7afe95529 100644 --- a/src/de/deadlocker8/budgetmaster/main/Main.java +++ b/src/de/deadlocker8/budgetmaster/main/Main.java @@ -43,7 +43,7 @@ public class Main extends Application Scene scene = new Scene(root, 450, 230); - ((SplashScreenController)loader.getController()).init(stage, icon); + ((SplashScreenController)loader.getController()).init(stage, icon, getParameters().getNamed().get("update") != null); stage.setResizable(false); stage.getIcons().add(icon); diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties index 3a8c9004931bb7fd7056e05ddd957d5315e27273..630f6939883ed33102c5f59405e25d9b95c0311e 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=9 +version.code=3 version.name=1.5.0_alpha version.date=23.08.17 author=Robert Goldmann @@ -135,6 +135,9 @@ info.text.language.changed.restart.later=Sp info.title.update.available=Update verf�gbar info.text.update.available=Ein Update ist verf�gbar.\nNeue Version: {0}\n\n�nderungen:\n{1} info.text.update.available.now=Jetzt updaten +info.title.start.after.update=Update erfolgreich +info.header.text.start.after.update=BudgetMaster wurde erfolgreich auf Version {0} aktualisiert +info.text.start.after.update=Hinweis: Der BudgetMasterServer muss manuell von dir geupdated werden! # WARNING warning.enddate.before.startdate=Das Enddatum darf zeitlich nicht vor dem Startdatum liegen. diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties index eeda9a8d506e74c321a3c593e03b88836e94abb9..16a50847fd91a816d8312d9272dd6059fdf79757 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties @@ -135,6 +135,9 @@ info.text.language.changed.restart.later=Restart Later info.title.update.available=Update available info.text.update.available=An update is available.\nNew version: {0}\n\nChanges:\n{1} info.text.update.available.now=Update Now +info.title.start.after.update=Update successfull +info.header.text.start.after.update=Successfully updated BudgetMaster to version {0} +info.text.start.after.update=Note: You have to update the BudgetMasterServer manually! # WARNING warning.enddate.before.startdate=The end date can not be earlier than the start date. diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java index e6be8ee3043cc89465906dcfa5ba59bea4d15220..6c3a9b295b52b36236233145737fc769ecd88c42 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java @@ -375,9 +375,7 @@ public class Controller Optional<ButtonType> result = alert.showAndWait(); if (result.get() == buttonTypeOne) - { - //TODO download latest updater first - + { Stage modalStage = Helpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_UPDATE), stage, icon); Worker.runLater(() -> { @@ -391,7 +389,7 @@ public class Controller } }); } - catch(IOException ex) + catch(Exception ex) { Logger.error(ex); Platform.runLater(() -> { diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java index 57c1e1190e9859ce75056ae8dd843cf57a41d467..30edabc73c34c988ed7c835dab01d2beb23a42ae 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java @@ -331,7 +331,7 @@ public class SettingsController Scene scene = new Scene(root, 450, 230); - ((SplashScreenController)loader.getController()).init(Main.primaryStage, icon); + ((SplashScreenController)loader.getController()).init(Main.primaryStage, icon, false); Main.primaryStage.setResizable(false); Main.primaryStage.getIcons().add(icon); diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java index 2279f648c1a25c02fd56bcbfd0c9644bafa8574c..810442be8db65abf86b50b66f573b35249dcd4d0 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java @@ -41,7 +41,7 @@ public class SplashScreenController private Settings settings; private boolean isFirstStart; - public void init(Stage stage, Image icon) + public void init(Stage stage, Image icon, boolean isStartingAfterUpdate) { this.stage = stage; this.icon = icon; @@ -61,6 +61,20 @@ public class SplashScreenController } }); + if(isStartingAfterUpdate) + { + Platform.runLater(() -> { + AlertGenerator.showAlert(AlertType.INFORMATION, + Localization.getString(Strings.INFO_TITLE_START_AFTER_UPDATE), + Localization.getString(Strings.INFO_HEADER_TEXT_START_AFTER_UPDATE, Localization.getString(Strings.VERSION_NAME)), + Localization.getString(Strings.INFO_TEXT_START_AFTER_UPDATE), + icon, + stage, + null, + false); + }); + } + settings = FileHelper.loadSettings(); if(settings == null)