diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index a6232e848d8c1e6cbb825eef9520d4b5aa472196..9e2d8e98ef4f194d57f2f44688834281fea19347 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 fa3d66a15807d4d178b1ba4f8a89d09c309ace16..f7d3c16f59e26a6e2b604215d50327333c54c2db 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 0000000000000000000000000000000000000000..91bbbc849f1589ea0bb955e5b65d25397e62922a --- /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 41830f8e77e9468b342a5172ae78f63bd5366cbd..c33fffdfd7df206c1edeff9ee6a14c09e93a8b25 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 998f8b5f6b3e052a89d90f89988963bc682c64e0..6c967a0dc9a2c08bf659f42ad2222a50b4753cd5 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();