const ModPackage = require('./ModPackage')
const constants = require('./util/constants.json'),
promisify = require('./util/promisify')
const create = (name, ...children) => {
let classList = name.split('.')
ele = document.createElement(classList.shift() || 'div')
if(classList)
ele.classList = classList.join(' ')
children.forEach(child =>
typeof(child) == 'string' ? ele.innerText += child : ele.appendChild(child)
)
return ele
}
const openAsync = promisify($file.open)
class Launcher {
constructor(app) {
const self = this
const options = {
title: 'Xash3D Launcher',
// html: app.bundle.openSync('./launcher.html', 'String'),
bodyClass: 'skin_inset xash3d_launcher',
width: 350,
height: 400,
// onready() {
// const { iframe } = launcher.el,
// win = iframe.contentWindow
// win.app = self
// handleIframe(iframe)
// },
// TODO: move to actual mods folder
onready() {
console.log(this)
self.modList = this.el.body.appendChild(create('ul') )
self.loadMods()
},
footer: `
v${app.version}
`
}
this.app = app
this.window = $window(options)
}
async loadMods() {
let { modPath } = constants.paths,
files = $io.obj.getPath(window.le._files, modPath, '/'),
out = []
console.log(files)
if(files) {
for(let name in files)
if(files[name] == 0 && $fs.utils.getExt(name) == 'asar') {
let path = modPath + name,
promise = openAsync(path, 'ArrayBuffer')
.then(async buffer => ({
name,
path,
size: buffer.byteLength,
manifest: await ModPackage.unpack(buffer, true)
.then(data => JSON.parse(data.manifestString) )
}))
out.push(promise)
}
}
out = await Promise.all(out)
out
.map(mod => this.renderMod(mod))
.map(ele => this.modList.appendChild(ele) )
}
renderMod(mod) {
// const mod = document.createElement('div'),
// header = document.createElement('header'),
// info = document.createElement('div')
// modName = document.createElement('h5'),
// modInfo = document.createElement('span'),
// launch = document.createElement('div')
// header.appendChild(modName)
// header.appendChild(modInfo)
// mod.appendChild('header')
let self = this,
launch,
element = create('.mod.skin_outset',
create('header',
create('.info',
create('h5', mod.manifest.name),
create('span', `${mod.name} | ${parseInt(mod.size / 1_000_000)}mb`)
),
launch = create('.launch')
)
)
launch.onclick = () => {
self.app.launch(mod.path)
self.window.destroy()
}
return element
}
}
module.exports = Launcher