Skip to content
This repository has been archived by the owner on Nov 20, 2024. It is now read-only.

Commit

Permalink
New launcher (updater) for the application
Browse files Browse the repository at this point in the history
  • Loading branch information
danieldieeins committed Apr 27, 2024
1 parent e2835ff commit 9a99444
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 9 deletions.
4 changes: 2 additions & 2 deletions application-main/src/main/java/com/zyneonstudios/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ public class Main {
private static boolean test = false;

public static void main(String[] args) {
splash = new ZyneonSplash();
splash.setVisible(true);
FileUtil.deleteFolder(new File(getDirectoryPath()+"temp/"));
version = "2024.4.7";
ArrayList<String> arguments = new ArrayList<>();
String name = "";
architecture = getArchitecture();
splash = new ZyneonSplash();
splash.setVisible(true);
logger = new ZLogger("ZYNEON");
String fullVersion = version+" ▪ "+name;
logger.log("[MAIN] Updated user interface: "+update());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.zyneonstudios.application.ApplicationLauncher;
import com.zyneonstudios.application.ZyneonSplash;
import live.nerotv.shademebaby.logger.Logger;

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
Expand All @@ -13,10 +14,19 @@ public class Launcher {

private static String applicationPath = null;
private static ZyneonSplash splash = new ZyneonSplash();
private static Logger logger = new Logger("ZYNEON");

public static void main(String[] args) {
splash.setVisible(true);
System.out.println(new ApplicationLauncher(args).launch());
logger.log("[LAUNCHER] Preparing launch...");
ApplicationLauncher application = new ApplicationLauncher(args);
if(application.automaticUpdates()) {
application.update(application.getUpdateChannel(),false);
}
logger.log("[LAUNCHER] Launch application...");
int i = application.launch(application.getUpdateChannel());
logger.log("[LAUNCHER] Application launch process endet: "+i);
System.exit(i);
}

public static String getDirectoryPath() {
Expand Down Expand Up @@ -45,4 +55,8 @@ public static String getDirectoryPath() {
public static ZyneonSplash getSplash() {
return splash;
}

public static Logger getLogger() {
return logger;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,59 @@ public class ApplicationLauncher {

private final String libraries = Launcher.getDirectoryPath()+"libs/zyneon/";
private final Config config = new Config(libraries+"updater.json");
private final boolean autoUpdate;
private final String updateChannel;
private String version;

public ApplicationLauncher(String[] args) {
Launcher.getLogger().log("[UPDATER] Checking defaults...");
config.checkEntry("updater.installed.info.version","0");
version = config.getString("updater.installed.info.version");
config.checkEntry("updater.settings.autoUpdate",true);
config.checkEntry("updater.settings.updateChannel","stable");
autoUpdate = config.getBoolean("updater.settings.autoUpdate");
updateChannel = config.getString("updater.settings.updateChannel");
}

public String getVersion() {
return version;
}

public Config getConfig() {
return config;
}

public String getLibraries() {
return libraries;
}

public String getUpdateChannel() {
return updateChannel;
}

public boolean automaticUpdates() {
return autoUpdate;
}

private boolean validate() {
Launcher.getLogger().log("[UPDATER] Validating installed version...");
File folder = new File(libraries+"versions/");
if(!folder.mkdirs()) {
if(folder.exists()) {
if(folder.isDirectory()) {
Launcher.getLogger().log("[UPDATER] Found versions folder...");
for(File versions: Objects.requireNonNull(folder.listFiles())) {
if(versions.isDirectory()) {
if(Objects.requireNonNull(versions.listFiles()).length <= 3) {
for (File jar : Objects.requireNonNull(versions.listFiles())) {
Launcher.getLogger().log("[UPDATER] Found "+jar.getName());
if (jar.getName().contains("nexus-" + version + ".jar")) {
Launcher.getLogger().log("[UPDATER] Successfully validated installed version "+version+"!");
return true;
}
}
} else {
Launcher.getLogger().error("[UPDATER] Too many versions!");
}
}
}
Expand All @@ -49,20 +82,41 @@ private boolean validate() {
return false;
}

public boolean update(String updateChannelId) {
public boolean update(String updateChannelId, boolean overwrite) {
Launcher.getLogger().log("[UPDATER] Connecting to update channel "+updateChannelId+"...");
try {
JsonArray versions = new Gson().fromJson(GsonUtil.getFromURL("https://raw.githubusercontent.com/zyneonstudios/nexus-nex/main/application/index.json"), JsonObject.class).getAsJsonArray("versions");
Launcher.getLogger().log("[UPDATER] Connected to server! Searching for channel...");
for(JsonElement element: versions) {
JsonObject version = element.getAsJsonObject();
String id = version.get("meta").getAsJsonObject().get("id").getAsString();
if(id.equals(updateChannelId)) {
Launcher.getLogger().log("[UPDATER] Found correct update channel!");
String newVersion = version.get("info").getAsJsonObject().get("version").getAsString();
File app = FileUtil.downloadFile(version.get("meta").getAsJsonObject().get("download").getAsString(),libraries+"versions/"+id+"/nexus-"+newVersion+".jar");
Launcher.getLogger().log("[UPDATER] Installed version: "+this.version);
Launcher.getLogger().log("[UPDATER] Available version: "+newVersion);
Launcher.getLogger().log("[UPDATER] Need path creation: "+new File(libraries+"versions/"+id+"/").mkdirs());
File app = new File(libraries+"versions/"+id+"/nexus-"+newVersion+".jar");
if(app.exists()) {
if(overwrite) {
app.delete();
} else {
Launcher.getLogger().log("[UPDATER] Version "+this.version+" is already installed! Skipping update process...");
return true;
}
}
Launcher.getLogger().log("[UPDATER] Downloading...");
app = FileUtil.downloadFile(version.get("meta").getAsJsonObject().get("download").getAsString(),libraries+"versions/"+id+"/nexus-"+newVersion+".jar");
Launcher.getLogger().log("[UPDATER] Validating download...");
if(app != null) {
this.version = newVersion;
config.set("updater.installed.info.version", this.version);
return true;
} else {
Launcher.getLogger().error("[UPDATER] Couldn't download new version!");
}
} else {
Launcher.getLogger().log("[UPDATER] Found update channel "+id+"...");
}
}
} catch (Exception e) {
Expand All @@ -71,12 +125,14 @@ public boolean update(String updateChannelId) {
return false;
}

public int launch() {
public int launch(String updateChannelId) {
if(validate()) {
Launcher.getLogger().log("[UPDATER] Launching Zyneon Studios NEXUS Application v"+version+"...");
try {
ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", "--add-opens", "java.desktop/sun.awt=ALL-UNNAMED", "--add-opens", "java.desktop/sun.lwawt=ALL-UNNAMED", "--add-opens", "java.desktop/sun.lwawt.macosx=ALL-UNNAMED", libraries+"versions/nexus-"+version+".jar", "application", "--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.lwawt=ALL-UNNAMED --add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED");
ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", "--add-opens", "java.desktop/sun.awt=ALL-UNNAMED", "--add-opens", "java.desktop/sun.lwawt=ALL-UNNAMED", "--add-opens", "java.desktop/sun.lwawt.macosx=ALL-UNNAMED", libraries+"versions/"+updateChannelId+"/nexus-"+version+".jar", "application", "--add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.lwawt=ALL-UNNAMED --add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
Launcher.getSplash().setVisible(false);
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
Expand All @@ -89,8 +145,8 @@ public int launch() {
}
} else {
try {
if(update("stable")) {
return launch();
if(update(updateChannelId,true)) {
return launch(updateChannelId);
}
} catch (Exception e) {
throw new RuntimeException(e);
Expand Down

0 comments on commit 9a99444

Please sign in to comment.