diff options
author | 0neGal <mail@0negal.com> | 2022-05-12 01:34:07 +0200 |
---|---|---|
committer | 0neGal <mail@0negal.com> | 2022-05-12 01:34:07 +0200 |
commit | 72f85aa2297f5c46d029f1e25193aa98ced884c3 (patch) | |
tree | 44815685bbd4c9f5514b015616d0c2629b5e2274 /src/app | |
parent | 108c7b97100d2a40e82f8196109c99d1d59b59ee (diff) | |
download | Viper-72f85aa2297f5c46d029f1e25193aa98ced884c3.tar.gz Viper-72f85aa2297f5c46d029f1e25193aa98ced884c3.zip |
initial draft for supporting dependencies
This should allow you to install packages that have dependencies,
however maybe not with the best UI/UX experience, as currently there's
only an English localization, and we also install dependencies even if
the dependency is already installed.
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/browser.js | 10 | ||||
-rw-r--r-- | src/app/main.js | 37 |
2 files changed, 43 insertions, 4 deletions
diff --git a/src/app/browser.js b/src/app/browser.js index e22ab3c..5c943ba 100644 --- a/src/app/browser.js +++ b/src/app/browser.js @@ -171,7 +171,8 @@ function BrowserElFromObj(obj) { download: pkg.download_url, version: pkg.version_number, categories: pkg.categories, - description: pkg.description + description: pkg.description, + dependencies: pkg.dependencies, }) } @@ -240,7 +241,7 @@ function BrowserEl(properties) { <div class="text"> <div class="title">${properties.title}</div> <div class="description">${properties.description}</div> - <button class="install" onclick="installFromURL('${properties.download}')">${installstr}</button> + <button class="install" onclick='installFromURL("${properties.download}", ${JSON.stringify(properties.dependencies)}, true)'>${installstr}</button> <button class="info" onclick="require('electron').shell.openExternal('${properties.url}')">${lang('gui.browser.info')}</button> <button class="visual">${properties.version}</button> <button class="visual">${lang("gui.browser.madeby")} ${properties.author}</button> @@ -285,6 +286,11 @@ ipcRenderer.on("installedmod", (event, mod) => { title: lang("gui.toast.title.installed"), description: mod.name + " " + lang("gui.toast.desc.installed") }) + + if (installqueue.length != 0) { + installFromURL("https://thunderstore.io/package/download/" + installqueue[0]); + installqueue.shift(); + } }) function normalize(items) { diff --git a/src/app/main.js b/src/app/main.js index 95b6f4c..109ca61 100644 --- a/src/app/main.js +++ b/src/app/main.js @@ -190,6 +190,8 @@ function selected(all) { } } +let installqueue = []; + // Tells the main process to install a mod through the file selector function installmod() { setButtons(false); @@ -203,9 +205,40 @@ function installFromPath(path) { } // Tells the main process to install a mod from a URL -function installFromURL(url) { +function installFromURL(url, dependencies, clearqueue) { + if (clearqueue) {installqueue = []}; + console.log(installqueue) + + let prettydepends = []; + + if (dependencies) { + let newdepends = []; + for (let i = 0; i < dependencies.length; i++) { + let depend = dependencies[i].toLowerCase(); + console.log(depend) + if (! depend.match(/northstar-northstar-.*/)) { + newdepends.push(dependencies[i].replaceAll("-", "/")); + let pkg = newdepends[newdepends.length - 1].split("/"); + prettydepends.push(`${pkg[1]} v${pkg[2]} - ${lang("gui.browser.madeby")} ${pkg[0]}`); + } + } + + dependencies = newdepends; + } + + if (dependencies && dependencies.length != 0) { + let confirminstall = confirm(lang("gui.mods.confirmdependencies") + prettydepends.join("\n")); + if (! confirminstall) { + return + } + } + setButtons(false); - ipcRenderer.send("installfromurl", url) + ipcRenderer.send("installfromurl", url, dependencies) + + if (dependencies) { + installqueue = dependencies; + } } // Frontend part of settings a new game path |