aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
author0neGal <mail@0negal.com>2023-07-24 20:38:21 +0200
committerGitHub <noreply@github.com>2023-07-24 20:38:21 +0200
commitb18038892db6567acb56822d1d7a1fe35f1c225f (patch)
treeafeac6f0d804be5d4f812afcbadc63ff8d2854fa /src/app
parent112610902caef019ea4af17d77079cd090d6b9b5 (diff)
parent55040f6808f4aef3cd7ba86a45290d03963c37bd (diff)
downloadViper-b18038892db6567acb56822d1d7a1fe35f1c225f.tar.gz
Viper-b18038892db6567acb56822d1d7a1fe35f1c225f.zip
Merge pull request #191 from 0neGal/packages-dir
feat: Support for the new packages folder
Diffstat (limited to 'src/app')
-rw-r--r--src/app/js/browser.js39
-rw-r--r--src/app/js/mods.js83
-rw-r--r--src/app/main.js21
3 files changed, 99 insertions, 44 deletions
diff --git a/src/app/js/browser.js b/src/app/js/browser.js
index 206b80e..06d3dd9 100644
--- a/src/app/js/browser.js
+++ b/src/app/js/browser.js
@@ -111,11 +111,14 @@ var Browser = {
browser.classList.toggle("shown");
},
install: (package_obj, clear_queue = false) => {
- console.log(package_obj)
return installFromURL(
package_obj.download || package_obj.versions[0].download_url,
package_obj.dependencies || package_obj.versions[0].dependencies,
- clear_queue, package_obj.owner
+ clear_queue,
+
+ package_obj.author || package_obj.owner,
+ package_obj.name || package_obj.pkg.name,
+ package_obj.version || package_obj.versions[0].version_number
)
},
add_pkg_properties: () => {
@@ -133,9 +136,9 @@ var Browser = {
for (let ii = 0; ii < modsobj.all.length; ii++) {
let mod = modsobj.all[ii];
- if (normalize(mod.Name) === normalized) {
- local_name = mod.Name;
- local_version = version.format(mod.Version);
+ if (normalize(mod.name) === normalized) {
+ local_name = mod.name;
+ local_version = version.format(mod.version);
if (version.is_newer(remote_version, local_version)) {
has_update = true;
}
@@ -270,13 +273,13 @@ var Browser = {
setTimeout(() => {
for (let i = 0; i < modsobj.all.length; i++) {
- let modname = normalize(modsobj.all[i].Name);
- let modfolder = normalize(modsobj.all[i].FolderName);
+ let modname = normalize(modsobj.all[i].name);
+ let modfolder = normalize(modsobj.all[i].folder_name);
if (mod.includes(modname)) {
if (! make(modname)) {
- if (modsobj.all[i].ManifestName) {
- make(normalize(modsobj.all[i].ManifestName));
+ if (modsobj.all[i].manifest_name) {
+ make(normalize(modsobj.all[i].manifest_name));
}
}
}
@@ -386,7 +389,7 @@ function BrowserEl(properties) {
let normalized_mods = [];
for (let i = 0; i < modsobj.all; i++) {
- normalized_mods.push(normalize(mods_list[i].Name));
+ normalized_mods.push(normalize(mods_list[i].name));
}
if (properties.pkg.local_version) {
@@ -445,8 +448,8 @@ function add_recent_toast(name, timeout = 3000) {
ipcRenderer.on("removed-mod", (event, mod) => {
setButtons(true);
Browser.setbutton(mod.name, lang("gui.browser.install"));
- if (mod.manifestname) {
- Browser.setbutton(mod.manifestname, lang("gui.browser.install"));
+ if (mod.manifest_name) {
+ Browser.setbutton(mod.manifest_name, lang("gui.browser.install"));
}
})
@@ -463,7 +466,7 @@ ipcRenderer.on("failed-mod", (event, modname) => {
})
})
-ipcRenderer.on("duped-mod", (event, modname) => {
+ipcRenderer.on("legacy-duped-mod", (event, modname) => {
if (recent_toasts["duped" + modname]) {return}
add_recent_toast("duped" + modname);
@@ -490,28 +493,30 @@ ipcRenderer.on("installed-mod", (event, mod) => {
if (recent_toasts["installed" + mod.name]) {return}
add_recent_toast("installed" + mod.name);
+ let name = mod.fancy_name || mod.name;
+
setButtons(true);
- Browser.setbutton(mod.name, lang("gui.browser.reinstall"));
+ Browser.setbutton(name, lang("gui.browser.reinstall"));
if (mod.malformed) {
new Toast({
timeout: 8000,
scheme: "warning",
title: lang("gui.toast.title.malformed"),
- description: mod.name + " " + lang("gui.toast.desc.malformed")
+ description: name + " " + lang("gui.toast.desc.malformed")
})
}
new Toast({
scheme: "success",
title: lang("gui.toast.title.installed"),
- description: mod.name + " " + lang("gui.toast.desc.installed")
+ description: name + " " + lang("gui.toast.desc.installed")
})
if (installqueue.length != 0) {
installFromURL(
"https://thunderstore.io/package/download/" + installqueue[0].pkg,
- false, false, installqueue[0].author
+ false, false, installqueue[0].author, installqueue[0].package_name, installqueue[0].version
)
installqueue.shift();
diff --git a/src/app/js/mods.js b/src/app/js/mods.js
index d4e8043..0d516d9 100644
--- a/src/app/js/mods.js
+++ b/src/app/js/mods.js
@@ -6,13 +6,18 @@ mods.load = (mods_obj) => {
let normalized_names = [];
let set_mod = (mod) => {
- let normalized_name = "mod-list-" + normalize(mod.Name);
+ let name = mod.name;
+ if (mod.package) {
+ name = mod.package.package_name;
+ }
+
+ let normalized_name = "mod-list-" + normalize(name);
normalized_names.push(normalized_name);
let el = document.getElementById(normalized_name);
if (el) {
- if (mod.Disabled) {
+ if (mod.disabled) {
el.querySelector(".switch").classList.remove("on");
} else {
el.querySelector(".switch").classList.add("on");
@@ -25,36 +30,67 @@ mods.load = (mods_obj) => {
div.classList.add("el");
div.id = normalized_name;
+ let mod_details = {
+ name: mod.name,
+ version: mod.version,
+ description: mod.description
+ }
+
+ if (mod.package) {
+ mod_details = {
+ image: mod.package.icon,
+ name: mod.package.manifest.name,
+ version: mod.package.manifest.version_number,
+ description: mod.package.manifest.description
+ }
+ }
+
div.innerHTML += `
<div class="image">
- <img src="">
+ <img src="${mod_details.image || ""}">
<img class="blur" src="">
</div>
<div class="text">
- <div class="title">${mod.Name}</div>
- <div class="description">${mod.Description}</div>
+ <div class="title">${mod_details.name}</div>
+ <div class="description">${mod_details.description}</div>
<button class="switch on orange"></button>
<button class="update bg-blue">
${lang("gui.browser.update")}
</button>
- <button class="bg-red" onclick="mods.remove('${mod.Name}')">
+ <button class="bg-red remove">
${lang("gui.mods.remove")}
</button>
- <button class="visual">${version.format(mod.Version)}</button>
+ <button class="visual">${version.format(mod_details.version)}</button>
<button class="visual">
${lang("gui.browser.madeby")}
- ${mod.Author || lang("gui.mods.unknown_author")}
+ ${mod.author || lang("gui.mods.unknown_author")}
</button>
</div>
`;
- if (mod.Disabled) {
+ div.querySelector(".remove").onclick = () => {
+ if (! mod.package) {
+ return mods.remove(mod.name);
+ }
+
+ for (let i = 0; i < mod.packaged_mods.length; i++) {
+ mods.remove(mod.packaged_mods[i]);
+ }
+ }
+
+ if (mod.disabled) {
div.querySelector(".switch").classList.remove("on");
}
div.querySelector(".switch").addEventListener("click", () => {
- mods.toggle(mod.Name);
+ if (! mod.package) {
+ return mods.toggle(mod.name);
+ }
+
+ for (let i = 0; i < mod.packaged_mods.length; i++) {
+ mods.toggle(mod.packaged_mods[i]);
+ }
})
div.querySelector(".image").style.display = "none";
@@ -87,20 +123,23 @@ mods.load = (mods_obj) => {
return;
}
+ let image_container = mod_els[i].querySelector(".image");
+ let image_el = image_container.querySelector("img")
+ let image_blur_el = image_container.querySelector("img.blur")
+
if (mod_versions[mod]) {
- let image_url = mod_versions[mod].package.versions[0].icon;
+ image_el.src = mod_versions[mod].package.versions[0].icon;
+ }
- let image_container = mod_els[i].querySelector(".image");
- let image_el = image_container.querySelector("img")
- let image_blur_el = image_container.querySelector("img.blur")
+ if (image_el.getAttribute("src") &&
+ ! image_container.parentElement.classList.contains("has-icon")) {
- if (image_url && ! image_el.getAttribute("src")) {
- image_container.style.display = null;
- image_el.src = image_url;
- image_blur_el.src = image_url;
+ let image_src = image_el.getAttribute("src");
- image_container.parentElement.classList.add("has-icon");
- }
+ image_blur_el.src = image_src;
+ image_container.style.display = null;
+
+ image_container.parentElement.classList.add("has-icon");
}
if (mod_versions[mod]
@@ -118,6 +157,10 @@ mods.load = (mods_obj) => {
let mod_el = mod_els[i].cloneNode(true);
+ // copy click event of the remove button to the new button
+ mod_el.querySelector(".remove").onclick =
+ mod_els[i].querySelector(".remove").onclick;
+
mod_el.classList.add("no-animation");
mod_el.querySelector(".switch").addEventListener("click", () => {
diff --git a/src/app/main.js b/src/app/main.js
index 1dbff40..51d9e73 100644
--- a/src/app/main.js
+++ b/src/app/main.js
@@ -3,7 +3,12 @@ const path = require("path");
const { app, ipcRenderer, shell } = require("electron");
const lang = require("../lang");
-var modsobj = {};
+var modsobj = {
+ all: [],
+ enabled: [],
+ disabled: []
+}
+
let shouldInstallNorthstar = false;
// Base settings
@@ -168,7 +173,7 @@ function installFromPath(path) {
}
// Tells the main process to install a mod from a URL
-function installFromURL(url, dependencies, clearqueue, author) {
+function installFromURL(url, dependencies, clearqueue, author, package_name, version) {
if (clearqueue) {installqueue = []};
let prettydepends = [];
@@ -183,7 +188,9 @@ function installFromURL(url, dependencies, clearqueue, author) {
if (! isModInstalled(pkg[1])) {
newdepends.push({
pkg: depend,
- author: pkg[0]
+ author: pkg[0],
+ version: pkg[2],
+ package_name: pkg[1]
});
prettydepends.push(`${pkg[1]} v${pkg[2]} - ${lang("gui.browser.madeby")} ${pkg[0]}`);
@@ -202,7 +209,7 @@ function installFromURL(url, dependencies, clearqueue, author) {
}
setButtons(false);
- ipcRenderer.send("install-from-url", url, author);
+ ipcRenderer.send("install-from-url", url, author, package_name, version);
if (dependencies) {
installqueue = dependencies;
@@ -212,11 +219,11 @@ function installFromURL(url, dependencies, clearqueue, author) {
function isModInstalled(modname) {
for (let i = 0; i < modsobj.all.length; i++) {
let mod = modsobj.all[i];
- if (mod.ManifestName) {
- if (mod.ManifestName.match(modname)) {
+ if (mod.manifest_name) {
+ if (mod.manifest_name.match(modname)) {
return true;
}
- } else if (mod.Name.match(modname)) {
+ } else if (mod.name.match(modname)) {
return true;
}
}