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

Commit

Permalink
Update to 2024.7-beta.4: Add module search, update module structure a…
Browse files Browse the repository at this point in the history
…nd update Minecraft module
  • Loading branch information
danieldieeins committed Jun 26, 2024
1 parent 8ed8c18 commit 4e3cbb7
Show file tree
Hide file tree
Showing 18 changed files with 380 additions and 76 deletions.
2 changes: 1 addition & 1 deletion application-main/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</parent>

<artifactId>application-main</artifactId>
<version>2024.7-beta.3</version>
<version>2024.7-beta.4</version>

<properties>
<maven.compiler.source>17</maven.compiler.source>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import com.zyneonstudios.application.main.ApplicationConfig;
import com.zyneonstudios.application.main.NexusApplication;
import com.zyneonstudios.application.modules.ApplicationModule;
import com.zyneonstudios.application.modules.search.ModuleSearch;

import java.awt.*;
import java.util.HashMap;

public class FrameConnector {

Expand All @@ -17,6 +19,7 @@ public class FrameConnector {

// Instance variable to hold the ApplicationFrame object
private final ApplicationFrame frame;
private ModuleSearch moduleSearch = new ModuleSearch("https://raw.githubusercontent.com/zyneonstudios/nexus-nex/main/zyndex/index.json");

// Constructor for FrameConnector class
public FrameConnector(ApplicationFrame frame) {
Expand Down Expand Up @@ -122,6 +125,8 @@ private void sync(String request) {

// Execute JavaScript to update the UI accordingly
frame.executeJavaScript("document.getElementById('updater-settings-enable-updates').checked = "+update+";");
} else if(request.startsWith("discover.")) {
syncDiscover(request.replaceFirst("discover.",""));
} else if(request.startsWith("updateChannel.")) {
// If the request starts with "updateChannel.", synchronize update channel settings
request = request.replace("updateChannel.","");
Expand Down Expand Up @@ -151,6 +156,41 @@ private void syncSettings(String request) {
}
// Execute JavaScript to update the UI with retrieved settings
frame.executeJavaScript("updates = "+autoUpdate+"; document.getElementById('updater-settings-enable-updates').checked = updates; document.getElementById('updater-settings-update-channel').value = \""+channel+"\"; document.getElementById('updater-settings').style.display = 'inherit'; document.getElementById('general-settings-start-page').value = '"+ApplicationConfig.startPage+"'; document.getElementById('updater-settings').style.display = 'inherit';");
} else if(request.equals("about")) {
frame.executeJavaScript("document.getElementById('settings-global-application-version').innerText = \""+ApplicationConfig.getApplicationVersion()+"\"");
}
}

private void syncDiscover(String request) {
if(request.startsWith("search.")) {
if(request.replace("search.","").equals("modules")) {
if(moduleSearch==null) {
moduleSearch = new ModuleSearch("https://raw.githubusercontent.com/zyneonstudios/nexus-nex/main/zyndex/index.json");
}
if(moduleSearch.getCachedResults()==null) {
moduleSearch.search("");
}
if(moduleSearch.getCachedSearchTerm()!=null) {
if(!moduleSearch.getCachedSearchTerm().isEmpty()&&!moduleSearch.getCachedSearchTerm().isBlank()) {
frame.executeJavaScript("document.getElementById(\"search-bar\").placeholder = \""+moduleSearch.getCachedSearchTerm()+"\";");
}
}
for(HashMap<String,String> result : moduleSearch.getCachedResults()) {
String tags = "Tags: "+result.get("meta.tags").replace("[\"","").replace("\"]","").replace("\"","").replace(",",", ");
String meta = result.get("meta.id")+" | v"+result.get("info.version")+" | Hidden: "+result.get("meta.isHidden")+"<br>"+tags;
String actions = "<a onclick=\\\"connector('sync.discover.details.module.nexus-minecraft-module');\\\"><i class='bx bx-spreadsheet'></i> More</a> ";
if(NexusApplication.getModuleLoader().getModuleIds().contains(result.get("meta.id"))) {
actions = "v"+NexusApplication.getModuleLoader().getModules().get(result.get("meta.id")).getVersion()+" <a onclick=\\\"connector('sync.discover.details.module.nexus-minecraft-module');\\\"><i class='bx bx-spreadsheet'></i> More</a> <a style=\\\"background: #473e5c !important; color: white!important; cursor: not-allowed !important; box-shadow: 0 0 0.2rem var(--shadow3) !important;\\\"><i class='bx bx-check'></i> Installed</a>";
} else {
actions = actions+"<a style=\\\"background: #5632a8; color: white;\\\" onclick=\\\"connector('sync.discover.install.module.nexus-minecraft-module');\\\"><i class='bx bx-download'></i> Install</a>";
}
String command = "addResult(\""+result.get("meta.id")+"\",\""+result.get("resources.thumbnail")+"\",\""+result.get("info.name")+"\",\""+result.get("info.author")+"\",\""+result.get("info.description")+"\",\""+meta+"\",\""+actions+"\");";
frame.executeJavaScript(command);
}
}
} else if(request.startsWith("details.")) {
request = request.replaceFirst("details.","");
frame.executeJavaScript("enableOverlay(\"https://www.zyneonstudios.com\");");
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.zyneonstudios.application.main;

import com.zyneonstudios.Main;
import live.nerotv.shademebaby.file.Config;
import live.nerotv.shademebaby.utils.FileUtil;

import java.io.File;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
Expand Down Expand Up @@ -33,6 +36,7 @@ public record ApplicationConfig(String[] args) {
private static Config configuration = null;
private static String os = null;
private static Config updateConfig = null;
private static Config properties = null;

private static String[] arguments = null;

Expand Down Expand Up @@ -62,6 +66,20 @@ else if(arg.startsWith("--test")) {
}
}

if(new File(getApplicationPath() + "temp/").exists()) {
try {
FileUtil.deleteFolder(new File(getApplicationPath() + "temp/"));
} catch (Exception e) {
NexusApplication.getLogger().error("[CONFIG] Couldn't delete old temp files: "+e.getMessage());
}
}
if(new File(getApplicationPath() + "temp/nexus.json").exists()) {
NexusApplication.getLogger().debug("[CONFIG] Deleted old properties: "+new File(getApplicationPath() + "temp/nexus.json").delete());
}
FileUtil.extractResourceFile("nexus.json",getApplicationPath()+"temp/nexus.json", Main.class);
properties = new Config(new File(getApplicationPath() + "temp/nexus.json"));
applicationVersion = properties.getString("version");

// Resolving language
String lang = Locale.getDefault().toLanguageTag();
if(lang.startsWith("de-")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public static Logger getLogger() {
return logger;
}

public ModuleLoader getModuleLoader() {
public static ModuleLoader getModuleLoader() {
return moduleLoader;
}

Expand Down Expand Up @@ -118,7 +118,11 @@ private static boolean update() {
}
try {
if(new File(getApplicationPath() + "temp/ui/").exists()) {
logger.debug("[APP] Deleted old ui files: "+new File(getApplicationPath() + "temp/ui/").delete());
try {
FileUtil.deleteFolder(new File(getApplicationPath() + "temp/ui/"));
} catch (Exception e) {
getLogger().error("Couldn't delete old temporary ui files: "+e.getMessage());
}
}
logger.debug("[APP] Created new ui path: "+new File(getApplicationPath() + "temp/ui/").mkdirs());
FileUtil.extractResourceFile("content.zip",getApplicationPath()+"temp/content.zip",Main.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ public class ApplicationModule {
private final String id;
private final String name;
private final String version;
private final String author;
private final String authors;

private final NexusApplication application;

public ApplicationModule(NexusApplication application, String id, String name, String version, String author) {
public ApplicationModule(NexusApplication application, String id, String name, String version, String authors) {
NexusApplication.getLogger().debug("[MODULES] Creating object for "+name+" ("+id+") v"+version);

this.id = id;
Expand All @@ -23,18 +23,7 @@ public ApplicationModule(NexusApplication application, String id, String name, S
this.application = application;

this.connector = new ModuleConnector(this);
this.author = author;
}

@Deprecated
public ApplicationModule(NexusApplication application, String id, String name, String version) {
NexusApplication.getLogger().debug("[MODULES] Creating object for "+name+" ("+id+") v"+version);
this.id = id;
this.name = name;
this.version = version;
this.application = application;
this.connector = new ModuleConnector(this);
this.author = "Unknown";
this.authors = authors;
}

public NexusApplication getApplication() {
Expand All @@ -61,19 +50,19 @@ public String getVersion() {
return version;
}

public String getAuthor() {
return author;
public String getAuthors() {
return authors;
}

public void onLoad() {
NexusApplication.getLogger().log("[MODULES] loading "+name+" ("+id+"-v"+version+") by "+author+"...");
NexusApplication.getLogger().log("[MODULES] loading "+name+" ("+id+"-v"+version+") by "+authors+"...");
}

public void onEnable() {
NexusApplication.getLogger().log("[MODULES] enabling "+name+" ("+id+"-v"+version+") by "+author+"...");
NexusApplication.getLogger().log("[MODULES] enabling "+name+" ("+id+"-v"+version+") by "+authors+"...");
}

public void onDisable() {
NexusApplication.getLogger().log("[MODULES] disabling "+name+" ("+id+"-v"+version+") by "+author+"...");
NexusApplication.getLogger().log("[MODULES] disabling "+name+" ("+id+"-v"+version+") by "+authors+"...");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,27 @@ public Set<String> getModuleIds() {
public ApplicationModule readModule(File moduleJar) {
try {
String mainPath;
String id;
String name;
String version;
String authors;
try (JarFile jarFile = new JarFile(moduleJar.getAbsolutePath())) {
InputStream is = jarFile.getInputStream(jarFile.getJarEntry("nexus.json"));
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
JsonArray array = new Gson().fromJson(reader, JsonObject.class).getAsJsonArray("modules");
mainPath = array.get(0).getAsJsonObject().get("main").getAsString();
id = array.get(0).getAsJsonObject().get("id").getAsString();
name = array.get(0).getAsJsonObject().get("name").getAsString();
version = array.get(0).getAsJsonObject().get("version").getAsString();
authors = array.get(0).getAsJsonObject().get("authors").getAsJsonArray().toString();
} catch (Exception e) {
NexusApplication.getLogger().error("[MODULES] Couldn't read module "+moduleJar.getPath()+": "+e.getMessage());
return null;
}
URLClassLoader classLoader = new URLClassLoader(new URL[]{moduleJar.toURI().toURL()});
Class<?> module = classLoader.loadClass(mainPath);
Constructor<?> constructor = module.getConstructor(NexusApplication.class);
return (ApplicationModule) constructor.newInstance(application);
Constructor<?> constructor = module.getConstructor(NexusApplication.class, String.class, String.class, String.class, String.class);
return (ApplicationModule) constructor.newInstance(application, id, name, version, authors);
} catch (Exception e) {
NexusApplication.getLogger().error("[MODULES] Couldn't read module "+moduleJar.getPath()+": "+e.getMessage());
return null;
Expand Down Expand Up @@ -94,7 +102,7 @@ public ArrayList<ApplicationModule> readModules(File moduleJar) {

public void loadModule(ApplicationModule module) {
if(!modules.containsKey(module.getId())) {
NexusApplication.getLogger().log("[MODULES] Loading module "+module.getId()+" v"+module.getVersion()+" by "+module.getAuthor()+"...");
NexusApplication.getLogger().log("[MODULES] Loading module "+module.getId()+" v"+module.getVersion()+" by "+module.getAuthors()+"...");
modules.put(module.getId(),module);
module.onLoad();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.zyneonstudios.application.modules.search;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import live.nerotv.shademebaby.utils.GsonUtil;

import java.util.ArrayList;
import java.util.HashMap;

public class ModuleSearch {

private final JsonArray array;
private ArrayList<HashMap<String,String>> cachedResults = null;
private String cachedSearchTerm = null;

public ModuleSearch(String zyndexUrl) {
array = GsonUtil.getObject(zyndexUrl).getAsJsonArray("modules");
}

public ArrayList<HashMap<String, String>> search(String searchTerm) {
if(!searchTerm.replace(" ","").isEmpty()) {
cachedSearchTerm = searchTerm;
}

ArrayList<HashMap<String, String>> results = new ArrayList<>();
String[] searchTerms = searchTerm.toLowerCase().replace(" ",",").replace(",,",",").split(",");

if(!array.isEmpty()) {
for(JsonElement element:array) {
JsonObject result = GsonUtil.getObject(element.getAsString()).getAsJsonObject("module");

JsonObject info = result.getAsJsonObject("info");
String name = info.get("name").getAsString();

JsonObject meta = result.getAsJsonObject("meta");
String id = meta.get("id").getAsString();

boolean idMatching = false;
for(String s:searchTerms) {
if (id.equalsIgnoreCase(s)) {
idMatching = true;
break;
}
}

if(name.toLowerCase().contains(searchTerm)||idMatching) {
JsonObject resources = result.getAsJsonObject("resources");
HashMap<String,String> module = new HashMap<>();

module.put("info.author",info.get("author").getAsString().replace("\"","''"));
module.put("info.description",info.get("description").getAsString().replace("\\n","<br>").replace("\n","<br>").replace("\"","''"));
module.put("info.name",info.get("name").getAsString().replace("\"","''"));
module.put("info.version",info.get("version").getAsString().replace("\"","''"));

module.put("meta.download",meta.get("download").getAsString());
module.put("meta.id",id);
module.put("meta.isHidden",meta.get("isHidden").getAsString());
module.put("meta.location",meta.get("location").getAsString());
module.put("meta.origin",meta.get("origin").getAsString());
module.put("meta.tags",meta.get("tags").toString());

if(resources.get("thumbnail")!=null) {
module.put("resources.thumbnail",resources.get("thumbnail").getAsString());
} else {
module.put("resources.thumbnail","");
}

if(resources.get("logo")!=null) {
module.put("resources.logo",resources.get("logo").getAsString());
} else {
module.put("resources.logo","");
}

if(resources.get("icon")!=null) {
module.put("resources.icon",resources.get("icon").getAsString());
} else {
module.put("resources.icon","");
}

if(resources.get("background")!=null) {
module.put("resources.background",resources.get("background").getAsString());
} else {
module.put("resources.background","");
}

results.add(module);
}
}
}

cachedResults = results;
return cachedResults;
}

public ArrayList<HashMap<String, String>> getCachedResults() {
return cachedResults;
}

public String getCachedSearchTerm() {
return cachedSearchTerm;
}
}
Binary file modified application-main/src/main/resources/content.zip
Binary file not shown.
Binary file modified application-main/src/main/resources/modules.zip
Binary file not shown.
21 changes: 16 additions & 5 deletions application-ui/content/assets/application/css/app-discover.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

.discover-content #discover-search.active {
z-index: 100;
background: var(--background6);
background: var(--background4);
opacity: 1;
}

Expand Down Expand Up @@ -70,7 +70,7 @@
transition: all 0.25s ease !important;
}

#discover-buttons.active, #search-buttons {
#discover-buttons.active, #search-buttons, #result-template {
display: none;
}

Expand Down Expand Up @@ -182,10 +182,21 @@
}

.discover-content #discover-search .search-flex #search-content {
margin: 3.75rem 0.5rem 0.5rem 0.5rem;
height: calc(100% - 4.5rem);
max-height: calc(100% - 4.5rem);
margin: 3.75rem 0.5rem 0.5rem 0;
height: calc(100% - 3.25rem);
max-height: calc(100% - 3.25rem);
width: calc(100% - 15rem);
max-width: calc(100% - 15rem);
overflow-y: auto;

padding: 0 0.05rem 0 0.3rem;

.result-overlay {
position: absolute;
z-index: 2;
bottom: 0;
width: 100%;
height: 1.5rem;
background: linear-gradient(to top, var(--background4), transparent);
}
}
Loading

0 comments on commit 4e3cbb7

Please sign in to comment.