summaryrefslogtreecommitdiff
path: root/src/main/manaplus/manaApp/windows.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/manaplus/manaApp/windows.ts')
-rw-r--r--src/main/manaplus/manaApp/windows.ts79
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; }> {