From f6ba683d6d148e1b5ac921ff49cea6541a5f8b49 Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Tue, 12 Jul 2016 14:14:42 +0200 Subject: [PATCH] Start adding Update Class --- .../src/de/tobias/playpad/PlayPadMain.java | 1 + .../playpad/{ => update}/PlayPadUpdater.java | 2 +- .../src/de/tobias/playpad/update/Updates.java | 121 ++++++++++++++++++ .../viewcontroller/cell/UpdateCell.java | 2 +- .../option/UpdateTabViewController.java | 4 +- 5 files changed, 127 insertions(+), 3 deletions(-) rename PlayWall/src/de/tobias/playpad/{ => update}/PlayPadUpdater.java (98%) create mode 100644 PlayWall/src/de/tobias/playpad/update/Updates.java diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index a6232e84..9e2d8e98 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -54,6 +54,7 @@ import de.tobias.playpad.settings.ProfileReference; import de.tobias.playpad.tigger.TriggerRegistry; import de.tobias.playpad.trigger.CartTriggerItemConnect; import de.tobias.playpad.trigger.VolumeTriggerItemConnect; +import de.tobias.playpad.update.PlayPadUpdater; import de.tobias.playpad.update.Updatable; import de.tobias.playpad.update.UpdateRegistery; import de.tobias.playpad.view.MapperOverviewViewController; diff --git a/PlayWall/src/de/tobias/playpad/PlayPadUpdater.java b/PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java similarity index 98% rename from PlayWall/src/de/tobias/playpad/PlayPadUpdater.java rename to PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java index fa3d66a1..f7d3c16f 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadUpdater.java +++ b/PlayWall/src/de/tobias/playpad/update/PlayPadUpdater.java @@ -1,4 +1,4 @@ -package de.tobias.playpad; +package de.tobias.playpad.update; import java.io.IOException; import java.net.URISyntaxException; diff --git a/PlayWall/src/de/tobias/playpad/update/Updates.java b/PlayWall/src/de/tobias/playpad/update/Updates.java new file mode 100644 index 00000000..91bbbc84 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/update/Updates.java @@ -0,0 +1,121 @@ +package de.tobias.playpad.update; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import de.tobias.playpad.AppUserInfoStrings; +import de.tobias.utils.application.App; +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.NativeLauncher; +import de.tobias.utils.application.container.PathType; +import de.tobias.utils.util.IOUtils; +import de.tobias.utils.util.OS; +import javafx.application.Platform; + +public class Updates { + + // Ornder im App-Folder wo Updates zwischengespeichert werden sollen. + private static final String CACHE_FOLER = "Updates"; + + // Name der Updater Datei + private static String JAR_NAME = "Updater.jar"; + private static String EXE_NAME = "Updater.exe"; + + /** + * Sollte in einem Extra Thread gemacht werden, da der Updater gedownloaded wird. + * + * @throws IOException + */ + public static void update() throws IOException { + App app = ApplicationUtils.getApplication(); + String downloadPath = app.getPath(PathType.DOWNLOAD, CACHE_FOLER).toString(); + String updateParameter = UpdateRegistery.buildParamaterString(downloadPath); + + boolean successfulStartUpdate = false; + + // Start des Update Prozesses + if (OS.isWindows()) { + successfulStartUpdate = updateWindows(updateParameter, UpdateRegistery.needsAdminPermission()); + } else if (OS.isMacOS()) { + successfulStartUpdate = updateMacOS(updateParameter); + } + + if (successfulStartUpdate) { + // Kill the program + Platform.exit(); + System.exit(0); + } + } + + private static boolean updateWindows(String parameter, boolean needAdminPermission) throws IOException { + Path path = searchForFile(EXE_NAME); + if (path == null) { + App app = ApplicationUtils.getApplication(); + + String updaterURL = app.getInfo().getUserInfo().get(AppUserInfoStrings.UPDATER_PROGRAM) + EXE_NAME; + Path downloadUpdaterFile = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, EXE_NAME); + + downloadUpdater(updaterURL, downloadUpdaterFile); + } + startExeFile(parameter, path, needAdminPermission); + return false; + } + + private static boolean updateMacOS(String parameter) throws IOException { + Path path = searchForFile(JAR_NAME); + if (path == null) { + App app = ApplicationUtils.getApplication(); + + String updaterURL = app.getInfo().getUserInfo().get(AppUserInfoStrings.UPDATER_PROGRAM) + JAR_NAME; + Path downloadUpdaterFile = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, JAR_NAME); + + downloadUpdater(updaterURL, downloadUpdaterFile); + } + startJarFile(parameter, path); + return false; + } + + private static void downloadUpdater(String updaterURL, Path path) throws IOException, MalformedURLException { + URL url = new URL(updaterURL); + InputStream iStr = url.openStream(); + + IOUtils.copy(iStr, path); + + iStr.close(); + } + + private static void startExeFile(String parameter, Path fileExe, boolean needAdminPermission) throws IOException { + if (needAdminPermission) { + NativeLauncher.executeAsAdministrator(fileExe.toAbsolutePath().toString(), parameter); + } else { + ProcessBuilder builder = new ProcessBuilder(fileExe.toAbsolutePath().toString(), parameter); + builder.start(); + } + + System.exit(0); + } + + private static Path searchForFile(String name) { + Path file = Paths.get(name); + Path fileFolder = ApplicationUtils.getApplication().getPath(PathType.DOWNLOAD, name); + + if (Files.exists(file)) { + return file; + } else if (Files.exists(fileFolder)) { + return fileFolder; + } + return null; + } + + private static void startJarFile(String parameter, Path fileJar) throws IOException { + ProcessBuilder builder = new ProcessBuilder("java", "-jar", fileJar.toAbsolutePath().toString(), parameter); + builder.start(); + System.exit(0); + } + +} diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java index 41830f8e..c33fffdf 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/UpdateCell.java @@ -1,7 +1,7 @@ package de.tobias.playpad.viewcontroller.cell; -import de.tobias.playpad.PlayPadUpdater; import de.tobias.playpad.Strings; +import de.tobias.playpad.update.PlayPadUpdater; import de.tobias.playpad.update.Updatable; import de.tobias.utils.util.Localization; import javafx.scene.control.ListCell; diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java index 998f8b5f..6c967a0d 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/UpdateTabViewController.java @@ -53,7 +53,7 @@ import javafx.stage.Window; public class UpdateTabViewController extends SettingsTabViewController { - private static final String DOWNLOAD_FOLDER = "Updates"; + @Deprecated private static final String DOWNLOAD_FOLDER = "Updates"; private static final String UPDATER_JAR = "Updater.jar"; private static final String UPDATER_EXE = "Updater.exe"; @@ -268,6 +268,7 @@ public class UpdateTabViewController extends SettingsTabViewController { oStr.close(); } + @Deprecated private static void startExeFile(String parameter, Path fileExe, boolean admin) throws IOException { if (admin) { NativeLauncher.executeAsAdministrator(fileExe.toAbsolutePath().toString(), parameter); @@ -279,6 +280,7 @@ public class UpdateTabViewController extends SettingsTabViewController { System.exit(0); } + @Deprecated private static void startJarFile(String parameter, Path fileJar) throws IOException { ProcessBuilder builder = new ProcessBuilder("java", "-jar", fileJar.toAbsolutePath().toString(), parameter); builder.start(); -- GitLab