Skip to content

Commit

Permalink
First attempt at a GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
jonafanho committed Sep 14, 2022
1 parent 9ec762d commit 2af4459
Show file tree
Hide file tree
Showing 11 changed files with 532 additions and 134 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ task setupFiles() {
from(zipTree("common/src/main/java/updater/mappings/mappings.zip")) { eachFile { file -> file.relativePath = new RelativePath(true, file.relativePath.segments.drop(1) as String[]) } }
include "**/ScreenMapper.java"
include "**/Text.java"
include "**/UtilitiesClient.java"
into "common/src/main/java/updater/mappings"
filter(ReplaceTokens, tokens: ["package": "updater.mappings"])
}
Expand Down
187 changes: 187 additions & 0 deletions common/src/main/java/updater/Config.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
package updater;

import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.jonafanho.apitools.ModId;
import com.jonafanho.apitools.ModProvider;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

public class Config {

private static final List<String> SERVER_URLS = new ArrayList<>();
private static final List<ModObject> MOD_OBJECTS = new ArrayList<>();

public static void loadConfig(Path gameDirectory) {
SERVER_URLS.clear();
MOD_OBJECTS.clear();

try {
final JsonObject configObject = new JsonParser().parse(FileUtils.readFileToString(getConfigFile(gameDirectory), StandardCharsets.UTF_8)).getAsJsonObject();

if (configObject.has("synced")) {
configObject.getAsJsonArray("synced").forEach(serverElement -> SERVER_URLS.add(serverElement.getAsString()));
}

if (configObject.has("local")) {
MOD_OBJECTS.addAll(getModObjects(configObject.getAsJsonArray("local")));
}

System.out.println("Successfully read config");
} catch (Exception ignored) {
try {
System.out.println("Resetting config");
saveConfig(gameDirectory);
} catch (Exception e) {
e.printStackTrace();
}
}

Collections.sort(SERVER_URLS);
Collections.sort(MOD_OBJECTS);
}

public static void saveConfig(Path gameDirectory) {
final JsonObject jsonObject = new JsonObject();

final JsonArray syncedArray = new JsonArray();
SERVER_URLS.forEach(syncedArray::add);
jsonObject.add("synced", syncedArray);

final JsonArray localArray = new JsonArray();
MOD_OBJECTS.forEach(modObject -> localArray.add(modObject.toJsonObject()));
jsonObject.add("local", localArray);

try {
FileUtils.writeStringToFile(getConfigFile(gameDirectory), new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject), StandardCharsets.UTF_8);
System.out.println("Wrote config to file");
} catch (Exception e) {
e.printStackTrace();
}
}

public static List<ModObject> getModObjects(JsonArray modArray) {
final List<ModObject> modObjects = new ArrayList<>();

modArray.forEach(modElement -> {
try {
final JsonObject modObject = modElement.getAsJsonObject();
final String modId = modObject.get("id").getAsString();

if (modObject.has("source")) {
final String source = modObject.get("source").getAsString().toLowerCase();
if (source.equals("curseforge")) {
modObjects.add(new ModObject(modId, ModProvider.CURSE_FORGE));
} else if (source.equals("modrinth")) {
modObjects.add(new ModObject(modId, ModProvider.MODRINTH));
}
} else if (modObject.has("url") && modObject.has("sha1")) {
final Long before = modObject.has("before") ? modObject.get("before").getAsLong() : null;
final Long after = modObject.has("after") ? modObject.get("after").getAsLong() : null;
modObjects.add(new ModObject(modId, modObject.get("url").getAsString(), modObject.get("sha1").getAsString(), before, after));
}
} catch (Exception e) {
e.printStackTrace();
}
});

return modObjects;
}

public static void forEachServerUrl(Consumer<String> consumer) {
SERVER_URLS.forEach(consumer);
}

public static void forEachModObject(Consumer<ModObject> consumer) {
MOD_OBJECTS.forEach(consumer);
}

