remove some dependencies and write own utils
This commit is contained in:
parent
ed51a990a9
commit
9c0b6bcf83
41
pom.xml
41
pom.xml
@ -26,16 +26,6 @@
|
||||
<artifactId>config</artifactId>
|
||||
<version>1.4.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.14</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.formdev</groupId>
|
||||
<artifactId>flatlaf</artifactId>
|
||||
@ -51,31 +41,38 @@
|
||||
<artifactId>ini4j</artifactId>
|
||||
<version>0.5.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.mfornos</groupId>
|
||||
<artifactId>humanize-slim</artifactId>
|
||||
<version>1.2.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.Gurkengewuerz</groupId>
|
||||
<artifactId>zsyncer</artifactId>
|
||||
<version>locale_fix-2f7565d392-1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>4.4.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/project.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<source>12</source>
|
||||
<target>12</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
@ -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;
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<splitpane id="6353c">
|
||||
<splitpane id="6353c" binding="splitView">
|
||||
<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">
|
||||
<preferred-size width="200" height="200"/>
|
||||
@ -16,7 +16,7 @@
|
||||
</constraints>
|
||||
<properties>
|
||||
<continuousLayout value="false"/>
|
||||
<dividerLocation value="160"/>
|
||||
<dividerLocation value="-1"/>
|
||||
<dividerSize value="10"/>
|
||||
<enabled value="false"/>
|
||||
<orientation value="1"/>
|
||||
|
@ -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() {
|
||||
|
@ -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<String> getPath() {
|
||||
ArrayList<String> 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;
|
||||
|
@ -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<Type, DownloadStatus> statusMap = new HashMap<>();
|
||||
|
||||
private List<Observer> 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<String> 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);
|
||||
}
|
||||
}
|
||||
|
34
src/main/java/de/mc8051/arma3launcher/repo/Response.java
Normal file
34
src/main/java/de/mc8051/arma3launcher/repo/Response.java
Normal file
@ -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<String> response;
|
||||
|
||||
public Response(HttpResponse<String> 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();
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package de.mc8051.arma3launcher.utils;
|
||||
|
||||
import okhttp3.Response;
|
||||
import de.mc8051.arma3launcher.repo.Response;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
68
src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java
Normal file
68
src/main/java/de/mc8051/arma3launcher/utils/FileUtils.java
Normal file
@ -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'};
|
||||
}
|
||||
}
|
38
src/main/java/de/mc8051/arma3launcher/utils/Humanize.java
Normal file
38
src/main/java/de/mc8051/arma3launcher/utils/Humanize.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
{
|
||||
"version": "0.1.1",
|
||||
"name": "TheTown Client",
|
||||
"title": "Welcome! :P",
|
||||
"subtitle": "${name} v${version}",
|
||||
|
2
src/main/resources/project.properties
Normal file
2
src/main/resources/project.properties
Normal file
@ -0,0 +1,2 @@
|
||||
version=${project.version}
|
||||
artifactId=${project.artifactId}
|
Loading…
Reference in New Issue
Block a user