From 159e2f981bdbfd6a0589639424155d34b7a4cc91 Mon Sep 17 00:00:00 2001 From: 0neGal Date: Sat, 3 Feb 2024 19:15:29 +0100 Subject: src/modules/settings.js now provides a function This fixes a couple issues where the main process wouldn't actually get changes made to the settings, this fixes that. On top of this, changing settings is now done with `settings.set()` There shouldn't be any breakage from this change, but I suppose it is possible. Especially because the `settings()` function still does contain backup options set, meaning `settings.nsargs` is technically still valid, but dont expect it to actually be updated when that variable is changed, its merely here to avoid any problems. --- src/modules/gamepath.js | 33 +++++++++++++++++++-------------- src/modules/launch.js | 8 ++++---- src/modules/mods.js | 2 +- src/modules/packages.js | 2 +- src/modules/settings.js | 28 ++++++++++++++++++++++++---- src/modules/update.js | 30 +++++++++++++++--------------- src/modules/version.js | 6 +++--- 7 files changed, 67 insertions(+), 42 deletions(-) (limited to 'src/modules') diff --git a/src/modules/gamepath.js b/src/modules/gamepath.js index 0a9dcc6..8d28c29 100644 --- a/src/modules/gamepath.js +++ b/src/modules/gamepath.js @@ -16,7 +16,7 @@ let gamepath = {}; // returns true/false depending on if the gamepath currently exists/is // mounted, used to avoid issues... gamepath.exists = (folder) => { - return fs.existsSync(folder || settings.gamepath); + return fs.existsSync(folder || settings().gamepath); } // returns false if the user doesn't have read/write permissions to the @@ -29,7 +29,7 @@ gamepath.has_perms = (folder) => { try { fs.accessSync( - folder || settings.gamepath, + folder || settings().gamepath, fs.constants.R_OK | fs.constants.W_OK ) @@ -51,14 +51,16 @@ gamepath.set = async (win, force_dialog) => { // actually sets and saves the gamepath in the settings function set_gamepath(folder) { // set settings - settings.gamepath = folder; - settings.zip = path.join(settings.gamepath + "/northstar.zip"); + settings().set("gamepath", folder); + settings().set("zip", path.join( + settings().gamepath + "/northstar.zip" + )) - settings.save(); // save settings + settings().save(); // save settings // tell the renderer the path has changed - win.webContents.send("newpath", settings.gamepath); - ipcMain.emit("newpath", null, settings.gamepath); + win.webContents.send("newpath", settings().gamepath); + ipcMain.emit("newpath", null, settings().gamepath); } if (! win) { // CLI @@ -69,11 +71,14 @@ gamepath.set = async (win, force_dialog) => { // gamepath, and then later fallback to the GUI/manual selection if (! force_dialog) { function set_gamepath(folder, force_dialog) { - settings.gamepath = folder; - settings.zip = path.join(settings.gamepath + "/northstar.zip"); - settings.save(); - win.webContents.send("newpath", settings.gamepath); - ipcMain.emit("newpath", null, settings.gamepath); + settings().set("gamepath", folder); + settings().set("zip", path.join( + settings().gamepath + "/northstar.zip") + ) + + settings().save(); + win.webContents.send("newpath", settings().gamepath); + ipcMain.emit("newpath", null, settings().gamepath); gamepath.setting = false; } @@ -127,13 +132,13 @@ gamepath.set = async (win, force_dialog) => { setInterval(() => { if (gamepath.exists()) { if (! gamepath.has_perms()) { - return ipcMain.emit("gamepath-lost-perms", null, settings.gamepath); + return ipcMain.emit("gamepath-lost-perms", null, settings().gamepath); } ipcMain.emit("gui-getmods"); } else { if (fs.existsSync("viper.json")) { - if (settings.gamepath != "") { + if (settings().gamepath != "") { ipcMain.emit("gamepath-lost"); } } diff --git a/src/modules/launch.js b/src/modules/launch.js index 9238336..bb094e9 100644 --- a/src/modules/launch.js +++ b/src/modules/launch.js @@ -22,23 +22,23 @@ function launch(game_version) { } // change current directory to gamepath - process.chdir(settings.gamepath); + process.chdir(settings().gamepath); - let launch_args = settings.nsargs || ""; + let launch_args = settings().nsargs || ""; // launch the requested game version switch(game_version) { case "vanilla": console.info(lang("general.launching"), "Vanilla..."); exec("Titanfall2.exe " + launch_args, { - cwd: settings.gamepath + cwd: settings().gamepath }) break; default: console.info(lang("general.launching"), "Northstar..."); exec("NorthstarLauncher.exe " + launch_args, { - cwd: settings.gamepath + cwd: settings().gamepath }) break; diff --git a/src/modules/mods.js b/src/modules/mods.js index 50db011..122ff7f 100644 --- a/src/modules/mods.js +++ b/src/modules/mods.js @@ -21,7 +21,7 @@ var mods = { } function update_path() { - mods.path = path.join(settings.gamepath, "R2Northstar/mods"); + mods.path = path.join(settings().gamepath, "R2Northstar/mods"); }; update_path(); // returns a list of mods diff --git a/src/modules/packages.js b/src/modules/packages.js index 38303e2..392c550 100644 --- a/src/modules/packages.js +++ b/src/modules/packages.js @@ -15,7 +15,7 @@ console = require("./console"); var packages = {}; function update_path() { - packages.path = path.join(settings.gamepath, "R2Northstar/packages"); + packages.path = path.join(settings().gamepath, "R2Northstar/packages"); // make sure the `packages` folder exists if (fs.existsSync(packages.path)) { diff --git a/src/modules/settings.js b/src/modules/settings.js index 9d036cf..db6c68c 100644 --- a/src/modules/settings.js +++ b/src/modules/settings.js @@ -58,7 +58,7 @@ if (fs.existsSync("viper.json")) { // // you can also pass a settings object to the function and it'll try and // merge it together with the already existing settings -settings.save = (obj = {}, notify_renderer = true) => { +let save = (obj = {}, notify_renderer = true) => { // refuse to save if settings aren't valid if (invalid_settings) { settings = {}; @@ -68,8 +68,6 @@ settings.save = (obj = {}, notify_renderer = true) => { ...settings, ...obj } - delete settings_content.save; - let stringified_settings = JSON.stringify({ ...settings, ...obj }) @@ -87,4 +85,26 @@ settings.save = (obj = {}, notify_renderer = true) => { } } -module.exports = settings; +// sets `key` in `settings` to `value` +let set = (key, value) => { + settings[key] = value; +} + +// returns up-to-date `settings`, along with `set()` and `save()` +let export_func = () => { + return { + ...settings, + + set, + save + } +} + +// add properties from `settings` to `export_func`, this is just for +// backwards compatibility, and they really shouldn't be relied on, +// this'll likely be removed at some point +for (let i in settings) { + export_func[i] = settings[i]; +} + +module.exports = export_func; diff --git a/src/modules/update.js b/src/modules/update.js index 0876993..6b31da7 100644 --- a/src/modules/update.js +++ b/src/modules/update.js @@ -23,8 +23,8 @@ let update = {}; function restore_excluded_files() { if (! gamepath.exists()) {return} - for (let i = 0; i < settings.excludes.length; i++) { - let exclude = path.join(settings.gamepath + "/" + settings.excludes[i]); + for (let i = 0; i < settings().excludes.length; i++) { + let exclude = path.join(settings().gamepath + "/" + settings().excludes[i]); if (fs.existsSync(exclude + ".excluded")) { fs.renameSync(exclude + ".excluded", exclude); } @@ -32,10 +32,10 @@ function restore_excluded_files() { }; restore_excluded_files(); // renames excluded files to .excluded, the list of files to be -// exluded is set in the settings (settings.excludes) +// exluded is set in the settings (settings().excludes) function exclude_files() { - for (let i = 0; i < settings.excludes.length; i++) { - let exclude = path.join(settings.gamepath + "/" + settings.excludes[i]); + for (let i = 0; i < settings().excludes.length; i++) { + let exclude = path.join(settings().gamepath + "/" + settings().excludes[i]); if (fs.existsSync(exclude)) { fs.renameSync(exclude, exclude + ".excluded"); } @@ -50,7 +50,7 @@ let is_auto_updating = false; // it uses isGameRunning() to ensure it doesn't run while the game is // running, as that may have all kinds of issues. update.northstar_autoupdate = () => { - if (! settings.nsupdate || ! fs.existsSync("viper.json") || settings.gamepath.length === 0) { + if (! settings().nsupdate || ! fs.existsSync("viper.json") || settings().gamepath.length === 0) { return; } @@ -124,7 +124,7 @@ update.viper = (autoinstall) => { if (! autoUpdater.isUpdaterActive()) { update.viper.updating = false; - if (settings.nsupdate) { + if (settings().nsupdate) { update.northstar_autoupdate(); } @@ -148,7 +148,7 @@ update.viper = (autoinstall) => { // only check for NS updates if Viper itself has no updates and // if NS auto updates is enabled. - if (settings.nsupdate || cli.hasArgs()) { + if (settings().nsupdate || cli.hasArgs()) { update.northstar_autoupdate(); } @@ -166,7 +166,7 @@ function remove_core_mods() { // make sure the "R2Northstar/mods" folder exists, on top of making // sure that, it is in fact a folder - let mod_dir = path.join(settings.gamepath, "R2Northstar/mods"); + let mod_dir = path.join(settings().gamepath, "R2Northstar/mods"); if (! fs.existsSync(mod_dir) && ! fs.statSync(mod_dir).isFile()) { return } @@ -285,7 +285,7 @@ update.northstar = async (force_install) => { key: "cli.update.downloading", }); - let tmp = path.dirname(settings.zip); + let tmp = path.dirname(settings().zip); if (fs.existsSync(tmp)) { if (! fs.statSync(tmp).isDirectory()) { @@ -293,12 +293,12 @@ update.northstar = async (force_install) => { } } else { fs.mkdirSync(tmp); - if (fs.existsSync(settings.zip)) { - fs.rmSync(settings.zip); + if (fs.existsSync(settings().zip)) { + fs.rmSync(settings().zip); } } - let stream = fs.createWriteStream(settings.zip); + let stream = fs.createWriteStream(settings().zip); res.pipe(stream); let received = 0; @@ -328,7 +328,7 @@ update.northstar = async (force_install) => { remove_core_mods(); stream.close(); - let extract = fs.createReadStream(settings.zip); + let extract = fs.createReadStream(settings().zip); win.log(lang("gui.update.extracting")); ipcMain.emit("ns-update-event", { @@ -341,7 +341,7 @@ update.northstar = async (force_install) => { // extracts the zip, this is the part where we're actually // installing Northstar. - extract.pipe(unzip.Extract({path: settings.gamepath})) + extract.pipe(unzip.Extract({path: settings().gamepath})) let extracted = 0; let size = received; diff --git a/src/modules/version.js b/src/modules/version.js index 6195cad..da0a730 100644 --- a/src/modules/version.js +++ b/src/modules/version.js @@ -10,7 +10,7 @@ let version = {}; // if not installed it'll return "unknown" version.northstar = () => { // if NorthstarLauncher.exe doesn't exist, always return "unknown" - if (! fs.existsSync(path.join(settings.gamepath, "NorthstarLauncher.exe"))) { + if (! fs.existsSync(path.join(settings().gamepath, "NorthstarLauncher.exe"))) { return "unknown"; } @@ -30,7 +30,7 @@ version.northstar = () => { // checks version of mods for (let i = 0; i < versionFiles.length; i++) { - var versionFile = path.join(settings.gamepath, "R2Northstar/mods/", versionFiles[i],"/mod.json"); + var versionFile = path.join(settings().gamepath, "R2Northstar/mods/", versionFiles[i],"/mod.json"); if (fs.existsSync(versionFile)) { if (! fs.statSync(versionFile).isFile()) { add("unknown"); @@ -68,7 +68,7 @@ version.northstar = () => { // TODO: This file is present on Origin install, should check if it's // present with Steam install as well. version.titanfall = () => { - var versionFilePath = path.join(settings.gamepath, "gameversion.txt"); + var versionFilePath = path.join(settings().gamepath, "gameversion.txt"); if (fs.existsSync(versionFilePath)) { return fs.readFileSync(versionFilePath, "utf8"); } else { -- cgit v1.2.3