testcraftupdate/src/main/java/ley/modding/tcu/Util.java
2021-05-27 21:48:38 +02:00

120 lines
3.9 KiB
Java

package ley.modding.tcu;
import ley.modding.tcu.model.LocalPack;
import ley.modding.tcu.model.RemotePack;
import ley.modding.tcu.model.VersionDiff;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class Util {
private static RemotePack rcache = null;
private static LocalPack lcache = null;
public static RemotePack getRemote(LocalPack pack) throws IOException {
if (rcache != null)
return rcache;
URL url = new URL(pack.packURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
int status = con.getResponseCode();
if (status != 200) {
return null;
}
InputStreamReader r2 = new InputStreamReader(con.getInputStream());
RemotePack ret = RemotePack.fromJSON(r2);
r2.close();
rcache = ret;
return ret;
}
public static LocalPack getLocal(File local) throws IOException {
if (lcache != null)
return lcache;
Reader r = new FileReader(local);
LocalPack pack = LocalPack.fromJSON(r);
r.close();
lcache = pack;
return pack;
}
public static void writeLocal(File local) throws IOException {
Writer w = new FileWriter(local);
lcache.toJson(w);
w.close();
}
public static String[] checkVersion(File local) throws IOException {
LocalPack lpack = getLocal(local);
RemotePack rpack = getRemote(lpack);
if (rpack != null && rpack.versions.contains(lpack.version)) {
int index = rpack.versions.indexOf(lpack.version);
int lastIndex = rpack.versions.size() - 1;
if (index == lastIndex) {
return new String[0];
} else {
String[] ret = new String[lastIndex - index];
int j = 0;
for (int i = index + 1; i <= lastIndex; i++) {
ret [j] = rpack.versions.get(i);
j++;
}
return ret;
}
}
return new String[0];
}
public static VersionDiff buildDiff(String[] versions) throws IOException {
VersionDiff diff = new VersionDiff();
diff.add = new ArrayList<>();
diff.remove = new ArrayList<>();
RemotePack pack = getRemote(lcache);
for (String ver : versions) {
VersionDiff vdiff = pack.diff.get(ver);
if (vdiff != null) {
if (vdiff.remove != null) {
for (VersionDiff.RemoveFile f : vdiff.remove) {
boolean add = true;
List<VersionDiff.AddFile> toRem = new ArrayList<>();
for (VersionDiff.AddFile a : diff.add) {
if (a.dir.equals(f.dir) && a.filename.equals(f.filename)) {
add = false;
toRem.add(a);
}
}
diff.add.removeAll(toRem);
if (add)
diff.remove.add(f);
}
}
if (vdiff.add != null)
diff.add.addAll(vdiff.add);
}
}
return diff;
}
public static URL getOverrides() {
if (rcache != null && rcache.overrides != null && !rcache.overrides.isEmpty()) {
try {
return new URL(rcache.overrides);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
return null;
}
}