added auto updater
This commit is contained in:
parent
c4fbe48055
commit
e7501013fc
@ -2053,7 +2053,7 @@
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="98919" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="98919" layout-manager="GridLayoutManager" row-count="4" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
@ -2083,7 +2083,7 @@
|
||||
<grid id="80ce0" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
@ -2123,6 +2123,14 @@
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<component id="3ba42" class="javax.swing.JButton" binding="updateButton">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="lang" key="update_now"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="e5ad4" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,7 @@ package de.mc8051.arma3launcher.objects;
|
||||
|
||||
import de.mc8051.arma3launcher.ArmA3Launcher;
|
||||
import de.mc8051.arma3launcher.utils.FileUtils;
|
||||
import de.mc8051.arma3launcher.utils.URLUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -105,12 +106,12 @@ public class ModFile implements AbstractMod {
|
||||
public String getRemoteFile() {
|
||||
String s = ArmA3Launcher.config.getString("sync.url");
|
||||
if (parent == null || parent.isEmpty()) {
|
||||
return s + "/" + encodeToURL(getName());
|
||||
return s + "/" + URLUtils.encodeToURL(getName());
|
||||
}
|
||||
|
||||
s += "/" + encodeToURL(parent);
|
||||
s += "/" + URLUtils.encodeToURL(parent);
|
||||
for (String seg : getPath()) {
|
||||
s += "/" + encodeToURL(seg);
|
||||
s += "/" + URLUtils.encodeToURL(seg);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@ -118,13 +119,4 @@ public class ModFile implements AbstractMod {
|
||||
public String getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
private String encodeToURL(String s) {
|
||||
try {
|
||||
return URLEncoder.encode(s, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("@", "%40");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
@ -2,16 +2,75 @@ package de.mc8051.arma3launcher.repo;
|
||||
|
||||
import de.mc8051.arma3launcher.ArmA3Launcher;
|
||||
import de.mc8051.arma3launcher.utils.Callback;
|
||||
import de.mc8051.arma3launcher.utils.URLUtils;
|
||||
|
||||
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.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Created by gurkengewuerz.de on 29.03.2020.
|
||||
*/
|
||||
public class Updater {
|
||||
|
||||
private boolean canPatch = false;
|
||||
private File patcherFile = new File(ArmA3Launcher.APPLICATION_PATH + File.separator + "patcher.jar");
|
||||
private File me;
|
||||
private long lastCheck = 0;
|
||||
private Version newestVersion = null;
|
||||
private String newFile = "";
|
||||
|
||||
public void update() {
|
||||
public Updater() {
|
||||
try {
|
||||
me = new File(Updater.class.getProtectionDomain().getCodeSource().getLocation().toURI());
|
||||
} catch (URISyntaxException ignored) {}
|
||||
}
|
||||
|
||||
public void update() throws IOException {
|
||||
if (!me.exists() || !me.isFile()) throw new IOException("Own jar not exists. Are you running in dev?");
|
||||
if (!patcherFile.exists()) throw new IOException("Patcher does not exists");
|
||||
Runtime.getRuntime().exec(
|
||||
"\"" + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java\"" +
|
||||
" -jar \"" + patcherFile.getAbsolutePath() + "\"" +
|
||||
" \"" + ArmA3Launcher.config.getString("sync.url") + "/.sync/" + URLUtils.encodeToURL(newFile) + "\"" +
|
||||
" \"" + me.getAbsolutePath() + "\""
|
||||
);
|
||||
}
|
||||
|
||||
public void downloadPatcher() {
|
||||
if(patcherFile.exists()) {
|
||||
Logger.getLogger(getClass().getName()).log(Level.INFO, "Patcher already exists. Skip.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(new URI(ArmA3Launcher.config.getString("sync.url") + "/.sync/patcher.jar"))
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
Path tempFile = Files.createTempFile("patcher", "jar");
|
||||
|
||||
client.sendAsync(request, HttpResponse.BodyHandlers.ofFile(tempFile)).thenAccept((r) -> {
|
||||
if (r.statusCode() != 200) return;
|
||||
try {
|
||||
Files.copy(tempFile, patcherFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||
Logger.getLogger(getClass().getName()).log(Level.INFO, "Patcher copied to " + patcherFile.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Copy patcher failed", e);
|
||||
}
|
||||
});
|
||||
} catch (IOException | URISyntaxException e) {
|
||||
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void getNewestVersion(Callback.HttpCallback callback) {
|
||||
@ -20,13 +79,26 @@ public class Updater {
|
||||
|
||||
public void needUpdate(Callback.NeedUpdateCallback callback) {
|
||||
final Version currentVersion = new Version(ArmA3Launcher.VERSION);
|
||||
|
||||
if(lastCheck != 0 && System.currentTimeMillis() - lastCheck < 2 * 60 * 1000) {
|
||||
callback.response(currentVersion.compareTo(newestVersion) < 0, newestVersion);
|
||||
lastCheck = System.currentTimeMillis();
|
||||
return;
|
||||
}
|
||||
|
||||
getNewestVersion(new Callback.HttpCallback() {
|
||||
@Override
|
||||
public void response(Response r) {
|
||||
if (!r.isSuccessful()) callback.response(false, null);
|
||||
final String[] split = r.getBody().split(":");
|
||||
final Version newestVersion = new Version(r.getBody().split(":")[0]);
|
||||
callback.response((currentVersion.compareTo(newestVersion) < 0), newestVersion);
|
||||
newestVersion = new Version(split[0]);
|
||||
newFile = split[1].replace("\n", "").replace("\r","").trim();
|
||||
|
||||
final boolean needUpdate = currentVersion.compareTo(newestVersion) < 0;
|
||||
if(needUpdate) downloadPatcher();
|
||||
lastCheck = System.currentTimeMillis();
|
||||
|
||||
callback.response(needUpdate, newestVersion);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package de.mc8051.arma3launcher.utils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Created by gurkengewuerz.de on 29.03.2020.
|
||||
*/
|
||||
public class URLUtils {
|
||||
|
||||
public static String encodeToURL(String s) {
|
||||
try {
|
||||
return URLEncoder.encode(s, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("@", "%40");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Logger.getLogger(URLUtils.class.getName()).log(Level.SEVERE, null, e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
@ -101,7 +101,7 @@ follow_on_twitter=Folgt und auf Twitter
|
||||
star_on_github="Star us" auf GitHub
|
||||
client_up_to_date=Client ist aktuell
|
||||
client_outdated=Neue Client Version verfügbar
|
||||
please_update=Bitte führe ein Update durch
|
||||
please_update=Bitte führe ein Update durch. Gehe in den Tab "Über" und führe das Update durch.
|
||||
developer_page=Entwickler-Seite
|
||||
project_page=Projektseite
|
||||
fast_check=Schnelle Prüfung
|
||||
@ -111,4 +111,5 @@ presets_note=Vorlagen k
|
||||
clone_preset=Vorlage klonen
|
||||
new_modset_name=Modsset Name
|
||||
modset_exists_msg=Bitte wähle ein anderen Namen für deine Vorlage.
|
||||
modset_exists=Preset mit diesen Namen existiert bereits
|
||||
modset_exists=Preset mit diesen Namen existiert bereits
|
||||
update_now=Jetzt updaten!
|
@ -99,7 +99,7 @@ follow_on_twitter=Follow us on Twitter
|
||||
star_on_github=Star us on GitHub
|
||||
client_up_to_date=Client is up to date
|
||||
client_outdated=New client version available
|
||||
please_update=Please do an update
|
||||
please_update=Please do an update. Go to the Tab "About" and run the update.
|
||||
developer_page=Developer page
|
||||
project_page=Project page
|
||||
new_modset_name=Modsset name
|
||||
|
0
linux/.sync/arma3launcher.jar
Normal file
0
linux/.sync/arma3launcher.jar
Normal file
0
linux/.sync/patcher.jar
Normal file
0
linux/.sync/patcher.jar
Normal file
1
linux/.sync/version.txt
Normal file
1
linux/.sync/version.txt
Normal file
@ -0,0 +1 @@
|
||||
0.1.1000:arma3launcher.jar
|
@ -25,6 +25,7 @@
|
||||
package de.mc8051.arma3launcher;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Created by gurkengewuerz.de on 29.03.2020.
|
||||
@ -32,4 +33,59 @@ import javax.swing.*;
|
||||
public class Patcher {
|
||||
public JPanel mainpanel;
|
||||
public JProgressBar progressBar1;
|
||||
|
||||
{
|
||||
// GUI initializer generated by IntelliJ IDEA GUI Designer
|
||||
// >>> IMPORTANT!! <<<
|
||||
// DO NOT EDIT OR ADD ANY CODE HERE!
|
||||
$$$setupUI$$$();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method generated by IntelliJ IDEA GUI Designer
|
||||
* >>> IMPORTANT!! <<<
|
||||
* DO NOT edit this method OR call it in your code!
|
||||
*
|
||||
* @noinspection ALL
|
||||
*/
|
||||
private void $$$setupUI$$$() {
|
||||
mainpanel = new JPanel();
|
||||
mainpanel.setLayout(new BorderLayout(0, 0));
|
||||
progressBar1 = new JProgressBar();
|
||||
progressBar1.setMinimumSize(new Dimension(10, 4));
|
||||
progressBar1.setString("");
|
||||
progressBar1.setValue(0);
|
||||
mainpanel.add(progressBar1, BorderLayout.CENTER);
|
||||
final JLabel label1 = new JLabel();
|
||||
Font label1Font = this.$$$getFont$$$(null, Font.BOLD, 16, label1.getFont());
|
||||
if (label1Font != null) label1.setFont(label1Font);
|
||||
label1.setText("Launcher Updater");
|
||||
mainpanel.add(label1, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection ALL
|
||||
*/
|
||||
private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) {
|
||||
if (currentFont == null) return null;
|
||||
String resultName;
|
||||
if (fontName == null) {
|
||||
resultName = currentFont.getName();
|
||||
} else {
|
||||
Font testFont = new Font(fontName, Font.PLAIN, 10);
|
||||
if (testFont.canDisplay('a') && testFont.canDisplay('1')) {
|
||||
resultName = fontName;
|
||||
} else {
|
||||
resultName = currentFont.getName();
|
||||
}
|
||||
}
|
||||
return new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection ALL
|
||||
*/
|
||||
public JComponent $$$getRootComponent$$$() {
|
||||
return mainpanel;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user