Added support for optional submods of required mods.

This commit is contained in:
Daniel Scalzi 2018-07-29 16:32:41 +02:00
parent 60ba7b4f8a
commit 0c98cc2447
No known key found for this signature in database
GPG Key ID: 5CA2F145B63535F9
3 changed files with 50 additions and 18 deletions

View File

@ -96,7 +96,7 @@ class ProcessBuilder {
* @returns {boolean} True if the mod is enabled, false otherwise. * @returns {boolean} True if the mod is enabled, false otherwise.
*/ */
static isModEnabled(modCfg, required = null){ static isModEnabled(modCfg, required = null){
return modCfg != null ? ((typeof modCfg === 'boolean' && modCfg) || (typeof modCfg === 'object' && modCfg.value)) : required != null ? required.isDefault() : true return modCfg != null ? ((typeof modCfg === 'boolean' && modCfg) || (typeof modCfg === 'object' && (typeof modCfg.value !== 'undefined' ? modCfg.value : true))) : required != null ? required.isDefault() : true
} }
/** /**

View File

@ -465,7 +465,7 @@ function parseModulesForUI(mdls, submodules = false, servConf){
</label> </label>
</div> </div>
${mdl.hasSubModules() ? `<div class="settingsSubModContainer"> ${mdl.hasSubModules() ? `<div class="settingsSubModContainer">
${Object.values(parseModulesForUI(mdl.getSubModules(), true)).join('')} ${Object.values(parseModulesForUI(mdl.getSubModules(), true, servConf[mdl.getVersionlessID()])).join('')}
</div>` : ''} </div>` : ''}
</div>` </div>`
@ -541,12 +541,14 @@ function saveModConfiguration(){
*/ */
function _saveModConfiguration(modConf){ function _saveModConfiguration(modConf){
for(m of Object.entries(modConf)){ for(m of Object.entries(modConf)){
const val = settingsModsContainer.querySelectorAll(`[formod='${m[0]}']`)[0].checked const tSwitch = settingsModsContainer.querySelectorAll(`[formod='${m[0]}']`)
if(typeof m[1] === 'boolean'){ if(typeof m[1] === 'boolean'){
modConf[m[0]] = val modConf[m[0]] = tSwitch[0].checked
} else { } else {
if(m[1] != null){ if(m[1] != null){
modConf[m[0]].value = val if(tSwitch.length > 0){
modConf[m[0]].value = tSwitch[0].checked
}
modConf[m[0]].mods = _saveModConfiguration(modConf[m[0]].mods) modConf[m[0]].mods = _saveModConfiguration(modConf[m[0]].mods)
} }
} }

View File

@ -167,7 +167,19 @@ function syncModConfigurations(data){
if(modsOld[mdlID] == null){ if(modsOld[mdlID] == null){
mods[mdlID] = scanOptionalSubModules(mdl.getSubModules(), mdl) mods[mdlID] = scanOptionalSubModules(mdl.getSubModules(), mdl)
} else { } else {
mods[mdlID] = mergeModConfiguration(modsOld[mdlID], scanOptionalSubModules(mdl.getSubModules(), mdl)) mods[mdlID] = mergeModConfiguration(modsOld[mdlID], scanOptionalSubModules(mdl.getSubModules(), mdl), false)
}
} else {
if(mdl.hasSubModules()){
const mdlID = mdl.getVersionlessID()
const v = scanOptionalSubModules(mdl.getSubModules(), mdl)
if(typeof v === 'object'){
if(modsOld[mdlID] == null){
mods[mdlID] = v
} else {
mods[mdlID] = mergeModConfiguration(modsOld[mdlID], v, true)
}
}
} }
} }
} }
@ -187,6 +199,13 @@ function syncModConfigurations(data){
if(type === DistroManager.Types.ForgeMod || type === DistroManager.Types.LiteMod || type === DistroManager.Types.LiteLoader){ if(type === DistroManager.Types.ForgeMod || type === DistroManager.Types.LiteMod || type === DistroManager.Types.LiteLoader){
if(!mdl.getRequired().isRequired()){ if(!mdl.getRequired().isRequired()){
mods[mdl.getVersionlessID()] = scanOptionalSubModules(mdl.getSubModules(), mdl) mods[mdl.getVersionlessID()] = scanOptionalSubModules(mdl.getSubModules(), mdl)
} else {
if(mdl.hasSubModules()){
const v = scanOptionalSubModules(mdl.getSubModules(), mdl)
if(typeof v === 'object'){
mods[mdl.getVersionlessID()] = v
}
}
} }
} }
} }
@ -221,15 +240,25 @@ function scanOptionalSubModules(mdls, origin){
// It is optional. // It is optional.
if(!mdl.getRequired().isRequired()){ if(!mdl.getRequired().isRequired()){
mods[mdl.getVersionlessID()] = scanOptionalSubModules(mdl.getSubModules(), mdl) mods[mdl.getVersionlessID()] = scanOptionalSubModules(mdl.getSubModules(), mdl)
} else {
if(mdl.hasSubModules()){
const v = scanOptionalSubModules(mdl.getSubModules(), mdl)
if(typeof v === 'object'){
mods[mdl.getVersionlessID()] = v
}
}
} }
} }
} }
if(Object.keys(mods).length > 0){ if(Object.keys(mods).length > 0){
return { const ret = {
value: origin.getRequired().isDefault(),
mods mods
} }
if(!origin.getRequired().isRequired()){
ret.value = origin.getRequired().isDefault()
}
return ret
} }
} }
return origin.getRequired().isDefault() return origin.getRequired().isDefault()
@ -240,20 +269,25 @@ function scanOptionalSubModules(mdls, origin){
* *
* @param {boolean | Object} o The old configuration value. * @param {boolean | Object} o The old configuration value.
* @param {boolean | Object} n The new configuration value. * @param {boolean | Object} n The new configuration value.
* @param {boolean} nReq If the new value is a required mod.
* *
* @returns {boolean | Object} The merged configuration. * @returns {boolean | Object} The merged configuration.
*/ */
function mergeModConfiguration(o, n){ function mergeModConfiguration(o, n, nReq = false){
if(typeof o === 'boolean'){ if(typeof o === 'boolean'){
if(typeof n === 'boolean') return o if(typeof n === 'boolean') return o
else if(typeof n === 'object'){ else if(typeof n === 'object'){
if(!nReq){
n.value = o n.value = o
}
return n return n
} }
} else if(typeof o === 'object'){ } else if(typeof o === 'object'){
if(typeof n === 'boolean') return o.value if(typeof n === 'boolean') return typeof o.value !== 'undefined' ? o.value : true
else if(typeof n === 'object'){ else if(typeof n === 'object'){
n.value = o.value if(!nReq){
n.value = typeof o.value !== 'undefined' ? o.value : true
}
const newMods = Object.keys(n.mods) const newMods = Object.keys(n.mods)
for(let i=0; i<newMods.length; i++){ for(let i=0; i<newMods.length; i++){
@ -346,6 +380,7 @@ document.addEventListener('readystatechange', function(){
if (document.readyState === 'interactive' || document.readyState === 'complete'){ if (document.readyState === 'interactive' || document.readyState === 'complete'){
if(rscShouldLoad){ if(rscShouldLoad){
rscShouldLoad = false
if(!fatalStartupError){ if(!fatalStartupError){
const data = DistroManager.getDistribution() const data = DistroManager.getDistribution()
showMainUI(data) showMainUI(data)
@ -353,13 +388,8 @@ document.addEventListener('readystatechange', function(){
showFatalStartupError() showFatalStartupError()
} }
} }
}// else if(document.readyState === 'interactive'){ }
//toggleOverlay(true, 'loadingContent')
//}
/*if (document.readyState === 'interactive'){
}*/
}, false) }, false)
// Actions that must be performed after the distribution index is downloaded. // Actions that must be performed after the distribution index is downloaded.