From 9a2c1fd9b94471838968165b4b3c7493e772b598 Mon Sep 17 00:00:00 2001 From: Daniel Scalzi Date: Tue, 8 Sep 2020 21:25:19 -0400 Subject: [PATCH] Use corretto on macOS since they use an older version of Xcode. (#70) Vendor name is now displayed above the selected Java version on the settings page. This is to allow for easier differentiation between versions (ex. Amazon Corretto vs AdoptOpenJDK). --- app/assets/js/assetguard.js | 62 ++++++++++++++++++++++++++++++- app/assets/js/scripts/settings.js | 5 ++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/app/assets/js/assetguard.js b/app/assets/js/assetguard.js index 0db05e56..0e8320cf 100644 --- a/app/assets/js/assetguard.js +++ b/app/assets/js/assetguard.js @@ -266,7 +266,11 @@ class JavaGuard extends EventEmitter { */ /** - * Fetch the last open JDK binary. Uses https://api.adoptopenjdk.net/ + * Fetch the last open JDK binary. + * + * HOTFIX: Uses Corretto 8 for macOS. + * See: https://github.com/dscalzi/HeliosLauncher/issues/70 + * See: https://github.com/AdoptOpenJDK/openjdk-support/issues/101 * * @param {string} major The major version of Java to fetch. * @@ -274,6 +278,15 @@ class JavaGuard extends EventEmitter { */ static _latestOpenJDK(major = '8'){ + if(process.platform === 'darwin') { + return this._latestCorretto(major) + } else { + return this._latestAdoptOpenJDK(major) + } + } + + static _latestAdoptOpenJDK(major) { + const sanitizedOS = process.platform === 'win32' ? 'windows' : (process.platform === 'darwin' ? 'mac' : process.platform) const url = `https://api.adoptopenjdk.net/v2/latestAssets/nightly/openjdk${major}?os=${sanitizedOS}&arch=x64&heap_size=normal&openjdk_impl=hotspot&type=jre` @@ -291,6 +304,48 @@ class JavaGuard extends EventEmitter { } }) }) + + } + + static _latestCorretto(major) { + + let sanitizedOS, ext + + switch(process.platform) { + case 'win32': + sanitizedOS = 'windows' + ext = 'zip' + break + case 'darwin': + sanitizedOS = 'macos' + ext = 'tar.gz' + break + case 'linux': + sanitizedOS = 'linux' + ext = 'tar.gz' + break + default: + sanitizedOS = process.platform + ext = 'tar.gz' + break + } + + const url = `https://corretto.aws/downloads/latest/amazon-corretto-${major}-x64-${sanitizedOS}-jdk.${ext}` + + return new Promise((resolve, reject) => { + request.head({url, json: true}, (err, resp) => { + if(!err && resp.statusCode === 200){ + resolve({ + uri: url, + size: parseInt(resp.headers['content-length']), + name: url.substr(url.lastIndexOf('/')+1) + }) + } else { + resolve(null) + } + }) + }) + } /** @@ -455,6 +510,11 @@ class JavaGuard extends EventEmitter { } */ } } + // Space included so we get only the vendor. + } else if(props[i].lastIndexOf('java.vendor ') > -1) { + let vendorName = props[i].split('=')[1].trim() + console.log(props[i].trim()) + meta.vendor = vendorName } } diff --git a/app/assets/js/scripts/settings.js b/app/assets/js/scripts/settings.js index 23ef79c0..4412a7aa 100644 --- a/app/assets/js/scripts/settings.js +++ b/app/assets/js/scripts/settings.js @@ -1139,10 +1139,11 @@ function populateJavaExecDetails(execPath){ const jg = new JavaGuard(DistroManager.getDistribution().getServer(ConfigManager.getSelectedServer()).getMinecraftVersion()) jg._validateJavaBinary(execPath).then(v => { if(v.valid){ + const vendor = v.vendor != null ? ` (${v.vendor})` : '' if(v.version.major < 9) { - settingsJavaExecDetails.innerHTML = `Selected: Java ${v.version.major} Update ${v.version.update} (x${v.arch})` + settingsJavaExecDetails.innerHTML = `Selected: Java ${v.version.major} Update ${v.version.update} (x${v.arch})${vendor}` } else { - settingsJavaExecDetails.innerHTML = `Selected: Java ${v.version.major}.${v.version.minor}.${v.version.revision} (x${v.arch})` + settingsJavaExecDetails.innerHTML = `Selected: Java ${v.version.major}.${v.version.minor}.${v.version.revision} (x${v.arch})${vendor}` } } else { settingsJavaExecDetails.innerHTML = 'Invalid Selection'