Minor fixes, beginning work on configuration system.

This commit is contained in:
Daniel Scalzi 2017-11-22 05:48:40 -05:00
parent 2c7dc16247
commit 5352239f91
4 changed files with 75 additions and 19 deletions

View File

@ -0,0 +1,47 @@
const fs = require('fs')
const path = require('path')
const uuidV4 = require('uuid/v4')
class ConfigManager {
constructor(path){
this.path = path
this.config = null
this.load()
}
/**
* Generates a default configuration object and saves it.
*
* @param {Boolean} save - optional. If true, the default config will be saved after being generated.
*/
_generateDefault(save = true){
this.config = {
settings: {},
clientToken: uuidV4(),
authenticationDatabase: []
}
if(save){
this.save()
}
}
load(){
if(!fs.existsSync(this.path)){
this._generateDefault()
} else {
this.config = JSON.parse(fs.readFileSync(this.path, 'UTF-8'))
}
}
save(){
fs.writeFileSync(this.path, JSON.stringify(this.config, null, 4), 'UTF-8')
}
getClientToken(){
return this.config.clientToken
}
}
module.exports = ConfigManager

View File

@ -0,0 +1,6 @@
const path = require('path')
const ConfigManager = require('./configmanager')
//TODO: Resolve game directory based on windows, linux, or mac..
exports.GAME_DIRECTORY = path.join(__dirname, '..', '..', '..', 'target', 'test', 'mcfiles')
exports.DEFAULT_CONFIG = new ConfigManager(path.join(exports.GAME_DIRECTORY, 'config.yml'))

View File

@ -6,7 +6,7 @@ const os = require('os');
const ag = require(path.join(__dirname, 'assets', 'js', 'assetguard.js')) const ag = require(path.join(__dirname, 'assets', 'js', 'assetguard.js'))
const ProcessBuilder = require(path.join(__dirname, 'assets', 'js', 'processbuilder.js')) const ProcessBuilder = require(path.join(__dirname, 'assets', 'js', 'processbuilder.js'))
const mojang = require('mojang') const mojang = require('mojang')
const uuidV4 = require('uuid/v4') const {GAME_DIRECTORY, DEFAULT_CONFIG} = require(path.join(__dirname, 'assets', 'js', 'constants.js'))
$(document).on('ready', function(){ $(document).on('ready', function(){
console.log('okay'); console.log('okay');
@ -15,11 +15,13 @@ $(document).on('ready', function(){
document.onreadystatechange = function () { document.onreadystatechange = function () {
if (document.readyState == "complete") { if (document.readyState == "complete") {
// Bind close button.
document.getElementById("frame_btn_close").addEventListener("click", function (e) { document.getElementById("frame_btn_close").addEventListener("click", function (e) {
const window = remote.getCurrentWindow() const window = remote.getCurrentWindow()
window.close() window.close()
}) })
// Bind restore down button.
document.getElementById("frame_btn_restoredown").addEventListener("click", function (e) { document.getElementById("frame_btn_restoredown").addEventListener("click", function (e) {
const window = remote.getCurrentWindow() const window = remote.getCurrentWindow()
if(window.isMaximized()){ if(window.isMaximized()){
@ -29,6 +31,7 @@ document.onreadystatechange = function () {
} }
}) })
// Bind minimize button.
document.getElementById("frame_btn_minimize").addEventListener("click", function (e) { document.getElementById("frame_btn_minimize").addEventListener("click", function (e) {
const window = remote.getCurrentWindow() const window = remote.getCurrentWindow()
window.minimize() window.minimize()
@ -42,43 +45,43 @@ document.onreadystatechange = function () {
} }
} }
/* Open web links in the user's default browser. */ // Open web links in the user's default browser.
$(document).on('click', 'a[href^="http"]', function(event) { $(document).on('click', 'a[href^="http"]', function(event) {
event.preventDefault(); event.preventDefault();
testdownloads()
//console.log(os.homedir()) //console.log(os.homedir())
//shell.openExternal(this.href) shell.openExternal(this.href)
}) })
testdownloads = async function(){ testdownloads = async function(){
//const lp = require(path.join(__dirname, 'assets', 'js', 'launchprocess.js')) //const lp = require(path.join(__dirname, 'assets', 'js', 'launchprocess.js'))
const basePath = path.join(__dirname, '..', 'target', 'test', 'mcfiles') let versionData = await ag.loadVersionData('1.11.2', GAME_DIRECTORY)
let versionData = await ag.loadVersionData('1.11.2', basePath) await ag.validateAssets(versionData, GAME_DIRECTORY)
await ag.validateAssets(versionData, basePath)
console.log('assets done') console.log('assets done')
await ag.validateLibraries(versionData, basePath) await ag.validateLibraries(versionData, GAME_DIRECTORY)
console.log('libs done') console.log('libs done')
await ag.validateMiscellaneous(versionData, basePath) await ag.validateMiscellaneous(versionData, GAME_DIRECTORY)
console.log('files done') console.log('files done')
const serv = await ag.validateDistribution('WesterosCraft-1.11.2', basePath) const serv = await ag.validateDistribution('WesterosCraft-1.11.2', GAME_DIRECTORY)
console.log('forge stuff done') console.log('forge stuff done')
ag.instance.on('dlcomplete', async function(){ ag.instance.on('dlcomplete', async function(){
const forgeData = await ag.loadForgeData('WesterosCraft-1.11.2', basePath) const forgeData = await ag.loadForgeData('WesterosCraft-1.11.2', GAME_DIRECTORY)
const authUser = await mojang.auth('EMAIL', 'PASS', uuidV4(), { const authUser = await mojang.auth('EMAIL', 'PASS', DEFAULT_CONFIG.getClientToken(), {
name: 'Minecraft', name: 'Minecraft',
version: 1 version: 1
}) })
//lp.launchMinecraft(versionData, forgeData, basePath) //lp.launchMinecraft(versionData, forgeData, GAME_DIRECTORY)
//lp.launchMinecraft(versionData, basePath) //lp.launchMinecraft(versionData, GAME_DIRECTORY)
let pb = new ProcessBuilder(basePath, serv, versionData, forgeData, authUser) let pb = new ProcessBuilder(GAME_DIRECTORY, serv, versionData, forgeData, authUser)
const proc = pb.build() const proc = pb.build()
}) })
ag.processDlQueues() ag.processDlQueues()
} }
/*Opens DevTools window if you type "wcdev" in sequence. /**
This will crash the program if you are using multiple * Opens DevTools window if you type "wcdev" in sequence.
DevTools, for example the chrome debugger in VS Code. */ * This will crash the program if you are using multiple
* DevTools, for example the chrome debugger in VS Code.
*/
const match = [87, 67, 68, 69, 86] const match = [87, 67, 68, 69, 86]
let at = 0; let at = 0;

View File

@ -11,7 +11,7 @@ let win
function createWindow() { function createWindow() {
win = new BrowserWindow({ width: 980, height: 552, icon: getPlatformIcon('WesterosSealSquare'), frame: false}) win = new BrowserWindow({ width: 980, height: 552, icon: getPlatformIcon('WesterosSealSquare'), frame: false})
ejse.data('bkid', Math.floor((Math.random() * fs.readdirSync('app/assets/images/backgrounds').length))) ejse.data('bkid', Math.floor((Math.random() * fs.readdirSync(path.join(__dirname, 'app', 'assets', 'images', 'backgrounds')).length)))
win.loadURL(url.format({ win.loadURL(url.format({
pathname: path.join(__dirname, 'app', 'index.ejs'), pathname: path.join(__dirname, 'app', 'index.ejs'),