Skip to content
This repository was archived by the owner on May 31, 2024. It is now read-only.

Commit 0436d6e

Browse files
authored
Merge pull request #4 from ReGuilded/R03-dev
R03 Development
2 parents 5c88a23 + dbee21f commit 0436d6e

6 files changed

Lines changed: 151 additions & 122 deletions

File tree

package-lock.json

Lines changed: 15 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
11
{
2-
"name": "reguilded-setup",
2+
"name": "reguilded-installer",
33
"version": "0.0.2-alpha",
4-
"description": "ReGuilded Setup is an easy installer for ReGuilded.",
4+
"description": "ReGuilded Installer is an easy installer for ReGuilded.",
55
"main": "src/index.js",
66
"scripts": {
77
"app": "electron src/index.js",
88
"dist": "electron-builder"
99
},
1010
"repository": {
1111
"type": "git",
12-
"url": "git+https://github.com/ReGuilded/ReGuilded-Setup.git"
12+
"url": "git+https://github.com/ReGuilded/ReGuilded-Installer.git"
1313
},
1414
"author": "ReGuilded",
1515
"license": "MIT",
1616
"bugs": {
17-
"url": "https://github.com/ReGuilded/ReGuilded-Setup/issues"
17+
"url": "https://github.com/ReGuilded/ReGuilded-Installer/issues"
1818
},
19-
"homepage": "https://github.com/ReGuilded/ReGuilded-Setup#readme",
19+
"homepage": "https://github.com/ReGuilded/ReGuilded-Installer#readme",
2020
"dependencies": {
2121
"@electron/remote": "^2.0.1",
2222
"@octokit/core": "^3.5.1",
2323
"fs-extra": "^10.0.0",
2424
"got": "^11.8.2",
25+
"sudo-prompt": "^9.2.1",
2526
"unzipper": "^0.10.11"
2627
},
2728
"devDependencies": {
2829
"electron": "^15.3.0",
2930
"electron-builder": "^22.13.1"
3031
},
3132
"build": {
32-
"appId": "dev.reguilded.setup",
33-
"productName": "ReGuilded Setup",
33+
"appId": "dev.reguilded.installer",
34+
"productName": "ReGuilded Installer",
3435
"mac": {
3536
"category": "public.app-category.utilities",
3637
"target": "dmg",

src/app/actions/inject.js

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,54 @@
11
const { writeFile, access, mkdir } = require("fs");
2-
const { join, sep } = require("path");
32
const { exec } = require("child_process");
3+
const { join, sep } = require("path");
4+
const sudo = require("sudo-prompt");
45

5-
module.exports = async() => {
6-
// Define Guilded Directory from Global Variable for easy access.
7-
const guildedDir = window.platform.dir;
8-
9-
// Double Check if ReGuilded is already Injected.
10-
access(guildedDir, async (err) => {
11-
if (err) { // Not Injected
12-
// Path to the Patcher.
13-
const patcherPath = join(window.reguildedPath, "scripts/reguildedPatcher.js").replace(RegExp(sep.repeat(2), "g"), "/");
14-
15-
// Promise so the menu waits.
16-
await new Promise((resolve, reject) => {
6+
module.exports = () => {
7+
return new Promise((resolve, reject) => {
8+
// Define Guilded Directory from Global Variable for easy access.
9+
const guildedDir = window.platform.dir;
1710

18-
// Make the Guilded/Resources/App directory.
19-
mkdir(guildedDir, async (err) => {
20-
if (err) throw reject(err);
11+
// Double Check if ReGuilded is already Injected.
12+
access(guildedDir, async (err) => {
13+
if (err) { // Not Injected
14+
// Path to the Patcher.
15+
const patcherPath = join(window.reguildedPath, "scripts/reguildedPatcher.js").replace(RegExp(sep.repeat(2), "g"), "/");
2116

22-
// Create the Index File.
23-
else writeFile(join(guildedDir, "index.js"), `require("${patcherPath}");`, async (err) => {
17+
// Makes the Guilded/Resources/App directory.
18+
// Elevate for Linux and run Terminal Commands
19+
// Or use FS for Windows & Mac
20+
if (process.platform === "linux" && process.getuid() !== 0) {
21+
const command = `mkdir ${guildedDir} && echo '{"name": "Guilded", "main": "index.js"}' | tee -a ${join(guildedDir, "package.json")} > /dev/null &&` +
22+
`echo 'require("${patcherPath}")' | tee -a ${join(guildedDir, "index.js")} > /dev/null`
23+
sudo.exec(command, {name: "ReGuilded Installer"}, function(err, stdout, stderr) {
24+
if (err) throw reject(err);
25+
else resolve();
26+
});
27+
} else {
28+
mkdir(guildedDir, async (err) => {
2429
if (err) throw reject(err);
2530

26-
// Create the Package File.
27-
else writeFile(join(guildedDir, "package.json"), JSON.stringify({name: "Guilded", main: "index.js"}), async (err) => {
31+
// Create the Index File.
32+
else writeFile(join(guildedDir, "index.js"), `require("${patcherPath}");`, async (err) => {
2833
if (err) throw reject(err);
29-
else resolve();
34+
35+
// Create the Package File.
36+
else writeFile(join(guildedDir, "package.json"), JSON.stringify({name: "Guilded", main: "index.js"}), async (err) => {
37+
if (err) throw reject(err);
38+
else resolve();
39+
});
3040
});
3141
});
32-
});
33-
});
42+
}
3443

35-
// Relaunch Guilded
36-
exec(window.platform.close, () => {
37-
exec(window.platform.open(), (openError) => {
38-
if (openError)
39-
throw new Error("E" + openError);
44+
// Relaunch Guilded
45+
exec(window.platform.close, () => {
46+
exec(window.platform.open(), (openError) => {
47+
if (openError)
48+
throw new Error("E" + openError);
49+
})
4050
})
41-
})
42-
} else throw new Error("ALREADY_INJECTED");
43-
})
44-
}
51+
} else throw reject("ALREADY_INJECTED");
52+
});
53+
});
54+
};

src/app/actions/install.js

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,51 +9,53 @@ const { join } = require("path");
99
const fs = require("fs");
1010

1111
module.exports = async (devBuild) => {
12-
13-
const commit = gitHandler.getCommit(devBuild);
14-
15-
const reguildedDir = join(process.env.APPDATA ?? process.env.HOME, ".reguilded");
16-
const zipPath = reguildedDir + ".zip";
17-
18-
// Download Commit Zip.
19-
await new Promise((resolve, reject) => {
20-
stream(commit.zipUrl)
21-
.pipe(fs.createWriteStream(zipPath))
22-
.on("finish", function() {
23-
fs.createReadStream(zipPath)
24-
.pipe(Extract({ path: reguildedDir })).on("close", function () {
25-
fs.unlink(zipPath, (err) => {
26-
if (err) reject(err);
27-
else resolve();
28-
});
12+
return new Promise(async (resolve, reject) => {
13+
const commit = gitHandler.getCommit(devBuild);
14+
const reguildedDir = join(process.env.APPDATA ?? process.env.HOME, ".reguilded");
15+
const zipPath = reguildedDir + ".zip";
16+
17+
// Download Zip & Extract Zip
18+
await new Promise((zipResolve) => {
19+
stream(commit.zipUrl)
20+
.pipe(fs.createWriteStream(zipPath))
21+
.on("finish", function() {
22+
fs.createReadStream(zipPath)
23+
.pipe(Extract({ path: reguildedDir })).on("close", function () {
24+
fs.unlink(zipPath, (err) => {
25+
if (err) reject(err);
26+
else zipResolve();
27+
});
28+
});
2929
});
30-
});
31-
});
32-
33-
// Move downloaded files into `~/.reguilded` and then delete the old folder.
34-
await new Promise((resolve, reject) => {
35-
fs.readdir(reguildedDir, {withFileTypes: true}, (err, files) => {
36-
const dirs = files.filter(file => file.isDirectory());
37-
const gitDir = join(reguildedDir, dirs[0].name);
38-
const appDir = join(gitDir, "src/app");
39-
40-
copy(appDir, reguildedDir, { recursive: true, errorOnExist: false, overwrite: true}, (err) => {
41-
if (err) throw err;
42-
else {
43-
fs.rmdir(gitDir, {recursive: true}, (err) => {
44-
if (err) reject(err);
45-
else resolve();
46-
})
47-
}
48-
})
4930
});
50-
});
5131

52-
// Create new `.sha` file inside `~/.reguilded` that has the commitSha used for checking latest version.
53-
await new Promise((resolve, reject) => {
54-
fs.writeFile(join(reguildedDir, ".sha"), commit.commitSha, (err) => {
55-
if (err) reject(err);
56-
else resolve();
32+
// Move downloaded files into `~/.reguilded` and then delete the old folder.
33+
await new Promise((moveResolve) => {
34+
fs.readdir(reguildedDir, {withFileTypes: true}, (err, files) => {
35+
const dirs = files.filter(file => file.isDirectory());
36+
const gitDir = join(reguildedDir, dirs[0].name);
37+
const appDir = join(gitDir, "src/app");
38+
39+
copy(appDir, reguildedDir, { recursive: true, errorOnExist: false, overwrite: true}, (err) => {
40+
if (err) throw err;
41+
else {
42+
fs.rmdir(gitDir, {recursive: true}, (err) => {
43+
if (err) reject(err);
44+
else moveResolve();
45+
})
46+
}
47+
})
48+
});
5749
});
50+
51+
// Create new `.sha` file inside `~/.reguilded` that has the commitSha used for checking latest version.
52+
await new Promise((shaResolve) => {
53+
fs.writeFile(join(reguildedDir, ".sha"), commit.commitSha, (err) => {
54+
if (err) reject(err);
55+
else shaResolve();
56+
});
57+
})
58+
59+
resolve();
5860
});
5961
}

src/app/actions/uninject.js

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,44 @@
11
const { access, rm } = require("fs");
22
const { exec } = require("child_process");
3+
const sudo = require("sudo-prompt");
34

45
module.exports = async() => {
5-
// Define Guilded Directory from Global Variable for easy access.
6-
const guildedDir = window.platform.dir;
6+
return new Promise((resolve, reject) => {
7+
// Define Guilded Directory from Global Variable for easy access.
8+
const guildedDir = window.platform.dir;
79

8-
// Double Check if ReGuilded is injected.
9-
access(guildedDir, async(err) => {
10-
if (!err) { // Is Injected
10+
// Double Check if ReGuilded is injected.
11+
access(guildedDir, async(err) => {
12+
if (!err) { // Is Injected
1113

12-
// Promise so the menu waits.
13-
await new Promise((resolve, reject) => {
14+
await new Promise((uninjectResolve) => {
15+
// Removes the Guilded/Resources/App directory.
16+
// Elevate for Linux and run Terminal Commands
17+
// Or use FS for Windows & Mac
18+
if (process.platform === "linux" && process.getuid() !== 0) {
19+
const command = `rm -rf ${guildedDir}`
20+
sudo.exec(command, {name: "ReGuilded Installer"}, function(err, stdout, stderr) {
21+
if (err) throw reject(err);
22+
else uninjectResolve();
23+
});
24+
} else {
25+
rm(guildedDir, {force: true, recursive: true}, async (err) => {
26+
if (err) throw reject(err);
27+
else uninjectResolve();
28+
});
29+
}
30+
});
1431

15-
// Removes the Guilded/Resources/App directory.
16-
rm(guildedDir, {force: true, recursive: true}, async (err) => {
17-
if (err) throw reject(err);
18-
else resolve();
19-
})
20-
})
32+
// Relaunch Guilded
33+
exec(window.platform.close, () => {
34+
exec(window.platform.open(), (openError) => {
35+
if (openError)
36+
throw reject("E" + openError);
37+
});
38+
});
2139

22-
// Relaunch Guilded
23-
exec(window.platform.close, () => {
24-
exec(window.platform.open(), (openError) => {
25-
if (openError)
26-
throw new Error("E" + openError);
27-
})
28-
})
29-
} else throw new Error("INJECTION_NOT_FOUND");
30-
})
40+
resolve();
41+
} else throw reject("INJECTION_NOT_FOUND");
42+
});
43+
});
3144
}

src/app/index.js

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,13 @@ installBtn.addEventListener("click", async function(event) {
6464
// Call In Progress Handler.
6565
handleInProgress(installBtn, "Installing ReGuilded");
6666

67-
try {
68-
// Install ReGuilded and pass if the shiftKey was pressed or not.
69-
await install(event.shiftKey);
70-
67+
install(event.shiftKey).then(() => {
7168
// Setup Inject Button to replace Status Text.
7269
handleSuccess(injectBtn);
7370

7471
// Send IPC for Computer Notification.
7572
ipcRenderer.send("reguilded_setup", "finished_install");
76-
} catch (err) { handleError(installBtn, err); }
73+
}).catch((err) => { handleError(installBtn, err); })
7774

7875
// Debounce Over
7976
_debounce = false;
@@ -90,13 +87,11 @@ injectBtn.addEventListener("click", async function(event) {
9087
// Call In Progress Handler.
9188
handleInProgress(injectBtn, "Injecting ReGuilded");
9289

93-
try {
94-
// Inject ReGuilded
95-
await inject();
96-
90+
// Inject ReGuilded
91+
inject().then(() => {
9792
// Setup Uninject Button to replace Status Text.
9893
handleSuccess(uninjectBtn);
99-
} catch (err) { handleError(injectBtn, err); }
94+
}).catch((err) => { handleError(injectBtn, err); });
10095

10196
// Debounce Over
10297
_debounce = false;
@@ -112,13 +107,10 @@ uninjectBtn.addEventListener("click", async function(event) {
112107
// Call In Progress Handler.
113108
handleInProgress(uninjectBtn, "Uninjecting ReGuilded");
114109

115-
try {
116-
// Uninject ReGuilded
117-
await uninject();
118-
110+
uninject().then(() => {
119111
// Setup Uninject Button to replace Status Text.
120112
handleSuccess(injectBtn);
121-
} catch (err) { handleError(uninjectBtn, err); }
113+
}).catch((err) => { handleError(uninjectBtn, err); });
122114

123115
// Debounce Over
124116
_debounce = false;

0 commit comments

Comments
 (0)