From f36174e55b8b42ae4da5d5e6520fa2f306b8e9be Mon Sep 17 00:00:00 2001 From: Oj Date: Sat, 18 Dec 2021 20:20:48 +0000 Subject: [PATCH] [AsarUpdate] Disable update prompt by default, rewrite to be async --- README.md | 13 +++++--- src/asarUpdate.js | 82 ++++++++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 4f9dd29..95b276f 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,18 @@ OpenAsar is highly stable, but still likely has a few possible minor issues. Cra ## Config -You can configure OpenAsar via `settings.json` (found in your Discord app data / user data), under a `openasar` object. Keep in mind most options are defaults for good reason. The avaliable options are: +You can configure OpenAsar via `settings.json` (found in your Discord app data / user data), under a `openasar` object. Keep in mind most options are defaults for good reason. + +### OpenAsar Options - `quickstart` (bool, default false) - whether to use Quickstart (experimental) - `themeSync` (bool, default true) - syncs your modded client's theme with splash theming - `autoupdate` (bool, default true) - whether to autoupdate OpenAsar after Discord startup -- `multiInstance` (bool, default false) - whether to enable multi-instance -- `ssoeAllowlist` (bool, default true) - whether to use safer custom method of opening external urls (true) or normal Discord's method (false) +- `updatePrompt` (bool, default false) - whether to show update prompt after updating OpenAsar - `splashText` (bool, default true) - whether to show bottom right version info text in splash +- `ssoeAllowlist` (bool, default true) - whether to use safer custom method of opening external urls (true) or normal Discord's method (false) + +### Extra Discord Options +- `multiInstance` (bool, default false) - whether to enable multi-instance - `skipStartupUpdateChecks` (bool, default false) - skips startup update checking (Linux-only) An example of a settings.json with OpenAsar config: @@ -58,4 +63,4 @@ An example of a settings.json with OpenAsar config: Additionally there are some environmental variables you can use: - `OPENASAR_QUICKSTART` (bool, default false) - same as `quickstart` config option -- `OPENASAR_NOSTART` (bool, default false) - if enabled halts starting after splash loads (for splash testing) +- `OPENASAR_NOSTART` (bool, default false) - if enabled halts starting after splash loads (for splash testing) \ No newline at end of file diff --git a/src/asarUpdate.js b/src/asarUpdate.js index 3b055f4..fc668e8 100644 --- a/src/asarUpdate.js +++ b/src/asarUpdate.js @@ -15,7 +15,7 @@ const channel = 'nightly'; // Have prod, etc. once stable / 1.0 const getAsarHash = () => crypto.createHash('sha512').update(fs.readFileSync(asarPath)).digest('hex'); -module.exports = () => { // (Try) update asar +module.exports = async () => { // (Try) update asar log('AsarUpdate', 'Updating...'); if (!oaVersion.startsWith('nightly-')) { @@ -28,55 +28,63 @@ module.exports = () => { // (Try) update asar const originalHash = getAsarHash(); log('AsarUpdate', 'Original Hash:', originalHash); - const file = fs.createWriteStream(asarPath); + const updateSuccess = await new Promise((res) => { + const file = fs.createWriteStream(asarPath); - let writeError = false; - file.on('error', err => { - log('AsarUpdate', 'Failed to write', err); - file.close(); + let writeError = false; + file.on('error', err => { + log('AsarUpdate', 'Failed to write', err); + file.close(); - writeError = true; + writeError = true; + res(false); + }); + + log('AsarUpdate', 'Opened write stream to asar'); + + request(asarUrl, (_err, res) => { + if (writeError) return; + + log('AsarUpdate', 'Piping download response to stream'); + res.pipe(file); + }); + + file.on('finish', () => { + file.close(); + res(true); + }); }); - log('AsarUpdate', 'Opened write stream to asar'); + if (!updateSuccess) { + log('AsarUpdate', 'Aborting rest of update due to update error'); + return; + } - request(asarUrl, (_err, res) => { - log('AsarUpdate', 'Piping download response to stream'); - res.pipe(file); - }); + log('AsarUpdate', 'Completed download'); - file.on('finish', async () => { - file.close(); - log('AsarUpdate', 'Completed download'); + const newHash = getAsarHash(); + const changed = originalHash !== newHash; - const newHash = getAsarHash(); - const changed = originalHash !== newHash; - - log('AsarUpdate', `Hash Comparison: + log('AsarUpdate', `Hash Comparison: Original Hash: ${originalHash} New Hash: ${newHash} Changed: ${changed}`); - if (changed) { - const { response } = await electron.dialog.showMessageBox(null, { - message: 'Updated OpenAsar', - detail: `Restart required to use new version.`, - buttons: ['Restart Now', 'Later'], - defaultId: 0 - }); + if (changed && oaConfig.updatePrompt === true) { + const { response } = await electron.dialog.showMessageBox(null, { + message: 'Updated OpenAsar', + detail: `Restart required to use new version.`, + buttons: ['Restart Now', 'Later'], + defaultId: 0 + }); - log('AsarUpdate', 'Modal response', response); + log('AsarUpdate', 'Modal response', response); - if (response === 0) { - log('AsarUpdate', 'Restarting'); + if (response === 0) { + log('AsarUpdate', 'Restarting'); - electron.app.relaunch(); - electron.app.exit(); - } + electron.app.relaunch(); + electron.app.exit(); } - - if (writeError) { - // Warn message? - } - }); + } }; \ No newline at end of file