diff --git a/.gitignore b/.gitignore
index 19c2325..d39e785 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,6 @@
.idea/
out/
META-INF/
-target/
\ No newline at end of file
+target/
+gui/target/
+patcher/target/
\ No newline at end of file
diff --git a/gui/pom.xml b/gui/pom.xml
new file mode 100644
index 0000000..789d18a
--- /dev/null
+++ b/gui/pom.xml
@@ -0,0 +1,129 @@
+
+
+ 4.0.0
+
+
+ de.mc8051
+ arma3launcher
+ 1.0-SNAPSHOT
+
+
+ gui
+ 0.1.1000
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
+
+
+ org.json
+ json
+ 20190722
+
+
+ com.typesafe
+ config
+ 1.4.0
+
+
+ com.formdev
+ flatlaf
+ 0.28
+
+
+ com.github.RalleYTN
+ SimpleRegistry
+ java8-7949ac7f06-1
+
+
+ org.ini4j
+ ini4j
+ 0.5.4
+
+
+ com.github.Gurkengewuerz
+ zsyncer
+ 1de0d3f651
+
+
+ com.jgoodies
+ jgoodies-forms
+ 1.9.0
+
+
+ com.intellij
+ forms_rt
+ 7.0.3
+
+
+
+
+
+
+ src/main/resources
+ true
+
+ **/project.properties
+
+
+
+
+ src/main/resources
+ false
+
+ **/*
+
+
+
+ src/main/resources/icons
+ false
+
+ **/*
+
+
+
+
+
+ maven-compiler-plugin
+ 3.5.1
+
+
+ 12
+
+
+
+ maven-assembly-plugin
+ 2.6
+
+ false
+ ${parent.artifactId}-${project.artifactId}
+
+
+ jar-with-dependencies
+
+
+
+
+ ${project.groupId}.${parent.artifactId}.ArmA3Launcher
+
+
+
+
+
+ assamble
+
+ single
+
+ package
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java b/gui/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java
rename to gui/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java
diff --git a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form b/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/LauncherGUI.form
rename to gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form
diff --git a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java b/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java
similarity index 99%
rename from src/main/java/de/mc8051/arma3launcher/LauncherGUI.java
rename to gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java
index fb8d11c..35f15f5 100644
--- a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java
+++ b/gui/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java
@@ -1,5 +1,6 @@
package de.mc8051.arma3launcher;
+import com.sun.management.OperatingSystemMXBean;
import de.mc8051.arma3launcher.interfaces.Observer;
import de.mc8051.arma3launcher.model.JCheckBoxTree;
import de.mc8051.arma3launcher.model.ModListRenderer;
@@ -737,7 +738,7 @@ public class LauncherGUI implements Observer {
// -------------------------------- SPINNER --------------------------------
- com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
+ OperatingSystemMXBean mxbean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
int memorySize = (int) (mxbean.getTotalPhysicalMemorySize() / 1024);
initSpinner(settingsMaxMemSpinner, "MaxMem", Parameter.ParameterType.ARMA, -1, memorySize);
diff --git a/src/main/java/de/mc8051/arma3launcher/Parameter.java b/gui/src/main/java/de/mc8051/arma3launcher/Parameter.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/Parameter.java
rename to gui/src/main/java/de/mc8051/arma3launcher/Parameter.java
diff --git a/src/main/java/de/mc8051/arma3launcher/SettingsHandler.java b/gui/src/main/java/de/mc8051/arma3launcher/SettingsHandler.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/SettingsHandler.java
rename to gui/src/main/java/de/mc8051/arma3launcher/SettingsHandler.java
diff --git a/src/main/java/de/mc8051/arma3launcher/SteamUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/SteamUtils.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/SteamUtils.java
rename to gui/src/main/java/de/mc8051/arma3launcher/SteamUtils.java
diff --git a/src/main/java/de/mc8051/arma3launcher/interfaces/Observable.java b/gui/src/main/java/de/mc8051/arma3launcher/interfaces/Observable.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/interfaces/Observable.java
rename to gui/src/main/java/de/mc8051/arma3launcher/interfaces/Observable.java
diff --git a/src/main/java/de/mc8051/arma3launcher/interfaces/Observer.java b/gui/src/main/java/de/mc8051/arma3launcher/interfaces/Observer.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/interfaces/Observer.java
rename to gui/src/main/java/de/mc8051/arma3launcher/interfaces/Observer.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/JCheckBoxTree.java b/gui/src/main/java/de/mc8051/arma3launcher/model/JCheckBoxTree.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/JCheckBoxTree.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/JCheckBoxTree.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/ModListRenderer.java b/gui/src/main/java/de/mc8051/arma3launcher/model/ModListRenderer.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/ModListRenderer.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/ModListRenderer.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/MultiSelectModel.java b/gui/src/main/java/de/mc8051/arma3launcher/model/MultiSelectModel.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/MultiSelectModel.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/MultiSelectModel.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/PresetListRenderer.java b/gui/src/main/java/de/mc8051/arma3launcher/model/PresetListRenderer.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/PresetListRenderer.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/PresetListRenderer.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/PresetTableModel.java b/gui/src/main/java/de/mc8051/arma3launcher/model/PresetTableModel.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/PresetTableModel.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/PresetTableModel.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/RepositoryTreeNode.java b/gui/src/main/java/de/mc8051/arma3launcher/model/RepositoryTreeNode.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/RepositoryTreeNode.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/RepositoryTreeNode.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/ServerTableModel.java b/gui/src/main/java/de/mc8051/arma3launcher/model/ServerTableModel.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/ServerTableModel.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/ServerTableModel.java
diff --git a/src/main/java/de/mc8051/arma3launcher/model/TabbedPaneUI.java b/gui/src/main/java/de/mc8051/arma3launcher/model/TabbedPaneUI.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/model/TabbedPaneUI.java
rename to gui/src/main/java/de/mc8051/arma3launcher/model/TabbedPaneUI.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/AbstractMod.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/AbstractMod.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/AbstractMod.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/AbstractMod.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/Changelog.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/Changelog.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/Changelog.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/Changelog.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/Mod.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/Mod.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/Mod.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/Mod.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/ModFile.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/Modset.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/Modset.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/Modset.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/Modset.java
diff --git a/src/main/java/de/mc8051/arma3launcher/objects/Server.java b/gui/src/main/java/de/mc8051/arma3launcher/objects/Server.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/objects/Server.java
rename to gui/src/main/java/de/mc8051/arma3launcher/objects/Server.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/DownloadStatus.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/DownloadStatus.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/DownloadStatus.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/DownloadStatus.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/FileChecker.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/FileChecker.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/FileChecker.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/FileChecker.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Response.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/Response.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/Response.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/Response.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/SyncList.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/SyncList.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/SyncList.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/SyncList.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/SyncListener.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/SyncListener.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/SyncListener.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/SyncListener.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/SyncObserver.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/SyncObserver.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/SyncObserver.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/SyncObserver.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/Syncer.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Updater.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/Updater.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/Updater.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/Updater.java
diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Version.java b/gui/src/main/java/de/mc8051/arma3launcher/repo/Version.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/repo/Version.java
rename to gui/src/main/java/de/mc8051/arma3launcher/repo/Version.java
diff --git a/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java b/gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java
rename to gui/src/main/java/de/mc8051/arma3launcher/steam/SteamTimer.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/Callback.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/Callback.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/Callback.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/Callback.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/Humanize.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/ImageUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/ImageUtils.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/ImageUtils.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/ImageUtils.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/LangUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/LangUtils.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/LangUtils.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/LangUtils.java
diff --git a/src/main/java/de/mc8051/arma3launcher/utils/TaskBarUtils.java b/gui/src/main/java/de/mc8051/arma3launcher/utils/TaskBarUtils.java
similarity index 100%
rename from src/main/java/de/mc8051/arma3launcher/utils/TaskBarUtils.java
rename to gui/src/main/java/de/mc8051/arma3launcher/utils/TaskBarUtils.java
diff --git a/src/main/resources/arma3launcher.json b/gui/src/main/resources/arma3launcher.json
similarity index 100%
rename from src/main/resources/arma3launcher.json
rename to gui/src/main/resources/arma3launcher.json
diff --git a/src/main/resources/disclaimer.html b/gui/src/main/resources/disclaimer.html
similarity index 100%
rename from src/main/resources/disclaimer.html
rename to gui/src/main/resources/disclaimer.html
diff --git a/src/main/resources/icons/changelog_16.png b/gui/src/main/resources/icons/changelog_16.png
similarity index 100%
rename from src/main/resources/icons/changelog_16.png
rename to gui/src/main/resources/icons/changelog_16.png
diff --git a/src/main/resources/icons/download_16.png b/gui/src/main/resources/icons/download_16.png
similarity index 100%
rename from src/main/resources/icons/download_16.png
rename to gui/src/main/resources/icons/download_16.png
diff --git a/src/main/resources/icons/github_32.png b/gui/src/main/resources/icons/github_32.png
similarity index 100%
rename from src/main/resources/icons/github_32.png
rename to gui/src/main/resources/icons/github_32.png
diff --git a/src/main/resources/icons/logo_256.png b/gui/src/main/resources/icons/logo_256.png
similarity index 100%
rename from src/main/resources/icons/logo_256.png
rename to gui/src/main/resources/icons/logo_256.png
diff --git a/src/main/resources/icons/logo_32.png b/gui/src/main/resources/icons/logo_32.png
similarity index 100%
rename from src/main/resources/icons/logo_32.png
rename to gui/src/main/resources/icons/logo_32.png
diff --git a/src/main/resources/icons/play_16.png b/gui/src/main/resources/icons/play_16.png
similarity index 100%
rename from src/main/resources/icons/play_16.png
rename to gui/src/main/resources/icons/play_16.png
diff --git a/src/main/resources/icons/preset_16.png b/gui/src/main/resources/icons/preset_16.png
similarity index 100%
rename from src/main/resources/icons/preset_16.png
rename to gui/src/main/resources/icons/preset_16.png
diff --git a/src/main/resources/icons/settings_16.png b/gui/src/main/resources/icons/settings_16.png
similarity index 100%
rename from src/main/resources/icons/settings_16.png
rename to gui/src/main/resources/icons/settings_16.png
diff --git a/src/main/resources/icons/twitter_32.png b/gui/src/main/resources/icons/twitter_32.png
similarity index 100%
rename from src/main/resources/icons/twitter_32.png
rename to gui/src/main/resources/icons/twitter_32.png
diff --git a/src/main/resources/lang_de_DE.properties b/gui/src/main/resources/lang_de_DE.properties
similarity index 100%
rename from src/main/resources/lang_de_DE.properties
rename to gui/src/main/resources/lang_de_DE.properties
diff --git a/src/main/resources/lang_en_US.properties b/gui/src/main/resources/lang_en_US.properties
similarity index 100%
rename from src/main/resources/lang_en_US.properties
rename to gui/src/main/resources/lang_en_US.properties
diff --git a/src/main/resources/project.properties b/gui/src/main/resources/project.properties
similarity index 100%
rename from src/main/resources/project.properties
rename to gui/src/main/resources/project.properties
diff --git a/patcher/src/main/java/de/mc8051/arma3launcher/Arma3LauncherPatcher.java b/patcher/src/main/java/de/mc8051/arma3launcher/Arma3LauncherPatcher.java
new file mode 100644
index 0000000..c5bfcfa
--- /dev/null
+++ b/patcher/src/main/java/de/mc8051/arma3launcher/Arma3LauncherPatcher.java
@@ -0,0 +1,197 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-2020 Niklas Schütrumpf (Gurkengewuerz)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package de.mc8051.arma3launcher;
+
+import javax.imageio.ImageIO;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.List;
+import java.util.concurrent.CompletionStage;
+import java.util.concurrent.Flow;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Created by gurkengewuerz.de on 29.03.2020.
+ */
+public class Arma3LauncherPatcher {
+
+ public static void main(String[] args) {
+ if (args.length != 2) {
+ Logger.getLogger(Arma3LauncherPatcher.class.getName()).log(Level.SEVERE, " ");
+ return;
+ }
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ignored) {
+ }
+
+ JFrame frame = new JFrame("Auto Patcher");
+ Patcher patcher = new Patcher();
+ frame.setContentPane(patcher.mainpanel);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ frame.setMinimumSize(new Dimension(500, 100));
+ frame.setResizable(false);
+
+ frame.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+
+ frame.dispose();
+ }
+ });
+
+ frame.pack();
+ frame.setIconImage(createIcon());
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+
+ HttpClient client = HttpClient.newHttpClient();
+ try {
+ HttpRequest request = HttpRequest.newBuilder()
+ .uri(new URI(args[0]))
+ .GET()
+ .build();
+
+ File f = new File(args[1]);
+
+ String fileName = Paths.get(f.getPath()).getFileName().toString();
+ String fileExt = "";
+ if (fileName.indexOf(".") > 0) {
+ fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
+ fileName = fileName.substring(0, fileName.lastIndexOf("."));
+ }
+
+ Path tempFile = Files.createTempFile(fileName, fileExt);
+
+ HttpResponse response = client.send(request, responseInfo -> {
+ HttpResponse.BodyHandler bodyHandler = HttpResponse.BodyHandlers.ofFile(tempFile);
+ final String s = responseInfo.headers().firstValue("content-length").get();
+ long contentSize = Long.parseLong(s);
+ return new DownloadObserver(bodyHandler.apply(responseInfo), contentSize, patcher.progressBar1);
+ });
+
+ if (response.statusCode() != 200)
+ throw new IllegalStateException("Download file is invalid. Got response code " + response.statusCode());
+
+ Files.copy(tempFile, f.toPath(), StandardCopyOption.REPLACE_EXISTING);
+
+ run(f.getAbsolutePath());
+
+ JOptionPane.showMessageDialog(
+ frame,
+ "Launcher has been successfully updated.",
+ "Update", JOptionPane.INFORMATION_MESSAGE);
+ System.exit(0);
+ } catch (IOException | URISyntaxException | InterruptedException | IllegalStateException e) {
+ Logger.getLogger(Arma3LauncherPatcher.class.getName()).log(Level.SEVERE, null, e);
+ JOptionPane.showMessageDialog(
+ null,
+ "An error occured.\n" + e.getMessage() + "\nUpdate process aborded.",
+ "Update failed", JOptionPane.ERROR_MESSAGE);
+ System.exit(1);
+ }
+ }
+
+ public static void run(String path) {
+ try {
+ Runtime.getRuntime().exec("\"" + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java\" -jar \"" + path + "\"");
+ } catch (IOException ignored) {
+ }
+ }
+
+ static BufferedImage createIcon() {
+ try {
+ return ImageIO.read(Arma3LauncherPatcher.class.getResourceAsStream("/icons/logo_32.png"));
+ } catch (IOException e) {
+ Logger.getLogger(Arma3LauncherPatcher.class.getName()).log(Level.SEVERE, null, e);
+ return null;
+ }
+ }
+
+ private static class DownloadObserver implements HttpResponse.BodySubscriber {
+
+ private int counter = 0;
+ private long total = 0L;
+ private long contentSize = 0L;
+ private HttpResponse.BodySubscriber subscriber;
+ private JProgressBar progressBar;
+
+ public DownloadObserver(HttpResponse.BodySubscriber subscriber, long contentSize, JProgressBar progressBar) {
+ this.subscriber = subscriber;
+ this.contentSize = contentSize;
+ this.progressBar = progressBar;
+ }
+
+ @Override
+ public void onSubscribe(Flow.Subscription subscription) {
+ subscriber.onSubscribe(subscription);
+ }
+
+ @Override
+ public void onNext(List item) {
+ item.forEach((size) -> {
+ total += size.remaining();
+ });
+
+ int progress = (int) (((double) total / (double) contentSize) * 100);
+ SwingUtilities.invokeLater(() -> progressBar.setValue(progress));
+
+ counter++;
+ subscriber.onNext(item);
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ subscriber.onError(throwable);
+ }
+
+ @Override
+ public void onComplete() {
+ subscriber.onComplete();
+ }
+
+ @Override
+ public CompletionStage getBody() {
+ return subscriber.getBody();
+ }
+ }
+}
diff --git a/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.form b/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.form
new file mode 100644
index 0000000..3763fc0
--- /dev/null
+++ b/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.form
@@ -0,0 +1,27 @@
+
+
diff --git a/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.java b/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.java
new file mode 100644
index 0000000..125a519
--- /dev/null
+++ b/patcher/src/main/java/de/mc8051/arma3launcher/Patcher.java
@@ -0,0 +1,35 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-2020 Niklas Schütrumpf (Gurkengewuerz)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package de.mc8051.arma3launcher;
+
+import javax.swing.*;
+
+/**
+ * Created by gurkengewuerz.de on 29.03.2020.
+ */
+public class Patcher {
+ public JPanel mainpanel;
+ public JProgressBar progressBar1;
+}
diff --git a/patcher/src/main/resources/icons/logo_32.png b/patcher/src/main/resources/icons/logo_32.png
new file mode 100644
index 0000000..446dca9
Binary files /dev/null and b/patcher/src/main/resources/icons/logo_32.png differ
diff --git a/pom.xml b/pom.xml
index babbbbf..21b6e4c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,114 +6,11 @@
de.mc8051
arma3launcher
- 0.1.1000
+ 1.0-SNAPSHOT
+ pom
-
-
- jitpack.io
- https://jitpack.io
-
-
-
-
-
- org.json
- json
- 20190722
-
-
- com.typesafe
- config
- 1.4.0
-
-
- com.formdev
- flatlaf
- 0.28
-
-
- com.github.RalleYTN
- SimpleRegistry
- java8-7949ac7f06-1
-
-
- org.ini4j
- ini4j
- 0.5.4
-
-
- com.github.Gurkengewuerz
- zsyncer
- 1de0d3f651
-
-
- com.jgoodies
- jgoodies-forms
- 1.9.0
-
-
-
-
-
-
- src/main/resources
- true
-
- **/project.properties
-
-
-
-
- src/main/resources
- false
-
- **/*
-
-
-
- src/main/resources/icons
- false
-
- **/*
-
-
-
-
-
- maven-compiler-plugin
- 3.5.1
-
-
- 12
-
-
-
- maven-assembly-plugin
- 2.6
-
- false
- ${project.artifactId}
-
-
- jar-with-dependencies
-
-
-
-
- ${project.groupId}.${project.artifactId}.ArmA3Launcher
-
-
-
-
-
- assamble
-
- single
-
- package
-
-
-
-
-
+
+ gui
+ patcher
+
\ No newline at end of file