Compare commits

..

No commits in common. "e3af7669d8e5739bb498eca5f369499d3e21de95" and "12a84c1cced491ae310908c9d0a86e18b0df2800" have entirely different histories.

7 changed files with 71 additions and 79 deletions

View File

@ -1,15 +1,17 @@
const fs = require('fs-extra') const fs = require('fs-extra')
const { LoggerUtil } = require('helios-core') const { LoggerUtil } = require('helios-core')
const { mcVersionAtLeast } = require('helios-core/common')
const os = require('os') const os = require('os')
const path = require('path') const path = require('path')
const logger = LoggerUtil.getLogger('ConfigManager') const logger = LoggerUtil.getLogger('ConfigManager')
const sysRoot = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME) const sysRoot = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME)
// TODO change
const dataPath = path.join(sysRoot, '.helioslauncher') const dataPath = path.join(sysRoot, '.helioslauncher')
const launcherDir = require('@electron/remote').app.getPath('userData') // Forked processes do not have access to electron, so we have this workaround.
const launcherDir = process.env.CONFIG_DIRECT_PATH || require('@electron/remote').app.getPath('userData')
/** /**
* Retrieve the absolute path of the launcher directory. * Retrieve the absolute path of the launcher directory.
@ -43,30 +45,24 @@ const configPath = path.join(exports.getLauncherDirectory(), 'config.json')
const configPathLEGACY = path.join(dataPath, 'config.json') const configPathLEGACY = path.join(dataPath, 'config.json')
const firstLaunch = !fs.existsSync(configPath) && !fs.existsSync(configPathLEGACY) const firstLaunch = !fs.existsSync(configPath) && !fs.existsSync(configPathLEGACY)
exports.getAbsoluteMinRAM = function(ram){ exports.getAbsoluteMinRAM = function(){
if(ram?.minimum != null) {
return ram.minimum/1024
} else {
// Legacy behavior
const mem = os.totalmem()
return mem >= (6*1073741824) ? 3 : 2
}
}
exports.getAbsoluteMaxRAM = function(ram){
const mem = os.totalmem() const mem = os.totalmem()
const gT16 = mem-(16*1073741824) return mem >= 6000000000 ? 3 : 2
return Math.floor((mem-(gT16 > 0 ? (Number.parseInt(gT16/8) + (16*1073741824)/4) : mem/4))/1073741824)
} }
function resolveSelectedRAM(ram) { exports.getAbsoluteMaxRAM = function(){
if(ram?.recommended != null) { const mem = os.totalmem()
return `${ram.recommended}M` const gT16 = mem-16000000000
} else { return Math.floor((mem-1000000000-(gT16 > 0 ? (Number.parseInt(gT16/8) + 16000000000/4) : mem/4))/1000000000)
// Legacy behavior }
const mem = os.totalmem()
return mem >= (8*1073741824) ? '4G' : (mem >= (6*1073741824) ? '3G' : '2G') function resolveMaxRAM(){
} const mem = os.totalmem()
return mem >= 8000000000 ? '4G' : (mem >= 6000000000 ? '3G' : '2G')
}
function resolveMinRAM(){
return resolveMaxRAM()
} }
/** /**
@ -507,18 +503,18 @@ exports.setModConfiguration = function(serverid, configuration){
// Java Settings // Java Settings
function defaultJavaConfig(effectiveJavaOptions, ram) { function defaultJavaConfig(mcVersion) {
if(effectiveJavaOptions.suggestedMajor > 8) { if(mcVersionAtLeast('1.17', mcVersion)) {
return defaultJavaConfig17(ram) return defaultJavaConfig117()
} else { } else {
return defaultJavaConfig8(ram) return defaultJavaConfigBelow117()
} }
} }
function defaultJavaConfig17(ram) { function defaultJavaConfigBelow117() {
return { return {
minRAM: resolveSelectedRAM(ram), minRAM: resolveMinRAM(),
maxRAM: resolveSelectedRAM(ram), maxRAM: resolveMaxRAM(), // Dynamic
executable: null, executable: null,
jvmOptions: [ jvmOptions: [
'-XX:+UseConcMarkSweepGC', '-XX:+UseConcMarkSweepGC',
@ -529,10 +525,10 @@ function defaultJavaConfig17(ram) {
} }
} }
function defaultJavaConfig8(ram) { function defaultJavaConfig117() {
return { return {
minRAM: resolveSelectedRAM(ram), minRAM: resolveMinRAM(),
maxRAM: resolveSelectedRAM(ram), maxRAM: resolveMaxRAM(), // Dynamic
executable: null, executable: null,
jvmOptions: [ jvmOptions: [
'-XX:+UnlockExperimentalVMOptions', '-XX:+UnlockExperimentalVMOptions',
@ -551,9 +547,9 @@ function defaultJavaConfig8(ram) {
* @param {string} serverid The server id. * @param {string} serverid The server id.
* @param {*} mcVersion The minecraft version of the server. * @param {*} mcVersion The minecraft version of the server.
*/ */
exports.ensureJavaConfig = function(serverid, effectiveJavaOptions, ram) { exports.ensureJavaConfig = function(serverid, mcVersion) {
if(!Object.prototype.hasOwnProperty.call(config.javaConfig, serverid)) { if(!Object.prototype.hasOwnProperty.call(config.javaConfig, serverid)) {
config.javaConfig[serverid] = defaultJavaConfig(effectiveJavaOptions, ram) config.javaConfig[serverid] = defaultJavaConfig(mcVersion)
} }
} }

