diff options
Diffstat (limited to 'src/utils.js')
-rw-r--r-- | src/utils.js | 71 |
1 files changed, 68 insertions, 3 deletions
diff --git a/src/utils.js b/src/utils.js index 50ffed0..11f7dcb 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,5 +1,6 @@ const path = require("path"); const fs = require("fs-extra"); +const os = require("os") const copy = require("copy-dir"); const { app, dialog, ipcMain, Notification } = require("electron"); @@ -14,6 +15,7 @@ const unzip = require("unzipper"); const run = require("child_process").spawn; const exec = require("child_process").exec; const { https } = require("follow-redirects"); +const vdf = require('simple-vdf'); process.chdir(app.getPath("appData")); @@ -119,6 +121,68 @@ function setpath(win) { if (! win) { // CLI settings.gamepath = cli.param("setpath"); } else { // GUI + // Autodetect path + + + // Windows only using powershell and windows registery + // Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Respawn\Titanfall2\ + // https://nodejs.org/api/os.html#osplatform + if (os.platform() == "win32") + { + // TODO + } + + // Detect using + // Windows: C:\Program Files (x86)\Steam\steamapps + // Linux: ~/.steam/steam/steamapps/ + // Mac: ~/Library/Application\ Support/Steam/steamapps + + function read_libraryfolders(read_data) + { + // Parse read_data + data = vdf.parse(read_data); + + //data['libraryfolders'] + // `.length - 1` This is because the last value is `contentstatsid` + for (let pathIterator = 0; pathIterator < Object.values(data['libraryfolders']).length - 1; pathIterator++) { + let data_array = Object.values(data['libraryfolders'][pathIterator]) + + if (fs.existsSync(data_array[0] + "/steamapps/common/Titanfall2/Titanfall2.exe")) { + // Found the location + settings.gamepath = data_array[0] + "/steamapps/common/Titanfall2/"; + settings.zip = path.join(settings.gamepath + "/northstar.zip"); + saveSettings(); + win.webContents.send("newpath", settings.gamepath); + ipcMain.emit("newpath", null, settings.gamepath); + + saveSettings(); + cli.exit(); + // Return 1 if success + return 1; + } + } + } + + switch (os.platform()) { + case "win32": + if (fs.existsSync( "C:\\Program Files (x86)\\Steam\\steamapps\\libraryfolders.vdf")) + { + let read_data = fs.readFileSync("C:\\Program Files (x86)\\Steam\\steamapps\\libraryfolders.vdf") + if (read_libraryfolders(read_data.toString()) == 1) + return + } + break; + case "linux": + if (fs.existsSync( os.homedir() + "/.steam/steam/steamapps/libraryfolders.vdf")) + { + let read_data = fs.readFileSync(os.homedir() + "/.steam/steam/steamapps/libraryfolders.vdf") + if (read_libraryfolders(read_data.toString()) == 1) + return + } + break; + } + + // Let user choose manually dialog.showOpenDialog({properties: ["openDirectory"]}).then(res => { if (res.canceled) { ipcMain.emit("newpath", null, false); @@ -134,11 +198,12 @@ function setpath(win) { saveSettings(); win.webContents.send("newpath", settings.gamepath); ipcMain.emit("newpath", null, settings.gamepath); + + saveSettings(); + cli.exit(); + return; }).catch(err => {console.error(err)}) } - - saveSettings(); - cli.exit(); } // As to not have to do the same one liner a million times, this |