aboutsummaryrefslogtreecommitdiff
path: root/scripts/patcher/install.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/patcher/install.js')
-rwxr-xr-xscripts/patcher/install.js72
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 });
}