From 9c0b6bcf83f5c3b4e580a59d6d0317a7897951c2 Mon Sep 17 00:00:00 2001 From: Gurkengewuerz Date: Fri, 27 Mar 2020 14:40:44 +0100 Subject: [PATCH] remove some dependencies and write own utils --- pom.xml | 41 ++++++----- .../mc8051/arma3launcher/ArmA3Launcher.java | 7 +- .../de/mc8051/arma3launcher/LauncherGUI.form | 4 +- .../de/mc8051/arma3launcher/LauncherGUI.java | 6 +- .../mc8051/arma3launcher/objects/ModFile.java | 29 ++------ .../arma3launcher/repo/RepositoryManger.java | 42 ++++++++---- .../mc8051/arma3launcher/repo/Response.java | 34 ++++++++++ .../de/mc8051/arma3launcher/repo/Syncer.java | 2 +- .../mc8051/arma3launcher/utils/Callback.java | 2 +- .../mc8051/arma3launcher/utils/FileUtils.java | 68 +++++++++++++++++++ .../mc8051/arma3launcher/utils/Humanize.java | 38 +++++++++++ src/main/resources/arma3launcher.json | 1 - src/main/resources/project.properties | 2 + 13 files changed, 211 insertions(+), 65 deletions(-) create mode 100644 src/main/java/de/mc8051/arma3launcher/repo/Response.java create mode 100644 src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java create mode 100644 src/main/java/de/mc8051/arma3launcher/utils/Humanize.java create mode 100644 src/main/resources/project.properties diff --git a/pom.xml b/pom.xml index d9e89d3..2b1aefa 100644 --- a/pom.xml +++ b/pom.xml @@ -26,16 +26,6 @@ config 1.4.0 - - commons-io - commons-io - 2.6 - - - commons-codec - commons-codec - 1.14 - com.formdev flatlaf @@ -51,31 +41,38 @@ ini4j 0.5.4 - - com.github.mfornos - humanize-slim - 1.2.2 - com.github.Gurkengewuerz zsyncer locale_fix-2f7565d392-1 - - com.squareup.okhttp3 - okhttp - 4.4.1 - + + + src/main/resources + true + + **/project.properties + + + + + src/main/resources + false + + **/* + + + maven-compiler-plugin 3.5.1 - 1.8 - 1.8 + 12 + 12 diff --git a/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java b/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java index b0b327f..be6430d 100644 --- a/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java +++ b/src/main/java/de/mc8051/arma3launcher/ArmA3Launcher.java @@ -13,6 +13,7 @@ import java.awt.event.WindowEvent; import java.io.File; import java.util.Arrays; import java.util.Locale; +import java.util.Properties; import java.util.Timer; import java.util.logging.Level; import java.util.logging.Logger; @@ -35,7 +36,11 @@ public class ArmA3Launcher { config = ConfigFactory.load("arma3launcher"); CLIENT_NAME = config.getString("name"); - VERSION = config.getString("version"); + + final Properties properties = new Properties(); + properties.load(ArmA3Launcher.class.getClassLoader().getResourceAsStream("project.properties")); + + VERSION = properties.getProperty("version"); APPLICATION_PATH = getAppData() + CLIENT_NAME; diff --git a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form b/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form index d061ed7..25f042d 100644 --- a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form +++ b/src/main/java/de/mc8051/arma3launcher/LauncherGUI.form @@ -8,7 +8,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java b/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java index 06b2768..18fe726 100644 --- a/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java +++ b/src/main/java/de/mc8051/arma3launcher/LauncherGUI.java @@ -18,8 +18,8 @@ import de.mc8051.arma3launcher.repo.SyncList; import de.mc8051.arma3launcher.repo.Syncer; import de.mc8051.arma3launcher.steam.SteamTimer; import de.mc8051.arma3launcher.utils.Callback; +import de.mc8051.arma3launcher.utils.Humanize; import de.mc8051.arma3launcher.utils.LangUtils; -import humanize.Humanize; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -134,6 +134,7 @@ public class LauncherGUI implements Observer { private JLabel syncFileCountLabel; public JLabel syncDownloadedLabel; public JLabel syncDownloadSpeedLabel; + private JSplitPane splitView; private JCheckBoxTree repoTree; private FileChecker fileChecker; @@ -317,6 +318,7 @@ public class LauncherGUI implements Observer { syncDownloadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { + if(lastSynclist == null) return; new Thread(() -> syncer.sync(lastSynclist.clone())).start(); } }); @@ -365,6 +367,7 @@ public class LauncherGUI implements Observer { armaStatus.setText(LangUtils.getInstance().getString("closed")); armaStatus.setForeground(Color.red); } + splitView.setDividerLocation(-1); } public void techCheck() { @@ -629,6 +632,7 @@ public class LauncherGUI implements Observer { // Select Mod if in modset.Mods // Custom Checkbox Render // Wenn modset.type == Server alle Checkboxen deaktivieren! + // Show hint that server modsets cant be edited } public void updateRepoTree() { diff --git a/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java b/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java index c5b357c..43338f5 100644 --- a/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java +++ b/src/main/java/de/mc8051/arma3launcher/objects/ModFile.java @@ -1,15 +1,15 @@ package de.mc8051.arma3launcher.objects; import de.mc8051.arma3launcher.ArmA3Launcher; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.io.FilenameUtils; +import de.mc8051.arma3launcher.utils.FileUtils; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collections; import java.util.logging.Level; @@ -24,7 +24,6 @@ public class ModFile implements AbstractMod { private long size; private String folder; private String filename; - private String extension; private String modfileString; private String sha1sum; private String parent; @@ -36,9 +35,7 @@ public class ModFile implements AbstractMod { // size: size as in metafile on server this.f = f; this.size = size; - this.folder = FilenameUtils.getPath(modfile); - this.filename = FilenameUtils.getBaseName(modfile); - this.extension = FilenameUtils.getExtension(modfile); + this.filename = Paths.get(f.getPath()).getFileName().toString(); this.modfileString = modfile; this.sha1sum = sha1sum.toLowerCase(); this.parent = parent; @@ -52,18 +49,6 @@ public class ModFile implements AbstractMod { return size; } - public String getReletaivePath() { - return folder; - } - - public String getFilename() { - return filename; - } - - public String getExtension() { - return extension; - } - public ArrayList getPath() { ArrayList list = new ArrayList<>(); File relativePath = new File("./" + modfileString); @@ -87,7 +72,7 @@ public class ModFile implements AbstractMod { } public String getName() { - return filename + (extension.equals("") ? "" : "." + extension); + return filename; } public String getModfileString() { @@ -105,9 +90,9 @@ public class ModFile implements AbstractMod { public String getLocalGeneratedSHA1Sum() { try { if (localGeneratedSHA1sum.isEmpty() && exists()) { - localGeneratedSHA1sum = DigestUtils.sha1Hex(new FileInputStream(f.getAbsolutePath())).toLowerCase(); + localGeneratedSHA1sum = FileUtils.sha1Hex(f); } - } catch (IOException e) { + } catch (IOException | NoSuchAlgorithmException e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e); } return localGeneratedSHA1sum; diff --git a/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java b/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java index 51f7240..df3a077 100644 --- a/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java +++ b/src/main/java/de/mc8051/arma3launcher/repo/RepositoryManger.java @@ -9,14 +9,17 @@ import de.mc8051.arma3launcher.objects.ModFile; import de.mc8051.arma3launcher.objects.Modset; import de.mc8051.arma3launcher.objects.Server; import de.mc8051.arma3launcher.utils.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; import org.json.JSONArray; import org.json.JSONObject; 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.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -24,6 +27,8 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import static java.time.temporal.ChronoUnit.SECONDS; + /** * Created by gurkengewuerz.de on 24.03.2020. */ @@ -36,28 +41,37 @@ public class RepositoryManger implements Observable { private static HashMap statusMap = new HashMap<>(); private List observerList = new ArrayList<>(); - private OkHttpClient client = new OkHttpClient(); private RepositoryManger() { statusMap.put(Type.METADATA, DownloadStatus.FINNISHED); statusMap.put(Type.MODSET, DownloadStatus.FINNISHED); } - private void getAsync(String url, Callback.HttpCallback callback) { + private void getAsync(String urlS, Callback.HttpCallback callback) { new Thread(() -> { try { - Request request = new Request.Builder() - .url(url) + URI url = new URI(urlS); + + HttpRequest request = HttpRequest.newBuilder() + .uri(url) + .GET() + .headers("Content-Type", "text/plain;charset=UTF-8") + .timeout(Duration.of(3, SECONDS)) .build(); - Response r = client.newCall(request).execute(); + HttpResponse response = HttpClient.newBuilder() + .followRedirects(HttpClient.Redirect.ALWAYS) + .build().send(request, HttpResponse.BodyHandlers.ofString()); + + Response r = new Response(response); + if (!r.isSuccessful()) { - Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Cant open " + r.request().url().toString() + " code " + r.code()); + Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Cant open " + r.request().uri() + " code " + r.getStatusCode()); return; } callback.response(r); - } catch (IOException e) { + } catch (IOException | URISyntaxException | InterruptedException e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e); callback.response(null); } @@ -77,7 +91,7 @@ public class RepositoryManger implements Observable { } try { - JSONObject jsonObject = new JSONObject(r.body().string()); + JSONObject jsonObject = new JSONObject(r.getBody()); if (jsonObject.has("modsets")) { Modset.MODSET_LIST.clear(); @@ -104,7 +118,7 @@ public class RepositoryManger implements Observable { statusMap.replace(Type.METADATA, DownloadStatus.FINNISHED); RepositoryManger.getInstance().notifyObservers(Type.METADATA.toString()); - } catch (IOException | NullPointerException e) { + } catch (NullPointerException e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e); } } @@ -126,7 +140,7 @@ public class RepositoryManger implements Observable { try { RepositoryManger.MOD_LIST.clear(); RepositoryManger.MOD_LIST_SIZE = 0; - JSONObject jsonObject = new JSONObject(r.body().string()); + JSONObject jsonObject = new JSONObject(r.getBody()); String modPath = ArmA3Launcher.user_config.get("client", "modPath"); if(modPath == null) modPath = ""; @@ -170,7 +184,7 @@ public class RepositoryManger implements Observable { statusMap.replace(Type.MODSET, DownloadStatus.FINNISHED); RepositoryManger.getInstance().notifyObservers(Type.MODSET.toString()); - } catch (IOException | NullPointerException e) { + } catch (NullPointerException e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e); } } diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Response.java b/src/main/java/de/mc8051/arma3launcher/repo/Response.java new file mode 100644 index 0000000..e45cc3e --- /dev/null +++ b/src/main/java/de/mc8051/arma3launcher/repo/Response.java @@ -0,0 +1,34 @@ +package de.mc8051.arma3launcher.repo; + +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +/** + * Created by gurkengewuerz.de on 27.03.2020. + */ +public class Response { + + private int statusCode; + private HttpResponse response; + + public Response(HttpResponse response) { + this.response = response; + statusCode = response.statusCode(); + } + + public boolean isSuccessful() { + return statusCode >= 200 && statusCode <= 299; + } + + public HttpRequest request() { + return response.request(); + } + + public int getStatusCode() { + return statusCode; + } + + public String getBody() { + return response.body(); + } +} diff --git a/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java b/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java index 59a09db..ec66c6a 100644 --- a/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java +++ b/src/main/java/de/mc8051/arma3launcher/repo/Syncer.java @@ -9,7 +9,7 @@ import de.mc8051.arma3launcher.interfaces.Observable; import de.mc8051.arma3launcher.interfaces.Observer; import de.mc8051.arma3launcher.objects.AbstractMod; import de.mc8051.arma3launcher.objects.ModFile; -import humanize.Humanize; +import de.mc8051.arma3launcher.utils.Humanize; import javax.swing.*; import java.io.IOException; diff --git a/src/main/java/de/mc8051/arma3launcher/utils/Callback.java b/src/main/java/de/mc8051/arma3launcher/utils/Callback.java index fd47ea5..868c297 100644 --- a/src/main/java/de/mc8051/arma3launcher/utils/Callback.java +++ b/src/main/java/de/mc8051/arma3launcher/utils/Callback.java @@ -1,6 +1,6 @@ package de.mc8051.arma3launcher.utils; -import okhttp3.Response; +import de.mc8051.arma3launcher.repo.Response; import java.io.File; diff --git a/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java b/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java new file mode 100644 index 0000000..14fe4d4 --- /dev/null +++ b/src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java @@ -0,0 +1,68 @@ +package de.mc8051.arma3launcher.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Created by gurkengewuerz.de on 27.03.2020. + */ +public class FileUtils { + + public static final Charset DEFAULT_CHARSET; + private static final char[] DIGITS_LOWER; + private static final char[] DIGITS_UPPER; + + public static String sha1Hex(File f) throws IOException, NoSuchAlgorithmException { + return encodeHexString(sha1(f)); + } + + public static byte[] sha1(File file) throws IOException, NoSuchAlgorithmException { + MessageDigest digest = MessageDigest.getInstance("SHA-1"); + InputStream fis = new FileInputStream(file); + int n = 0; + byte[] buffer = new byte[8192]; + while (n != -1) { + n = fis.read(buffer); + if (n > 0) { + digest.update(buffer, 0, n); + } + } + return digest.digest(); + } + + public static String encodeHexString(byte[] data) { + return new String(encodeHex(data)); + } + + public static char[] encodeHex(byte[] data) { + return encodeHex(data, true); + } + public static char[] encodeHex(byte[] data, boolean toLowerCase) { + return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER); + } + + protected static char[] encodeHex(byte[] data, char[] toDigits) { + int l = data.length; + char[] out = new char[l << 1]; + int i = 0; + + for(int var5 = 0; i < l; ++i) { + out[var5++] = toDigits[(240 & data[i]) >>> 4]; + out[var5++] = toDigits[15 & data[i]]; + } + + return out; + } + + static { + DEFAULT_CHARSET = StandardCharsets.UTF_8; + DIGITS_LOWER = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + DIGITS_UPPER = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + } +} diff --git a/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java b/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java new file mode 100644 index 0000000..8959561 --- /dev/null +++ b/src/main/java/de/mc8051/arma3launcher/utils/Humanize.java @@ -0,0 +1,38 @@ +package de.mc8051.arma3launcher.utils; + +import java.text.DecimalFormat; + +/** + * Created by gurkengewuerz.de on 27.03.2020. + */ +public class Humanize { + + private static final long K = 1024; + private static final long M = K * K; + private static final long G = M * K; + private static final long T = G * K; + + public static String binaryPrefix(final long value){ + final long[] dividers = new long[] { T, G, M, K, 1 }; + final String[] units = new String[] { "TB", "GB", "MB", "KB", "B" }; + if(value < 1) + throw new IllegalArgumentException("Invalid file size: " + value); + String result = null; + for(int i = 0; i < dividers.length; i++){ + final long divider = dividers[i]; + if(value >= divider){ + result = format(value, divider, units[i]); + break; + } + } + return result; + } + + private static String format(final long value, + final long divider, + final String unit){ + final double result = + divider > 1 ? (double) value / (double) divider : (double) value; + return new DecimalFormat("#,##0.#").format(result) + " " + unit; + } +} diff --git a/src/main/resources/arma3launcher.json b/src/main/resources/arma3launcher.json index e208928..1492c4f 100644 --- a/src/main/resources/arma3launcher.json +++ b/src/main/resources/arma3launcher.json @@ -1,5 +1,4 @@ { - "version": "0.1.1", "name": "TheTown Client", "title": "Welcome! :P", "subtitle": "${name} v${version}", diff --git a/src/main/resources/project.properties b/src/main/resources/project.properties new file mode 100644 index 0000000..a2273e2 --- /dev/null +++ b/src/main/resources/project.properties @@ -0,0 +1,2 @@ +version=${project.version} +artifactId=${project.artifactId} \ No newline at end of file