diff options
Diffstat (limited to 'scripts/patcher/install.js')
-rwxr-xr-x | scripts/patcher/install.js | 72 |
1 files changed, 69 insertions, 3 deletions
diff --git a/scripts/patcher/install.js b/scripts/patcher/install.js index 852f3a2..3d744a6 100755 --- a/scripts/patcher/install.js +++ b/scripts/patcher/install.js @@ -39,7 +39,8 @@ const { getDarwinDirs, getLinuxDirs, ENTRYPOINT, - question + question, + pathToBranch } = require("./common"); switch (process.platform) { @@ -104,19 +105,84 @@ async function install(installations) { } } + const useNewMethod = pathToBranch(selected.branch) !== "stable"; + for (const version of selected.versions) { - const dir = version.path; + + const dir = useNewMethod ? path.join(version.path, "..") : version.path; + // Check if we have write perms to the install directory... try { fs.accessSync(selected.location, fs.constants.W_OK); } catch (e) { console.error("No write access to", selected.location); console.error( - "Try running this script as an administrator:", + "Make sure Discord isn't running. If that doesn't work,", + "try running this script as an administrator:", "sudo pnpm inject" ); process.exit(1); } + if (useNewMethod) { + const appAsar = path.join(dir, "app.asar"); + const _appAsar = path.join(dir, "_app.asar"); + + if (fs.existsSync(_appAsar) && fs.existsSync(appAsar)) { + console.log("This copy of Discord already seems to be patched..."); + console.log("Try running `pnpm uninject` first."); + process.exit(1); + } + + try { + fs.renameSync(appAsar, _appAsar); + } catch (err) { + if (err.code === "EBUSY") { + console.error(selected.branch, "is still running. Make sure you fully close it before running this script."); + process.exit(1); + } + console.error("Failed to rename app.asar to _app.asar"); + throw err; + } + + try { + fs.mkdirSync(appAsar); + } catch (err) { + if (err.code === "EBUSY") { + console.error(selected.branch, "is still running. Make sure you fully close it before running this script."); + process.exit(1); + } + console.error("Failed to create app.asar folder"); + throw err; + } + + fs.writeFileSync( + path.join(appAsar, "index.js"), + `require("${ENTRYPOINT}");` + ); + fs.writeFileSync( + path.join(appAsar, "package.json"), + JSON.stringify({ + name: "discord", + main: "index.js", + }) + ); + + const requiredFiles = ["index.js", "package.json"]; + + if (requiredFiles.every(f => fs.existsSync(path.join(appAsar, f)))) { + console.log( + "Successfully patched", + version.name + ? `${selected.branch} ${version.name}` + : selected.branch + ); + } else { + console.log("Failed to patch", dir); + console.log("Files in directory:", fs.readdirSync(appAsar)); + } + + return; + } if (fs.existsSync(dir) && fs.lstatSync(dir).isDirectory()) { fs.rmSync(dir, { recursive: true }); } |