diff options
Diffstat (limited to 'src/main/manaplus/manaApp/windows.ts')
-rw-r--r-- | src/main/manaplus/manaApp/windows.ts | 79 |
1 files changed, 69 insertions, 10 deletions
diff --git a/src/main/manaplus/manaApp/windows.ts b/src/main/manaplus/manaApp/windows.ts index 0728e32..a5f5b02 100644 --- a/src/main/manaplus/manaApp/windows.ts +++ b/src/main/manaplus/manaApp/windows.ts @@ -1,9 +1,10 @@ import { ManaPlusApp } from './manaApp.interface'; import { app } from 'electron'; -//import * as path from 'path'; -import * as fs from 'fs'; +import * as fs from 'fs-extra'; import { Status } from '../../status'; import {download, Progress as ProgressType} from '../../util/downloader'; +import * as extract from 'extract-zip'; + export class ManaPlusAppWindows implements ManaPlusApp { private path:string; @@ -15,41 +16,99 @@ export class ManaPlusAppWindows implements ManaPlusApp { this.path = ManaPath; } run(parameters: string[]): void { + Status.setActivity(`Starting ManaPlus`); + const gameExe = this.path+"\\Mana\\manaplus.exe"; + console.log(gameExe, parameters); + const child = require('child_process').execFile(gameExe, parameters, function(err:Error, data:any) { + console.log(err); + console.log(data.toString()); + }); + child.on('close', ()=>{ + Status.setPlaying(false); + Status.removeActivity(); + }); + child.on('error', ()=>{ + Status.setPlaying(false); + //// TODO: Handle Error + }); } getGameDir(): string { - return this.path; + return this.path+"\\Mana\\"; } getVersion(): Promise<string> { - throw new Error("Not Installed."); + throw new Error("Not Implemented yet"); } isInstalled(): boolean { 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 Status.setProgress(500); Status.setActivity("Fetching Download URL"); //// TODO: Fetch update url Status.setProgress(-1); const downloadURL = 'https://[URL]/Mana.zip'; + + const updateDestination:string = `${app.getPath('userData')}\\temp\\update.zip`; try { - await download(downloadURL, `${app.getPath('userData')}\\temp\\update.zip`, (state:ProgressType) => { + await download(downloadURL, updateDestination, (state:ProgressType) => { Status.setProgress(Math.floor(state.percent*100)); Status.setActivity(`Downloading ManaPlus... ${state.speed}`); console.log(state); }); } catch (e){ console.log(e); - Status.showError("ManaPlus download failed", e.message, `DL Failed: ${e.message}`); - throw new Error("Download Error"); + } - Status.setProgress(100); - Status.setActivity(`ManaPlus download completed`); - Status.showError("Unziping isn't implemented yet", "WIP", "not further implemented") + Status.setProgress(500); + // 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'); + 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. Unziping..`); + 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}`); + reject(new Error("Extraction Error")); + } + resolve(); + }); + }); + await extraction; + + Status.setActivity('Unziping completed'); + + //IDEA: Check Integrity of gamefiles + // DELETE Old File and remove update file + Status.setActivity('Cleaning up (Deleting update files)'); + try { + 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.setProgress(-1); + //Status.showError("Unziping isn't implemented yet", "WIP", "not further implemented") + Status.setActivity('Update successfull'); + return 0; } updateAvailible(): Promise<{ isNewVersion: boolean; newestVersion: string; }> { |