View File

@ -174,11 +174,11 @@ class ProcessBuilder {
const v = this.resolveModConfiguration(modCfg[mdl.getVersionlessMavenIdentifier()].mods, mdl.subModules) const v = this.resolveModConfiguration(modCfg[mdl.getVersionlessMavenIdentifier()].mods, mdl.subModules)
fMods = fMods.concat(v.fMods) fMods = fMods.concat(v.fMods)
lMods = lMods.concat(v.lMods) lMods = lMods.concat(v.lMods)
if(type === Type.LiteLoader){ if(mdl.type === Type.LiteLoader){
continue continue
} }
} }
if(type === Type.ForgeMod){ if(mdl.type === Type.ForgeMod){
fMods.push(mdl) fMods.push(mdl)
} else { } else {
lMods.push(mdl) lMods.push(mdl)
@ -241,11 +241,11 @@ class ProcessBuilder {
const ids = [] const ids = []
if(type === 'forge'){ if(type === 'forge'){
for(let mod of mods){ for(let mod of mods){
ids.push(mod.getExtensionlessMavenIdentifier()) ids.push(mod.getExtensionlessID())
} }
} else { } else {
for(let mod of mods){ for(let mod of mods){
ids.push(mod.getMavenIdentifier()) ids.push(mod.getExtensionlessID() + '@' + mod.getExtension())
} }
} }
modList.modRef = ids modList.modRef = ids
@ -265,7 +265,7 @@ class ProcessBuilder {
// */ // */
// constructModArguments(mods){ // constructModArguments(mods){
// const argStr = mods.map(mod => { // const argStr = mods.map(mod => {
// return mod.getExtensionlessMavenIdentifier() // return mod.getExtensionlessID()
// }).join(',') // }).join(',')
// if(argStr){ // if(argStr){
@ -288,7 +288,7 @@ class ProcessBuilder {
*/ */
constructModList(mods) { constructModList(mods) {
const writeBuffer = mods.map(mod => { const writeBuffer = mods.map(mod => {
return mod.getExtensionlessMavenIdentifier() return mod.getExtensionlessID()
}).join('\n') }).join('\n')
if(writeBuffer) { if(writeBuffer) {

View File

@ -540,8 +540,8 @@ async function dlAsync(login = true) {
toggleLaunchArea(false) toggleLaunchArea(false)
if(hasRPC){ if(hasRPC){
DiscordWrapper.updateDetails('Loading game..') DiscordWrapper.updateDetails('Loading game..')
proc.stdout.on('data', gameStateChange)
} }
proc.stdout.on('data', gameStateChange)
proc.stdout.removeListener('data', tempListener) proc.stdout.removeListener('data', tempListener)
proc.stderr.removeListener('data', gameErrorListener) proc.stderr.removeListener('data', gameErrorListener)
} }
@ -789,7 +789,7 @@ function initNews(){
let news = {} let news = {}
loadNews().then(news => { loadNews().then(news => {
newsArr = news?.articles || null newsArr = news.articles || null
if(newsArr == null){ if(newsArr == null){
// News Loading Failed // News Loading Failed
@ -938,10 +938,6 @@ function displayArticle(articleObject, index){
async function loadNews(){ async function loadNews(){
const distroData = await DistroAPI.getDistribution() const distroData = await DistroAPI.getDistribution()
if(!distroData.rawDistribution.rss) {
loggerLanding.debug('No RSS feed provided.')
return null
}
const promise = new Promise((resolve, reject) => { const promise = new Promise((resolve, reject) => {

View File

@ -156,7 +156,7 @@ async function initSettingsValues(){
if(cVal === 'MinRAM' || cVal === 'MaxRAM'){ if(cVal === 'MinRAM' || cVal === 'MaxRAM'){
let val = gFn.apply(null, gFnOpts) let val = gFn.apply(null, gFnOpts)
if(val.endsWith('M')){ if(val.endsWith('M')){
val = Number(val.substring(0, val.length-1))/1024 val = Number(val.substring(0, val.length-1))/1000
} else { } else {
val = Number.parseFloat(val) val = Number.parseFloat(val)
} }
@ -1158,6 +1158,16 @@ const settingsJavaExecDetails = document.getElementById('settingsJavaExecDetails
const settingsJavaReqDesc = document.getElementById('settingsJavaReqDesc') const settingsJavaReqDesc = document.getElementById('settingsJavaReqDesc')
const settingsJvmOptsLink = document.getElementById('settingsJvmOptsLink') const settingsJvmOptsLink = document.getElementById('settingsJvmOptsLink')
// Store maximum memory values.
const SETTINGS_MAX_MEMORY = ConfigManager.getAbsoluteMaxRAM()
const SETTINGS_MIN_MEMORY = ConfigManager.getAbsoluteMinRAM()
// Set the max and min values for the ranged sliders.
settingsMaxRAMRange.setAttribute('max', SETTINGS_MAX_MEMORY)
settingsMaxRAMRange.setAttribute('min', SETTINGS_MIN_MEMORY)
settingsMinRAMRange.setAttribute('max', SETTINGS_MAX_MEMORY)
settingsMinRAMRange.setAttribute('min', SETTINGS_MIN_MEMORY )
// Bind on change event for min memory container. // Bind on change event for min memory container.
settingsMinRAMRange.onchange = (e) => { settingsMinRAMRange.onchange = (e) => {
@ -1168,7 +1178,7 @@ settingsMinRAMRange.onchange = (e) => {
// Get reference to range bar. // Get reference to range bar.
const bar = e.target.getElementsByClassName('rangeSliderBar')[0] const bar = e.target.getElementsByClassName('rangeSliderBar')[0]
// Calculate effective total memory. // Calculate effective total memory.
const max = os.totalmem()/1073741824 const max = (os.totalmem()-1000000000)/1000000000
// Change range bar color based on the selected value. // Change range bar color based on the selected value.
if(sMinV >= max/2){ if(sMinV >= max/2){
@ -1200,7 +1210,7 @@ settingsMaxRAMRange.onchange = (e) => {
// Get reference to range bar. // Get reference to range bar.
const bar = e.target.getElementsByClassName('rangeSliderBar')[0] const bar = e.target.getElementsByClassName('rangeSliderBar')[0]
// Calculate effective total memory. // Calculate effective total memory.
const max = os.totalmem()/1073741824 const max = (os.totalmem()-1000000000)/1000000000
// Change range bar color based on the selected value. // Change range bar color based on the selected value.
if(sMaxV >= max/2){ if(sMaxV >= max/2){
@ -1328,8 +1338,8 @@ function updateRangedSlider(element, value, notch){
* Display the total and available RAM. * Display the total and available RAM.
*/ */
function populateMemoryStatus(){ function populateMemoryStatus(){
settingsMemoryTotal.innerHTML = Number((os.totalmem()-1073741824)/1073741824).toFixed(1) + 'G' settingsMemoryTotal.innerHTML = Number((os.totalmem()-1000000000)/1000000000).toFixed(1) + 'G'
settingsMemoryAvail.innerHTML = Number(os.freemem()/1073741824).toFixed(1) + 'G' settingsMemoryAvail.innerHTML = Number(os.freemem()/1000000000).toFixed(1) + 'G'
} }
/** /**
@ -1350,11 +1360,15 @@ async function populateJavaExecDetails(execPath){
} }
} }
function populateJavaReqDesc(server) { // TODO Update to use semver range
async function populateJavaReqDesc() {
const server = (await DistroAPI.getDistribution()).getServerById(ConfigManager.getSelectedServer())
settingsJavaReqDesc.innerHTML = `Requires Java ${server.effectiveJavaOptions.suggestedMajor} x64.` settingsJavaReqDesc.innerHTML = `Requires Java ${server.effectiveJavaOptions.suggestedMajor} x64.`
} }
function populateJvmOptsLink(server) { // TODO Update to use semver range
async function populateJvmOptsLink() {
const server = (await DistroAPI.getDistribution()).getServerById(ConfigManager.getSelectedServer())
const major = server.effectiveJavaOptions.suggestedMajor const major = server.effectiveJavaOptions.suggestedMajor
settingsJvmOptsLink.innerHTML = `Available Options for Java ${major} (HotSpot VM)` settingsJvmOptsLink.innerHTML = `Available Options for Java ${major} (HotSpot VM)`
if(major >= 12) { if(major >= 12) {
@ -1371,28 +1385,14 @@ function populateJvmOptsLink(server) {
} }
} }
function bindMinMaxRam(server) {
// Store maximum memory values.
const SETTINGS_MAX_MEMORY = ConfigManager.getAbsoluteMaxRAM(server.rawServer.javaOptions?.ram)
const SETTINGS_MIN_MEMORY = ConfigManager.getAbsoluteMinRAM(server.rawServer.javaOptions?.ram)
// Set the max and min values for the ranged sliders.
settingsMaxRAMRange.setAttribute('max', SETTINGS_MAX_MEMORY)
settingsMaxRAMRange.setAttribute('min', SETTINGS_MIN_MEMORY)
settingsMinRAMRange.setAttribute('max', SETTINGS_MAX_MEMORY)
settingsMinRAMRange.setAttribute('min', SETTINGS_MIN_MEMORY)
}
/** /**
* Prepare the Java tab for display. * Prepare the Java tab for display.
*/ */
async function prepareJavaTab(){ async function prepareJavaTab(){
const server = (await DistroAPI.getDistribution()).getServerById(ConfigManager.getSelectedServer()) bindRangeSlider()
bindMinMaxRam(server)
bindRangeSlider(server)
populateMemoryStatus() populateMemoryStatus()
populateJavaReqDesc(server) await populateJavaReqDesc()
populateJvmOptsLink(server) await populateJvmOptsLink()
} }
/** /**

View File

@ -234,7 +234,7 @@ function ensureJavaSettings(data) {
// Nothing too fancy for now. // Nothing too fancy for now.
for(const serv of data.servers){ for(const serv of data.servers){
ConfigManager.ensureJavaConfig(serv.rawServer.id, serv.effectiveJavaOptions, serv.rawServer.javaOptions?.ram) ConfigManager.ensureJavaConfig(serv.rawServer.id, serv.rawServer.minecraftVersion)
} }
ConfigManager.save() ConfigManager.save()
@ -458,8 +458,8 @@ ipcRenderer.on('distributionIndexDone', async (event, res) => {
// Util for development // Util for development
async function devModeToggle() { async function devModeToggle() {
DistroAPI.toggleDevMode(true) DistroAPI.toggleDevMode(true)
const data = await DistroAPI.refreshDistributionOrFallback() const data = await DistroAPI.getDistributionLocalLoadOnly()
ensureJavaSettings(data) ensureJavaSettings(data)
updateSelectedServer(data.servers[0]) updateSelectedServer(data.getServers()[0])
syncModConfigurations(data) syncModConfigurations(data)
} }

8
package-lock.json generated
View File

@ -19,7 +19,7 @@
"fs-extra": "^11.1.0", "fs-extra": "^11.1.0",
"github-syntax-dark": "^0.5.0", "github-syntax-dark": "^0.5.0",
"got": "^11.8.5", "got": "^11.8.5",
"helios-core": "~0.2.0-pre.2", "helios-core": "~0.2.0-pre.1",
"helios-distribution-types": "^1.2.0-pre.1", "helios-distribution-types": "^1.2.0-pre.1",
"jquery": "^3.6.1", "jquery": "^3.6.1",
"semver": "^7.3.8" "semver": "^7.3.8"
@ -2180,9 +2180,9 @@
} }
}, },
"node_modules/helios-core": { "node_modules/helios-core": {
"version": "0.2.0-pre.2", "version": "0.2.0-pre.1",
"resolved": "https://registry.npmjs.org/helios-core/-/helios-core-0.2.0-pre.2.tgz", "resolved": "https://registry.npmjs.org/helios-core/-/helios-core-0.2.0-pre.1.tgz",
"integrity": "sha512-rS9xa2CfQBa+2uINOhIYFSR/nDZQJp8DJrbHXxKFSRckGvdPWwandEwwFoN+bwm3bPSdVhCe2xiSESbMK86UOA==", "integrity": "sha512-hH5AtEZMVRR8/Wstq/8xOrL773p8+wrXZoqTbeqTGcLn1bv9+vmh9ifIAuAQUNaWxXgE/t/Nrw0ph0QJQ/NA6g==",
"dependencies": { "dependencies": {
"fastq": "^1.15.0", "fastq": "^1.15.0",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",

View File

@ -33,7 +33,7 @@
"fs-extra": "^11.1.0", "fs-extra": "^11.1.0",
"github-syntax-dark": "^0.5.0", "github-syntax-dark": "^0.5.0",
"got": "^11.8.5", "got": "^11.8.5",
"helios-core": "~0.2.0-pre.2", "helios-core": "~0.2.0-pre.1",
"helios-distribution-types": "^1.2.0-pre.1", "helios-distribution-types": "^1.2.0-pre.1",
"jquery": "^3.6.1", "jquery": "^3.6.1",
"semver": "^7.3.8" "semver": "^7.3.8"