aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author0neGal <mail@0negal.com>2022-05-16 00:21:59 +0200
committerGitHub <noreply@github.com>2022-05-16 00:21:59 +0200
commitdee10ac8d1d361f51ce316539e45b8a4197c8ad9 (patch)
treebbe9c068cf0d851e8baba973a903de617474107f
parent108c7b97100d2a40e82f8196109c99d1d59b59ee (diff)
parent9724d433ebba9c323236078eeb87f3e5f5dc3e6d (diff)
downloadViper-dee10ac8d1d361f51ce316539e45b8a4197c8ad9.tar.gz
Viper-dee10ac8d1d361f51ce316539e45b8a4197c8ad9.zip
Merge pull request #122 from 0neGal/dependency-supportbetter-browser
feat: Dependency support
-rw-r--r--src/app/browser.js10
-rw-r--r--src/app/main.js55
-rw-r--r--src/lang/en.json1
-rw-r--r--src/lang/es.json1
-rw-r--r--src/utils.js8
5 files changed, 63 insertions, 12 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..362450a 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,58 @@ 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-.*/)) {
+ depend = dependencies[i].replaceAll("-", "/");
+ let pkg = depend.split("/");
+ if (! isModInstalled(pkg[1])) {
+ newdepends.push(depend);
+ 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;
+ }
+}
+
+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)) {
+ return true;
+ }
+ } else if (mod.Name.match(modname)) {
+ return true;
+ }
+ }
+
+ return false;
}
// Frontend part of settings a new game path
diff --git a/src/lang/en.json b/src/lang/en.json
index ee932a2..024b44a 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -68,6 +68,7 @@
"gui.mods.installing": "Installing mod...",
"gui.mods.installedmod": "Installed mod!",
"gui.mods.dragdrop": "Drag and drop a mod to install",
+ "gui.mods.confirmdependencies": "This package has dependencies, shown below, clicking \"Ok\" will install the package and the dependencies.\n\n",
"gui.browser.info": "Info",
"gui.browser.madeby": "by",
diff --git a/src/lang/es.json b/src/lang/es.json
index dbccad8..c2871f1 100644
--- a/src/lang/es.json
+++ b/src/lang/es.json
@@ -68,6 +68,7 @@
"gui.mods.installing": "Instalando modificación...",
"gui.mods.installedmod": "¡Modificación instalada!",
"gui.mods.dragdrop": "Arrastra y suelta una modificación para instalarla",
+ "gui.mods.confirmdependencies": "Este paquete tiene dependencias, se muestran abajo. Presionar \"Ok\" instalará el paquete y las dependencias.\n\n",
"gui.browser.info": "Información",
"gui.browser.madeby": "por",
diff --git a/src/utils.js b/src/utils.js
index eb9f195..e63297e 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -720,14 +720,6 @@ const mods = {
let stream = fs.createWriteStream(modlocation);
res.pipe(stream);
- // let received = 0;
- // // Progress messages, we should probably switch this to
- // // percentage instead of how much is downloaded.
- // res.on("data", (chunk) => {
- // received += chunk.length;
- // ipcMain.emit("ns-update-event", lang("gui.update.downloading") + " " + (received / 1024 / 1024).toFixed(1) + "mb");
- // })
-
stream.on("finish", () => {
stream.close();
mods.install(modlocation);