public static void removeServerUrl(int index) {
SERVER_URLS.remove(index);
}

public static void removeModObject(int index) {
MOD_OBJECTS.remove(index);
}

private static File getConfigFile(Path gameDirectory) {
return gameDirectory.resolve("config").resolve("minecraft-mod-updater.json").toFile();
}

public static class ModObject implements Comparable<ModObject> {

private final String modId;
private final ModProvider modProvider;
private final String url;
private final String sha1;
private final long before;
private final long after;

private ModObject(String modId, ModProvider modProvider) {
this.modId = modId;
this.modProvider = modProvider;
url = null;
sha1 = null;
before = Long.MAX_VALUE;
after = 0;
}

private ModObject(String modId, String url, String sha1, Long before, Long after) {
this.modId = modId;
modProvider = null;
this.url = url;
this.sha1 = sha1;
this.before = before == null ? Long.MAX_VALUE : before;
this.after = after == null ? 0 : after;
}

public void download(Downloader downloader) {
if (modProvider != null) {
downloader.downloadMod(new ModId(modId, modProvider));
} else if (url != null && sha1 != null) {
final long millis = System.currentTimeMillis();
if (millis < before && millis >= after) {
downloader.downloadMod(modId, sha1, url);
}
}
}

public String[] toStringArray() {
return new String[]{modId, modProvider == null ? url : modProvider.name};
}

private JsonObject toJsonObject() {
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", modId);

if (modProvider != null) {
jsonObject.addProperty("source", modProvider.id);
} else if (url != null && sha1 != null) {
jsonObject.addProperty("url", url);
jsonObject.addProperty("sha1", sha1);
if (before != Long.MAX_VALUE) {
jsonObject.addProperty("before", before);
}
if (after != 0) {
jsonObject.addProperty("after", after);
}
}

return jsonObject;
}

@Override
public int compareTo(ModObject modObject) {
return String.join(" ", toStringArray()).compareTo(String.join(" ", modObject.toStringArray()));
}
}
}
11 changes: 0 additions & 11 deletions common/src/main/java/updater/ConfigScreen.java

This file was deleted.

17 changes: 9 additions & 8 deletions common/src/main/java/updater/Downloader.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package updater;

import com.jonafanho.apitools.ModFile;
import com.jonafanho.apitools.ModId;
import com.jonafanho.apitools.ModLoader;
import com.jonafanho.apitools.NetworkUtils;
import com.jonafanho.apitools.*;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;

Expand Down Expand Up @@ -33,9 +30,9 @@ public class Downloader {
public Downloader(String minecraftVersion, ModLoader modLoader, Path gameDirectory) {
this.minecraftVersion = minecraftVersion;
this.modLoader = modLoader;
modsPath = gameDirectory.resolve("mods");
modsPathLocal = gameDirectory.resolve("mods-local");
modsPathTemp = gameDirectory.resolve("mods-temp");
modsPath = gameDirectory.resolve(Updater.MODS_DIRECTORY);
modsPathLocal = gameDirectory.resolve(Updater.MODS_LOCAL_DIRECTORY);
modsPathTemp = gameDirectory.resolve(Updater.MODS_TEMP_DIRECTORY);

FileUtils.listFiles(modsPath.toFile(), new String[]{"jar"}, false).forEach(file -> {
if (!file.getName().startsWith("Mod-Updater-")) {
Expand All @@ -50,9 +47,13 @@ public Downloader(String minecraftVersion, ModLoader modLoader, Path gameDirecto
}

printCurseForgeKey();

if (modLoader == ModLoader.FABRIC) {
downloadMod(new ModId("modmenu", ModProvider.MODRINTH));
}
}

public void downloadMod(String modId, String url, String hash) {
public void downloadMod(String modId, String hash, String url) {
downloadFile(modId.replace(".jar", "").replaceAll("[^\\w-_.]", "") + ".jar", hash, url);
}

Expand Down
Loading

0 comments on commit 2af4459

Please sign in to comment.