diff options
Diffstat (limited to 'src/main/manaplus')
-rw-r--r-- | src/main/manaplus/manaApp/linux.ts | 246 | ||||
-rw-r--r-- | src/main/manaplus/manaApp/manaApp.interface.ts | 12 | ||||
-rw-r--r-- | src/main/manaplus/manaApp/windows.ts | 156 | ||||
-rw-r--r-- | src/main/manaplus/manaplus.ts | 323 |
4 files changed, 421 insertions, 316 deletions
diff --git a/src/main/manaplus/manaApp/linux.ts b/src/main/manaplus/manaApp/linux.ts index 6c804d5..da37de0 100644 --- a/src/main/manaplus/manaApp/linux.ts +++ b/src/main/manaplus/manaApp/linux.ts @@ -1,124 +1,160 @@ import { ManaPlusApp } from "./manaApp.interface"; import { app } from "electron"; -import * as fs from 'fs-extra'; +import * as fs from "fs-extra"; import { getRequest } from "../../util/webrequest"; import { Status } from "../../status"; import { download, Progress as ProgressType } from "../../util/downloader"; import { promisify } from "util"; export class ManaPlusAppLinux implements ManaPlusApp { - private path: string; - startCommand: string; - versionRegEx: RegExp = /.*ManaPlus ([\d.]+) Linux.*/g;//TODO - constructor() { - const ManaPath = app.getPath('userData') + "/manaplus"; - fs.existsSync(ManaPath) || fs.mkdirSync(ManaPath); - fs.existsSync(app.getPath('userData') + "/temp") || fs.mkdirSync(app.getPath('userData') + "/temp"); - this.path = ManaPath; - this.startCommand = ManaPath + '/Mana.AppImage' - } - getGameDir(): string { - throw new Error("getGameDir() is windows only!"); - } - getVersion(): Promise<string> { - return new Promise((res, rej) => { - let output: string; - const child = require('child_process').execFile(this.startCommand, ['-v'], function (err: Error, data: any) { - output = data.toString(); - }); - child.on('close', () => { - output = output.replace(this.versionRegEx, "$1"); - res(output); - }); - child.on('error', () => { - rej(new Error("Version check failed")); - }); - }); - } - isInstalled(): boolean { - return fs.existsSync(this.path + '/Mana.AppImage'); - } - async updateAvailable(): Promise<{ isNewVersion: boolean; newestVersion: string; }> { - try { - let versions = await getRequest("https://tmw2.org/manalauncher/versions.json?" + Date.now()); - let currect_version = await this.isInstalled ? await this.getVersion() : "-"; - return { - isNewVersion: currect_version.indexOf(versions.AppImage.version) === -1, - newestVersion: versions.AppImage.version - }; - } catch (e) { - throw e; + private path: string; + startCommand: string; + versionRegEx: RegExp = /.*ManaPlus ([\d.]+) Linux.*/g; //TODO + constructor() { + const ManaPath = app.getPath("userData") + "/manaplus"; + fs.existsSync(ManaPath) || fs.mkdirSync(ManaPath); + fs.existsSync(app.getPath("userData") + "/temp") || + fs.mkdirSync(app.getPath("userData") + "/temp"); + this.path = ManaPath; + this.startCommand = ManaPath + "/Mana.AppImage"; + } + getGameDir(): string { + throw new Error("getGameDir() is windows only!"); + } + getVersion(): Promise<string> { + return new Promise((res, rej) => { + let output: string; + const child = require("child_process").execFile( + this.startCommand, + ["-v"], + function (err: Error, data: any) { + output = data.toString(); } + ); + child.on("close", () => { + output = output.replace(this.versionRegEx, "$1"); + res(output); + }); + child.on("error", () => { + rej(new Error("Version check failed")); + }); + }); + } + isInstalled(): boolean { + return fs.existsSync(this.path + "/Mana.AppImage"); + } + async updateAvailable(): Promise<{ + isNewVersion: boolean; + newestVersion: string; + }> { + try { + let versions = await getRequest( + "https://tmw2.org/manalauncher/versions.json?" + Date.now() + ); + let currect_version = (await this.isInstalled) + ? await this.getVersion() + : "-"; + return { + isNewVersion: currect_version.indexOf(versions.AppImage.version) === -1, + newestVersion: versions.AppImage.version, + }; + } catch (e) { + throw e; } - async update(): Promise<any> { - fs.existsSync(app.getPath('userData') + "/temp") || fs.mkdirSync(app.getPath('userData') + "/temp"); - // Get Update URL - Status.setProgress(500); - Status.setProgress(-1); - Status.setActivity("Fetching Download URL"); - let downloadURL; - try { - let versions = await getRequest("https://tmw2.org/manalauncher/versions.json?" + Date.now()); - downloadURL = versions.AppImage.file; - } catch (e) { - console.log(e); - Status.showError("Download Url fetching error", e.message, `Download Url fetching error: ${e.message}`); - throw new Error("Download Url fetching error"); - } - Status.setProgress(-1); + } + async update(): Promise<any> { + fs.existsSync(app.getPath("userData") + "/temp") || + fs.mkdirSync(app.getPath("userData") + "/temp"); + // Get Update URL + Status.setProgress(500); + Status.setProgress(-1); + Status.setActivity("Fetching Download URL"); + let downloadURL; + try { + let versions = await getRequest( + "https://tmw2.org/manalauncher/versions.json?" + Date.now() + ); + downloadURL = versions.AppImage.file; + } catch (e) { + console.log(e); + Status.showError( + "Download Url fetching error", + e.message, + `Download Url fetching error: ${e.message}` + ); + throw new Error("Download Url fetching error"); + } + Status.setProgress(-1); - const updateDestination: string = `${app.getPath('userData')}/temp/update.AppImage`; + const updateDestination: string = `${app.getPath( + "userData" + )}/temp/update.AppImage`; - try { - await download(downloadURL, updateDestination, (state: ProgressType) => { - Status.setProgress(Math.floor(state.percent * 100)); - const speed = Math.floor(Math.floor(state.speed) / 1024); - Status.setActivity(`Downloading ManaPlus... ${speed} KiB/s`); - console.log(state); - }); - } catch (e) { - console.log(e); - Status.showError("Download error", e.message, `Download error: ${e.message}`); - throw new Error("Download error"); - } - Status.setProgress(500); + try { + await download(downloadURL, updateDestination, (state: ProgressType) => { + Status.setProgress(Math.floor(state.percent * 100)); + const speed = Math.floor(Math.floor(state.speed) / 1024); + Status.setActivity(`Downloading ManaPlus... ${speed} KiB/s`); + console.log(state); + }); + } catch (e) { + console.log(e); + Status.showError( + "Download error", + e.message, + `Download error: ${e.message}` + ); + throw new Error("Download error"); + } + Status.setProgress(500); - //IDEA: Check Integrity of the download + //IDEA: Check Integrity of the download - // Backup old files - Status.setActivity(`Backup Old version`); - try { - await fs.remove(this.path + '/Mana2.AppImage') - if (fs.existsSync(this.path + '/Mana.AppImage')) - await fs.move(this.path + '/Mana.AppImage', this.path + '/Mana2.AppImage'); - console.log("Backup old version done."); - } catch (err) { - Status.showError("Backup old version Failed", err.message, `Backup old version Failed: ${err.message}`); - throw new Error("Backup error"); - } + // Backup old files + Status.setActivity(`Backup Old version`); + try { + await fs.remove(this.path + "/Mana2.AppImage"); + if (fs.existsSync(this.path + "/Mana.AppImage")) + await fs.move( + this.path + "/Mana.AppImage", + this.path + "/Mana2.AppImage" + ); + console.log("Backup old version done."); + } catch (err) { + Status.showError( + "Backup old version Failed", + err.message, + `Backup old version Failed: ${err.message}` + ); + throw new Error("Backup error"); + } - Status.setProgress(500); - Status.setActivity(`ManaPlus download completed. Instaling..`); - try { - console.log('Use chmod'); - const chmod = promisify(fs.chmod); - await chmod(updateDestination, '755'); - - console.log('Now move the thing!'); - await fs.move(updateDestination, this.path + '/Mana.AppImage'); - //await chmod(this.path + '/Mana.AppImage', '744'); - } catch (err) { - console.log('Instalation error', err); - Status.showError("Instalation failed", err ? err.message : 'undefined', `Instalation Failed: ${err ? err.message : 'undefined'}`); - throw new Error("Instalation error"); - } + Status.setProgress(500); + Status.setActivity(`ManaPlus download completed. Instaling..`); + try { + console.log("Use chmod"); + const chmod = promisify(fs.chmod); + await chmod(updateDestination, "755"); - Status.setActivity('Instalation completed'); + console.log("Now move the thing!"); + await fs.move(updateDestination, this.path + "/Mana.AppImage"); + //await chmod(this.path + '/Mana.AppImage', '744'); + } catch (err) { + console.log("Instalation error", err); + Status.showError( + "Instalation failed", + err ? err.message : "undefined", + `Instalation Failed: ${err ? err.message : "undefined"}` + ); + throw new Error("Instalation error"); + } - //IDEA: Check Integrity of gamefiles + Status.setActivity("Instalation completed"); - Status.setActivity('Update successfull'); + //IDEA: Check Integrity of gamefiles - return 0; - } -}
\ No newline at end of file + Status.setActivity("Update successfull"); + + return 0; + } +} diff --git a/src/main/manaplus/manaApp/manaApp.interface.ts b/src/main/manaplus/manaApp/manaApp.interface.ts index a4fa795..c576f47 100644 --- a/src/main/manaplus/manaApp/manaApp.interface.ts +++ b/src/main/manaplus/manaApp/manaApp.interface.ts @@ -1,8 +1,8 @@ export interface ManaPlusApp { - readonly startCommand:string, - getGameDir():string, - getVersion():Promise<string>, - isInstalled():boolean, - updateAvailable():Promise<{isNewVersion:boolean, newestVersion:string}>, - update():Promise<any> + readonly startCommand: string; + getGameDir(): string; + getVersion(): Promise<string>; + isInstalled(): boolean; + updateAvailable(): Promise<{ isNewVersion: boolean; newestVersion: string }>; + update(): Promise<any>; } diff --git a/src/main/manaplus/manaApp/windows.ts b/src/main/manaplus/manaApp/windows.ts index 293fc72..ed9e70c 100644 --- a/src/main/manaplus/manaApp/windows.ts +++ b/src/main/manaplus/manaApp/windows.ts @@ -1,70 +1,79 @@ -import { ManaPlusApp } from './manaApp.interface'; -import { app } from 'electron'; -import * as fs from 'fs-extra'; -import { Status } from '../../status'; -import {download, Progress as ProgressType} from '../../util/downloader'; -import * as extract from 'extract-zip'; -import { getRequest } from '../../util/webrequest'; - +import { ManaPlusApp } from "./manaApp.interface"; +import { app } from "electron"; +import * as fs from "fs-extra"; +import { Status } from "../../status"; +import { download, Progress as ProgressType } from "../../util/downloader"; +import * as extract from "extract-zip"; +import { getRequest } from "../../util/webrequest"; export class ManaPlusAppWindows implements ManaPlusApp { - private path:string; - public readonly startCommand:string; - versionRegEx:RegExp = /.*ManaPlus ([\d.]+) Windows.*/g; - constructor(){ - const ManaPath = app.getPath('userData')+"\\manaplus"; + private path: string; + public readonly startCommand: string; + versionRegEx: RegExp = /.*ManaPlus ([\d.]+) Windows.*/g; + constructor() { + const ManaPath = app.getPath("userData") + "\\manaplus"; fs.existsSync(ManaPath) || fs.mkdirSync(ManaPath); - fs.existsSync(app.getPath('userData')+"\\temp") || fs.mkdirSync(app.getPath('userData')+"\\temp"); + fs.existsSync(app.getPath("userData") + "\\temp") || + fs.mkdirSync(app.getPath("userData") + "\\temp"); this.path = ManaPath; - this.startCommand = this.path + "\\Mana\\manaplus.exe" + this.startCommand = this.path + "\\Mana\\manaplus.exe"; } - getGameDir(): string { - return this.path+"\\Mana\\"; - } - getVersion(): Promise<string> { + getGameDir(): string { + return this.path + "\\Mana\\"; + } + getVersion(): Promise<string> { return new Promise((res, rej) => { - let output:string; - const child = require('child_process').execFile(this.startCommand, ['-v'], function(err:Error, data:any) { - output = data.toString(); - }); - child.on('close', ()=>{ + let output: string; + const child = require("child_process").execFile( + this.startCommand, + ["-v"], + function (err: Error, data: any) { + output = data.toString(); + } + ); + child.on("close", () => { output = output.replace(this.versionRegEx, "$1"); res(output); }); - child.on('error', ()=>{ + child.on("error", () => { rej(new Error("Version check failed")); }); }); - } + } isInstalled(): boolean { - return fs.existsSync(this.path+"\\Mana\\manaplus.exe"); - } + return fs.existsSync(this.path + "\\Mana\\manaplus.exe"); + } async update() { - fs.existsSync(app.getPath('userData')+"\\temp") || fs.mkdirSync(app.getPath('userData')+"\\temp"); - // Get Update URL + fs.existsSync(app.getPath("userData") + "\\temp") || + fs.mkdirSync(app.getPath("userData") + "\\temp"); + // Get Update URL Status.setProgress(500); Status.setActivity("Fetching Download URL"); let downloadURL; try { - let versions = await getRequest("https://tmw2.org/manalauncher/versions.json?"+Date.now()); + let versions = await getRequest( + "https://tmw2.org/manalauncher/versions.json?" + Date.now() + ); downloadURL = versions.windows64.file; - } catch (e){ + } catch (e) { console.log(e); throw new Error("Download Url fetching error"); } Status.setProgress(-1); - const updateDestination:string = `${app.getPath('userData')}\\temp\\update.zip`; + const updateDestination: string = `${app.getPath( + "userData" + )}\\temp\\update.zip`; try { - await download(downloadURL, updateDestination, (state:ProgressType) => { - Status.setProgress(Math.floor(state.percent*100)); - const speed = Math.floor(Math.floor(state.speed)/1024); + await download(downloadURL, updateDestination, (state: ProgressType) => { + Status.setProgress(Math.floor(state.percent * 100)); + const speed = Math.floor(Math.floor(state.speed) / 1024); Status.setActivity(`Downloading ManaPlus... ${speed} KiB/s`); console.log(state); }); - } catch (e){ + } catch (e) { console.log(e); throw new Error("Download error"); } @@ -74,22 +83,30 @@ export class ManaPlusAppWindows implements ManaPlusApp { // Backup old files Status.setActivity(`Backup Old version`); try { - await fs.remove(this.path+'\\Mana2') - if(fs.existsSync(this.path+'\\Mana')) - await fs.move(this.path+'\\Mana', this.path+'\\Mana2'); + await fs.remove(this.path + "\\Mana2"); + if (fs.existsSync(this.path + "\\Mana")) + await fs.move(this.path + "\\Mana", this.path + "\\Mana2"); console.log("Backup old version done."); } catch (err) { - Status.showError("Backup old version Failed", err.message, `Backup old version Failed: ${err.message}`); + Status.showError( + "Backup old version Failed", + err.message, + `Backup old version Failed: ${err.message}` + ); throw new Error("Backup error"); } Status.setProgress(500); Status.setActivity(`ManaPlus download completed. Unziping..`); - const extraction = new Promise((resolve, reject)=>{ - extract(updateDestination, {dir: this.path }, function (err) { - if(err){ + const extraction = new Promise((resolve, reject) => { + extract(updateDestination, { dir: this.path }, function (err) { + if (err) { console.log(err); - Status.showError("ManaPlus unziping failed", err.message, `Unzip Failed: ${err.message}`); + Status.showError( + "ManaPlus unziping failed", + err.message, + `Unzip Failed: ${err.message}` + ); reject(new Error("Extraction Error")); } resolve(); @@ -97,38 +114,53 @@ export class ManaPlusAppWindows implements ManaPlusApp { }); await extraction; - Status.setActivity('Unziping completed'); + Status.setActivity("Unziping completed"); //IDEA: Check Integrity of gamefiles - // DELETE Old File and remove update file - Status.setActivity('Cleaning up (Deleting update files)'); + Status.setActivity("Cleaning up (Deleting update files)"); try { - await fs.remove(this.path+'\\Mana2') - await fs.remove(updateDestination) - console.log('Cleanup done'); + await fs.remove(this.path + "\\Mana2"); + await fs.remove(updateDestination); + console.log("Cleanup done"); } catch (err) { console.error(err); - Status.showError("Clean up Failed", "Please remove '"+updateDestination+"' and '"+'this.path'+'\\Mana2'+"' manualy", `Unzip Failed: ${err.message}`); + Status.showError( + "Clean up Failed", + "Please remove '" + + updateDestination + + "' and '" + + "this.path" + + "\\Mana2" + + "' manualy", + `Unzip Failed: ${err.message}` + ); } Status.setProgress(-1); //Status.showError("Unziping isn't implemented yet", "WIP", "not further implemented") - Status.setActivity('Update successfull'); + Status.setActivity("Update successfull"); return 0; - } - async updateAvailable(): Promise<{ isNewVersion: boolean; newestVersion: string; }> { + } + async updateAvailable(): Promise<{ + isNewVersion: boolean; + newestVersion: string; + }> { try { - let versions = await getRequest("https://tmw2.org/manalauncher/versions.json?"+Date.now()); - let currect_version = await this.isInstalled ? await this.getVersion(): "-"; + let versions = await getRequest( + "https://tmw2.org/manalauncher/versions.json?" + Date.now() + ); + let currect_version = (await this.isInstalled) + ? await this.getVersion() + : "-"; return { - isNewVersion:currect_version.indexOf(versions.windows64.version) === -1, - newestVersion:versions.windows64.version + isNewVersion: + currect_version.indexOf(versions.windows64.version) === -1, + newestVersion: versions.windows64.version, }; - }catch (e){ + } catch (e) { throw e; } - - } + } } diff --git a/src/main/manaplus/manaplus.ts b/src/main/manaplus/manaplus.ts index 7573c84..981c7d5 100644 --- a/src/main/manaplus/manaplus.ts +++ b/src/main/manaplus/manaplus.ts @@ -1,68 +1,82 @@ -import { ManaPlusApp } from './manaApp/manaApp.interface'; -import { ManaPlusAppWindows } from './manaApp/windows'; -import * as os from 'os'; -import * as path from 'path'; -import * as fs from 'fs-extra'; -import { app, ipcMain, shell, dialog } from 'electron'; -import { Status, EventEmitter } from '../status'; -import { ManaPlusAppLinux } from './manaApp/linux'; +import { ManaPlusApp } from "./manaApp/manaApp.interface"; +import { ManaPlusAppWindows } from "./manaApp/windows"; +import * as os from "os"; +import * as path from "path"; +import * as fs from "fs-extra"; +import { app, ipcMain, shell, dialog } from "electron"; +import { Status, EventEmitter } from "../status"; +import { ManaPlusAppLinux } from "./manaApp/linux"; -let ManaPlusInstance:ManaPlusApp; +let ManaPlusInstance: ManaPlusApp; -let CurrentServer:{serverID:string,address:string}=null; - -export namespace ManaPlus{ +let CurrentServer: { serverID: string; address: string } = null; +export namespace ManaPlus { export const ERRORS = { - NOT_INITILIZED_YET_ERROR:new Error("The ManaPlus updater wasn't initilized") - } + NOT_INITILIZED_YET_ERROR: new Error( + "The ManaPlus updater wasn't initilized" + ), + }; - export function init(){ - if(os.platform() == "win32"){ + export function init() { + if (os.platform() == "win32") { ManaPlusInstance = new ManaPlusAppWindows(); - console.log("GameDir:"+ManaPlusInstance.getGameDir()); + console.log("GameDir:" + ManaPlusInstance.getGameDir()); } - if(os.platform() == "linux"){ + if (os.platform() == "linux") { ManaPlusInstance = new ManaPlusAppLinux(); - console.log("startCommand:"+ManaPlusInstance.startCommand); + console.log("startCommand:" + ManaPlusInstance.startCommand); } } - export async function update(){ - if(!wasInitilized())throw ERRORS.NOT_INITILIZED_YET_ERROR; + export async function update() { + if (!wasInitilized()) throw ERRORS.NOT_INITILIZED_YET_ERROR; return await ManaPlusInstance.update(); } - - - export async function start(args: any){ - CurrentServer={ - serverID:args.serverID, - address:args.address + export async function start(args: any) { + CurrentServer = { + serverID: args.serverID, + address: args.address, }; - let params:string[]; + let params: string[]; try { - params = await makeParams(args.address,args.port,args.engine,args.username,args.password); + params = await makeParams( + args.address, + args.port, + args.engine, + args.username, + args.password + ); //params = ['-v'];// DEBUG: This option is to disable manaplus for testing (open it just for getting the version) - } catch (e){ + } catch (e) { console.log(e); - Status.showError("Launch Preperation Failed (LPF_PARMS)", e.message, "Launch preparation failed"); + Status.showError( + "Launch Preperation Failed (LPF_PARMS)", + e.message, + "Launch preparation failed" + ); Status.setPlaying(false); return; } - let willUpdate:boolean=false; + let willUpdate: boolean = false; // check if it is installed - if(ManaPlusInstance.isInstalled()){ + if (ManaPlusInstance.isInstalled()) { // Check if update is available and ask if the user wants to update try { let version = await ManaPlusInstance.updateAvailable(); - willUpdate = (version.isNewVersion && await updateDialog(version.newestVersion)); - } catch (e){ + willUpdate = + version.isNewVersion && (await updateDialog(version.newestVersion)); + } catch (e) { console.log(e); - Status.showError("Launch Preperation Failed (LPF_Update): This error can also mean that you are offline, \ -please check you network connection first.", e.message, "Launch preparation failed") + Status.showError( + "Launch Preperation Failed (LPF_Update): This error can also mean that you are offline, \ +please check you network connection first.", + e.message, + "Launch preparation failed" + ); Status.setPlaying(false); return; } @@ -71,109 +85,127 @@ please check you network connection first.", e.message, "Launch preparation fail willUpdate = true; } // Install/Update the gameclient if needed - if(willUpdate){ + if (willUpdate) { try { await update(); } catch (error) { Status.setPlaying(false); throw error; } - } //IDEA have client data updated here to, if needed - // Run it Status.setGameRunning(true); - EventEmitter.emit('closeWindow'); - EventEmitter.emit('openTray'); - await runManaProgram(params,ManaPlusInstance.startCommand,args.address); + EventEmitter.emit("closeWindow"); + EventEmitter.emit("openTray"); + await runManaProgram(params, ManaPlusInstance.startCommand, args.address); // On Close - Status.setGameStatus({server: "Launcher"}) + Status.setGameStatus({ server: "Launcher" }); Status.setGameRunning(false); Status.setPlaying(false); Status.removeActivity(); - EventEmitter.emit('reopenWindow'); - EventEmitter.emit('closeTray'); - CurrentServer=null; + EventEmitter.emit("reopenWindow"); + EventEmitter.emit("closeTray"); + CurrentServer = null; } - } -ipcMain.on('getScreenshots', (event:any, arg:string)=> { - const screenshotsDir = path.normalize(app.getPath('userData')+`/screenshots/${arg}/`); +ipcMain.on("getScreenshots", (event: any, arg: string) => { + const screenshotsDir = path.normalize( + app.getPath("userData") + `/screenshots/${arg}/` + ); fs.existsSync(screenshotsDir) || fs.mkdirSync(screenshotsDir); - fs.readdir(screenshotsDir, (err, dir) => { - let screenshots:string[]=[]; - for (var i = 0, path; path = dir[i]; i++) { - screenshots.push(path); - } - event.sender.send('getScreenshots', {dir:screenshotsDir, screenshots:screenshots.reverse().slice(0, 24)}); + fs.readdir(screenshotsDir, (err, dir) => { + let screenshots: string[] = []; + for (var i = 0, path; (path = dir[i]); i++) { + screenshots.push(path); + } + event.sender.send("getScreenshots", { + dir: screenshotsDir, + screenshots: screenshots.reverse().slice(0, 24), }); + }); }); -EventEmitter.on('Mana:openScreenshotDir', ()=>{ - shell.openItem(path.normalize(app.getPath('userData')+`/screenshots/${CurrentServer.address}/`)); +EventEmitter.on("Mana:openScreenshotDir", () => { + shell.openItem( + path.normalize( + app.getPath("userData") + `/screenshots/${CurrentServer.address}/` + ) + ); }); -function wasInitilized(){ - return typeof(ManaPlusInstance) !== "undefined" && typeof(ManaPlusInstance) !== "undefined"; +function wasInitilized() { + return ( + typeof ManaPlusInstance !== "undefined" && + typeof ManaPlusInstance !== "undefined" + ); } -async function makeParams(server: any,port: any,engine: any,username?: any,password?: any):Promise<string[]>{ - let parameters:string[] = []; - if(server && engine && port && server != 'noServer'){ - parameters.push(...[ - "-s", server, - "-y", engine, - "-p", port - ]); - if(username && password){ - parameters.push(...[ - "-U", username, - "-P", password - ]); - } +async function makeParams( + server: any, + port: any, + engine: any, + username?: any, + password?: any +): Promise<string[]> { + let parameters: string[] = []; + if (server && engine && port && server != "noServer") { + parameters.push(...["-s", server, "-y", engine, "-p", port]); + if (username && password) { + parameters.push(...["-U", username, "-P", password]); } - // Setup Paths and stuff - const configDir = path.normalize(app.getPath('userData')+"/mana_config"); - const localDataDir = path.normalize(app.getPath('userData')+"/mana_local_data"); - const screenshotsDir = path.normalize(app.getPath('userData')+`/screenshots/${server}`); - await fs.ensureDir(configDir); - await fs.ensureDir(localDataDir); - await fs.ensureDir(screenshotsDir); - parameters.push(...[ - "-C", configDir, - "-L", localDataDir, - "--screenshot-dir", screenshotsDir, - ]); - //console.log(parameters); - - return parameters; + } + // Setup Paths and stuff + const configDir = path.normalize(app.getPath("userData") + "/mana_config"); + const localDataDir = path.normalize( + app.getPath("userData") + "/mana_local_data" + ); + const screenshotsDir = path.normalize( + app.getPath("userData") + `/screenshots/${server}` + ); + await fs.ensureDir(configDir); + await fs.ensureDir(localDataDir); + await fs.ensureDir(screenshotsDir); + parameters.push( + ...["-C", configDir, "-L", localDataDir, "--screenshot-dir", screenshotsDir] + ); + //console.log(parameters); + + return parameters; } -let manaplusInstance: any=null; +let manaplusInstance: any = null; -function runManaProgram(parameters: string[],gameExe:string,server?:string): Promise<any> { - return new Promise(async(resolve, reject)=>{ - if(server){ +function runManaProgram( + parameters: string[], + gameExe: string, + server?: string +): Promise<any> { + return new Promise(async (resolve, reject) => { + if (server) { Status.setActivity(`Preparing Launch`); await setSkipUpdateWindows(server); } Status.setActivity(`Starting ManaPlus`); //console.log(gameExe, parameters); - const child = require('child_process').execFile(gameExe, parameters, function(err:Error, data:any) { - console.log(err); - console.log(data.toString()); - Status.setActivity(`ManaPlus is running`); - }); - child.on('close', ()=>{ + const child = require("child_process").execFile( + gameExe, + parameters, + function (err: Error, data: any) { + console.log(err); + console.log(data.toString()); + Status.setActivity(`ManaPlus is running`); + } + ); + child.on("close", () => { manaplusInstance = null; resolve(); }); - child.on('error', ()=>{ + child.on("error", () => { manaplusInstance = null; resolve(); //// TODO: Handle Error @@ -182,51 +214,55 @@ function runManaProgram(parameters: string[],gameExe:string,server?:string): Pro }); } -EventEmitter.on("Mana:killMana",()=>{ - if(manaplusInstance && manaplusInstance !== null) - manaplusInstance.kill('SIGINT'); +EventEmitter.on("Mana:killMana", () => { + if (manaplusInstance && manaplusInstance !== null) + manaplusInstance.kill("SIGINT"); }); -async function updateDialog(newestVersion:string):Promise<boolean>{ +async function updateDialog(newestVersion: string): Promise<boolean> { const options = { - type: 'info', - title: `ManaPlus Update available: ${newestVersion}`, - message: "Do you want to update now? Please note that you'll have to update eventually to ensure further compability with the servers", - buttons: ['Nah, LATER', 'Update NOW'] - } - let dialog = await dialogPromiseWrapper(options); - console.log("....",dialog); - return dialog === 1; + type: "info", + title: `ManaPlus Update available: ${newestVersion}`, + message: + "Do you want to update now? Please note that you'll have to update eventually to ensure further compability with the servers", + buttons: ["Nah, LATER", "Update NOW"], + }; + let dialog = await dialogPromiseWrapper(options); + console.log("....", dialog); + return dialog === 1; } -function dialogPromiseWrapper(options:any):Promise<number>{ +function dialogPromiseWrapper(options: any): Promise<number> { return new Promise((res, rej) => { dialog.showMessageBox(options, (index) => { - res(index); - }) + res(index); + }); }); } -const default_server_config = '<?xml version="1.0"?>\ +const default_server_config = + '<?xml version="1.0"?>\ <configuration>\ <option name="updateType" value="1"/>\ <list name="player"/>\ </configuration>'; -const parseString = require('xml2js').parseString, xml2js = require('xml2js'); -async function setSkipUpdateWindows(server:string){ - const serverConfigXML = path.normalize(app.getPath('userData')+`/mana_config/${server}/config.xml`); - - if(fs.existsSync(serverConfigXML)){ +const parseString = require("xml2js").parseString, + xml2js = require("xml2js"); +async function setSkipUpdateWindows(server: string) { + const serverConfigXML = path.normalize( + app.getPath("userData") + `/mana_config/${server}/config.xml` + ); + + if (fs.existsSync(serverConfigXML)) { //add to this file - try{ - let data = await fs.readFile(serverConfigXML, 'utf8'); + try { + let data = await fs.readFile(serverConfigXML, "utf8"); data = await editXML(data); await fs.outputFile(serverConfigXML, data); - } catch (err){ + } catch (err) { console.log(err); } - - }else{ + } else { //create the file fs.outputFile(serverConfigXML, default_server_config); } @@ -234,25 +270,26 @@ async function setSkipUpdateWindows(server:string){ return; } -function editXML(xml:string):Promise<string>{ - return new Promise((res, rej)=>{ - parseString(xml, function(err:any, result:any){ - if(err) console.log(err); - - var json = result; - const updaterVar = json.configuration.option.find((item:any)=>item.$.name=="updateType"); - if(updaterVar){ - if(updaterVar.$.value === 1){ - return rej(new Error("Has allready the right value")); - } - updaterVar.$.value = 1; - }else{ - json.configuration.option.push({$:{name:"updateType",value:1}}); +function editXML(xml: string): Promise<string> { + return new Promise((res, rej) => { + parseString(xml, function (err: any, result: any) { + if (err) console.log(err); + + var json = result; + const updaterVar = json.configuration.option.find( + (item: any) => item.$.name == "updateType" + ); + if (updaterVar) { + if (updaterVar.$.value === 1) { + return rej(new Error("Has allready the right value")); } + updaterVar.$.value = 1; + } else { + json.configuration.option.push({ $: { name: "updateType", value: 1 } }); + } - var builder = new xml2js.Builder(); - res(builder.buildObject(json)); - + var builder = new xml2js.Builder(); + res(builder.buildObject(json)); }); }); } |