diff options
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/js/browser.js | 39 | ||||
-rw-r--r-- | src/app/js/mods.js | 83 | ||||
-rw-r--r-- | src/app/main.js | 21 |
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; } } |