diff options
-rw-r--r-- | src/app/index.html | 10 | ||||
-rw-r--r-- | src/app/main.css | 25 | ||||
-rw-r--r-- | src/app/main.js | 8 | ||||
-rw-r--r-- | src/cli.js | 3 | ||||
-rw-r--r-- | src/index.js | 19 | ||||
-rw-r--r-- | src/lang/en.json | 7 | ||||
-rw-r--r-- | src/utils.js | 20 |
7 files changed, 84 insertions, 8 deletions
diff --git a/src/app/index.html b/src/app/index.html index dc65d67..edf7fbe 100644 --- a/src/app/index.html +++ b/src/app/index.html @@ -20,6 +20,16 @@ <button id="northstar" onclick="launch()">%%gui.launchnorthstar%%</button> </div> </div> + <div id="modsdiv"> + </div> + <div class="line"> + <div class="text" id="modcount">%%gui.mods%%</div> + <div class="buttons"> + <button id="removemod">%%gui.mods.removemod%%</button> + <button id="removeall">%%gui.mods.removeall%%</button> + <button id="installmod">%%gui.mods.install%%</button> + </div> + </div> </div> <script src="lang.js"></script> diff --git a/src/app/main.css b/src/app/main.css index 377e1f8..08c82fa 100644 --- a/src/app/main.css +++ b/src/app/main.css @@ -1,7 +1,9 @@ :root { + --padding: 15px; --disabled: #656E7F; - --background: #4C515B; --foreground: #DDE2EB; + --background: #4C515B; + --boxbackground: #666E7F; --btnforeground: var(--foreground); } @@ -9,6 +11,7 @@ :root { --background: #FFFFFF; --foreground: #4C566A; + --boxbackground: #EEF0F4; --btnforeground: var(--background); } } @@ -33,32 +36,38 @@ nobr {white-space: nowrap} .line { display: flex; - margin-top: 15px; + margin-top: var(--padding); +} + +#modsdiv { + border-radius: var(--padding); + background: var(--boxbackground); + margin: calc(var(--padding) / 3) var(--padding); } .buttons { text-align: right; margin-left: auto; user-select: none; - margin-right: 7px; + margin-right: calc(var(--padding) / 1.9); } .text {max-width: 38vw} .buttons {max-width: 55vw} -button, .text { +button, .text, .mod { border: none; outline: none; - padding: 5px 15px; user-select: none; border-radius: 50px; transition: 0.2s ease-in-out; + padding: calc(var(--padding) / 3) var(--padding); } button { - margin-bottom: 10px; color: var(--btnforeground); -webkit-app-region: no-drag; + margin-bottom: calc(var(--padding) / 1.5); } button:hover {opacity: 0.9} @@ -68,8 +77,8 @@ button:active { } -#update {background: #81A1C1} +#update, #installmod {background: #81A1C1} #setpath {background: #5E81AC} -#northstar {background: #C7777F} #vanilla, #exit {background: #656E7F} +#northstar, #removeall, #removemod {background: #C7777F} button:disabled {background: var(--disabled) !important; opacity: 0.5} diff --git a/src/app/main.js b/src/app/main.js index 809b5c8..f512d4f 100644 --- a/src/app/main.js +++ b/src/app/main.js @@ -53,6 +53,14 @@ ipcRenderer.on("newpath", (event, newpath) => { ipcRenderer.on("log", (event, msg) => {log(msg)}) +ipcRenderer.on("mods", (event, mods) => { + modcount.innerHTML = `${lang("gui.mods.count")} ${mods.length}`; + modsdiv.innerHTML = ""; + for (let i = 0; i < mods.length; i++) { + modsdiv.innerHTML += `<div class="mod">${mods[i].Name}</div>`; + } +}) + setlang(); setInterval(() => { ipcRenderer.send("setsize", document.querySelector(".lines").offsetHeight + 20); @@ -10,6 +10,7 @@ const lang = require("./lang"); function hasArgs() { if (cli.hasSwitch("cli") || cli.hasSwitch("help") || + cli.hasSwitch("mods") || cli.hasSwitch("update") || cli.hasSwitch("launch") || cli.hasSwitch("setpath") || @@ -65,6 +66,8 @@ async function init() { break; } } + + if (cli.hasSwitch("mods")) {ipcMain.emit("getmods")} } module.exports = { diff --git a/src/index.js b/src/index.js index c99e367..3f301ae 100644 --- a/src/index.js +++ b/src/index.js @@ -41,6 +41,11 @@ function start() { ipcMain.on("ns-updated", () => {win.webContents.send("ns-updated")}) ipcMain.on("ns-updating", () => {win.webContents.send("ns-updating")}) ipcMain.on("winLog", (event, ...args) => {win.webContents.send("log", ...args)}) + ipcMain.on("guigetmods", (event, ...args) => {win.webContents.send("mods", utils.mods.list())}) + + win.webContents.once("dom-ready", () => { + win.webContents.send("mods", utils.mods.list()); + }); } ipcMain.on("launch", (event) => {utils.launch()}) @@ -50,6 +55,20 @@ ipcMain.on("launchVanilla", (event) => {utils.launch("vanilla")}) ipcMain.on("update", (event) => {utils.update()}) ipcMain.on("setpathcli", (event) => {utils.setpath()}) +ipcMain.on("getmods", (event) => { + let mods = utils.mods.list(); + if (mods.length > 0) { + console.log(`${utils.lang("general.mods.installed")} ${mods.length}`) + for (let i = 0; i < mods.length; i++) { + console.log(` ${mods[i].Name} ${mods[i].Version}`) + } + cli.exit(0); + } else { + console.log("No mods installed"); + cli.exit(0); + } +}) + process.chdir(app.getPath("appData")); if (cli.hasArgs()) { diff --git a/src/lang/en.json b/src/lang/en.json index e30d576..0aa7ef2 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -22,6 +22,12 @@ "gui.update": "Update", "gui.setpath": "Game Path", + "gui.mods": "Mods", + "gui.mods.count": "Mods Installed:", + "gui.mods.install": "Install Mod", + "gui.mods.removemod": "Remove Mod", + "gui.mods.removeall": "Remove All", + "gui.update.downloading": "Downloading...", "gui.update.extracting": "Extracting update...", "gui.update.finished": "Done! Ready to play!", @@ -35,5 +41,6 @@ "general.launching": "Launching", + "general.mods.installed": "Installed mods:", "general.missingpath": "Game path is not set!" } diff --git a/src/utils.js b/src/utils.js index b4ff04d..8bc6440 100644 --- a/src/utils.js +++ b/src/utils.js @@ -147,7 +147,27 @@ function winLog(msg) { ipcMain.emit("winLog", msg, msg); } +const mods = { + list: () => { + let mods = []; + let modpath = path.join(settings.gamepath, "R2Northstar/mods"); + + files = fs.readdirSync(modpath) + files.forEach((file) => { + if (fs.statSync(path.join(modpath, file)).isDirectory()) { + if (fs.existsSync(path.join(modpath, file, "mod.json"))) { + mods.push(require(path.join(modpath, file, "mod.json"))) + } + } + }) + + return mods; + }, +} + module.exports = { + mods, + lang, winLog, launch, update, |