summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLawnCable <lawncable.tmw2@simonlaux.de>2018-05-22 01:32:10 -0400
committerLawnCable <lawncable.tmw2@simonlaux.de>2018-05-22 01:32:10 -0400
commit4fdd86da90dd811378b153de31da542f9fabb355 (patch)
tree59f78e5cdf361b9f513c6f3dd5f23639841b5d7e /src
parentd6ff248cee446218392567296cfcd2fb8723b066 (diff)
downloadelectron-4fdd86da90dd811378b153de31da542f9fabb355.tar.gz
electron-4fdd86da90dd811378b153de31da542f9fabb355.tar.bz2
electron-4fdd86da90dd811378b153de31da542f9fabb355.tar.xz
electron-4fdd86da90dd811378b153de31da542f9fabb355.zip
started update logic for windows - only downloads the zip for now
Diffstat (limited to 'src')
-rw-r--r--src/main.ts22
-rw-r--r--src/main/manaplus/manaApp/manaApp.interface.ts8
-rw-r--r--src/main/manaplus/manaApp/windows.ts58
-rw-r--r--src/main/manaplus/manaplus.ts61
-rw-r--r--src/main/manaplus/update/updater.interface.ts6
-rw-r--r--src/main/status.ts19
-rw-r--r--src/main/util/downloader.ts28
-rw-r--r--src/renderer/index.ts13
-rw-r--r--src/renderer/serverView.ts3
9 files changed, 198 insertions, 20 deletions
diff --git a/src/main.ts b/src/main.ts
index 40e999f..b9662dc 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -74,15 +74,12 @@ ipcMain.on('debug', (event:any, arg:any)=> {
mainWindow.webContents.closeDevTools();
else
mainWindow.webContents.openDevTools();
+
+ Status.setActivity("Debug menue Toggled")
});
import {Status} from './main/status';
-ipcMain.on('play', (event:any, arg:any)=> {
- console.log("play", arg);
- Status.setPlaying(true);
- Status.setProgress(500);
- setTimeout(()=>{Status.setPlaying(false);Status.removeProgress();}, 10000);
-});
+
//import {quit as drpcQuit} from './main/richpresence';
@@ -90,3 +87,16 @@ ipcMain.on('play', (event:any, arg:any)=> {
app.on('quit', () => {
//drpcQuit();
});
+
+
+import { ManaPlus } from './main/manaplus/manaplus';
+
+ManaPlus.init();
+
+ipcMain.on('play', async (event:any, arg:any) => {
+ console.log("play", arg);
+ Status.setPlaying(true);
+ await ManaPlus.start(arg.server,arg.port,arg.engine,arg.username,arg.password);
+ //Status.showError("Failed To Launch Mana Plus","Not implemented yet!","Launch Manaplus faild: Not Implemented");
+ return false;
+});
diff --git a/src/main/manaplus/manaApp/manaApp.interface.ts b/src/main/manaplus/manaApp/manaApp.interface.ts
index 81368e6..f70b26a 100644
--- a/src/main/manaplus/manaApp/manaApp.interface.ts
+++ b/src/main/manaplus/manaApp/manaApp.interface.ts
@@ -1,6 +1,8 @@
-export default interface ManaPlusApplication {
- constructor():void,
+export interface ManaPlusApp {
run(parameters:string[]):void,
getGameDir():string,
- getVersion():Promise<string>
+ getVersion():Promise<string>,
+ isInstalled():boolean,
+ updateAvailible():Promise<{isNewVersion:boolean, newestVersion:string}>,
+ update():Promise<any>
}
diff --git a/src/main/manaplus/manaApp/windows.ts b/src/main/manaplus/manaApp/windows.ts
new file mode 100644
index 0000000..0728e32
--- /dev/null
+++ b/src/main/manaplus/manaApp/windows.ts
@@ -0,0 +1,58 @@
+import { ManaPlusApp } from './manaApp.interface';
+import { app } from 'electron';
+//import * as path from 'path';
+import * as fs from 'fs';
+import { Status } from '../../status';
+import {download, Progress as ProgressType} from '../../util/downloader';
+
+export class ManaPlusAppWindows implements ManaPlusApp {
+ private path:string;
+
+ 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;
+ }
+ run(parameters: string[]): void {
+
+ }
+ getGameDir(): string {
+ return this.path;
+ }
+ getVersion(): Promise<string> {
+ throw new Error("Not Installed.");
+ }
+ isInstalled(): boolean {
+ return fs.existsSync(this.path+"\\Mana\\manaplus.exe");
+ }
+
+ async update() {
+ // Get Update URL
+ Status.setProgress(500);
+ Status.setActivity("Fetching Download URL");
+ //// TODO: Fetch update url
+ Status.setProgress(-1);
+ const downloadURL = 'https://[URL]/Mana.zip';
+ try {
+ await download(downloadURL, `${app.getPath('userData')}\\temp\\update.zip`, (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")
+
+
+ return 0;
+ }
+ updateAvailible(): Promise<{ isNewVersion: boolean; newestVersion: string; }> {
+ throw new Error("Method not implemented.");
+ }
+}
diff --git a/src/main/manaplus/manaplus.ts b/src/main/manaplus/manaplus.ts
new file mode 100644
index 0000000..dfa86a7
--- /dev/null
+++ b/src/main/manaplus/manaplus.ts
@@ -0,0 +1,61 @@
+import { ManaPlusApp } from './ManaApp/manaApp.interface';
+import { ManaPlusAppWindows } from './ManaApp/windows';
+import * as os from 'os';
+
+let ManaPlusInstance:ManaPlusApp;
+
+export namespace ManaPlus{
+
+ export const ERRORS = {
+ NOT_INITILIZED_YET_ERROR:new Error("The ManaPlus updater wasn't initilized")
+ }
+
+ export function init(){
+ if(os.platform() == "win32"){
+ ManaPlusInstance = new ManaPlusAppWindows();
+ console.log("GameDir:"+ManaPlusInstance.getGameDir());
+ }
+ }
+
+ export async function update(){
+ if(!wasInitilized())throw ERRORS.NOT_INITILIZED_YET_ERROR;
+
+ return await ManaPlusInstance.update();
+ }
+
+ export async function start(server: any,engine: any,port: any,username: any,password: any){
+
+ const params = makeParams(server,engine,port,username,password);
+ let willUpdate:boolean=false;
+ // check if it is installed
+ willUpdate = !ManaPlusInstance.isInstalled();
+ //Check if update is availible and ask if the user wants to update
+ //TODO
+
+ // Install/Update the gameclient if needed
+ if(willUpdate){
+ await update();
+ }
+
+ //IDEA have client data updated here to, if needed
+ ManaPlusInstance.run(params);
+
+ }
+}
+
+function wasInitilized(){
+ return typeof(ManaPlusInstance) !== "undefined" && typeof(ManaPlusInstance) !== "undefined";
+}
+
+function makeParams(server: any,engine: any,port: any,username: any,password: any):string[]{
+ // TODO check if everything is there
+ var parameters = [
+ "-s"+server,
+ "-y"+engine,
+ "-p"+port,
+ "-U"+username,
+ "-P"+password,
+ ];
+ // TODO make this function real
+ return [];
+}
diff --git a/src/main/manaplus/update/updater.interface.ts b/src/main/manaplus/update/updater.interface.ts
deleted file mode 100644
index 1524649..0000000
--- a/src/main/manaplus/update/updater.interface.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export default interface ManaUpdater {
- constructor():void,
- updateAvailible():Promise<{isNewVersion:boolean, newestVersion:string}>,
- update():Promise<any>,
- reinstall():Promise<any>
-}
diff --git a/src/main/status.ts b/src/main/status.ts
index ffd6551..537e31b 100644
--- a/src/main/status.ts
+++ b/src/main/status.ts
@@ -1,8 +1,10 @@
import { mainWindow } from '../main';
+import { dialog } from 'electron';
type STATUS = {
progress:number,
activity:string,
+ ActivityIsError:boolean,
playing:boolean,
}
@@ -10,6 +12,7 @@ const status:STATUS = {
progress:null,
activity:null,
playing:false, //Is manaplus starting or started
+ ActivityIsError:false,
}
export namespace Status {
@@ -23,10 +26,22 @@ export namespace Status {
}
export function setActivity(value: string){
status.activity=value;
+ status.ActivityIsError=false;
updateStatus();
}
- export function setPlaying(value: boolean){
- status.playing=value;
+ export function removeActivity(value: string){
+ status.activity=null;
+ status.ActivityIsError=false;
+ updateStatus();
+ }
+ export function showError(title:string, message:string, activityMsg:string=message){
+ status.activity = activityMsg;
+ status.ActivityIsError = true;
+ updateStatus();
+ setTimeout(()=>{dialog.showErrorBox(title, message);},300);
+ }
+ export function setPlaying(playing: boolean){
+ status.playing=playing;
updateStatus();
}
export function getStatus():STATUS{
diff --git a/src/main/util/downloader.ts b/src/main/util/downloader.ts
new file mode 100644
index 0000000..075097d
--- /dev/null
+++ b/src/main/util/downloader.ts
@@ -0,0 +1,28 @@
+var fs = require('fs');
+var request = require('request');
+var progress = require('request-progress');
+
+export type Progress = {
+ percent:number,
+ speed:number,
+ size:{
+ total:number,
+ transfered:number
+ },
+ time:{
+ elapsed:number,
+ remaining:number
+ }
+};
+
+export function download(url:string,targetLocation:string,onprogress: (state:Progress)=>void):Promise<any>{
+ return new Promise((resolve:any,reject:any)=>{
+ progress(request(url), {
+ throttle: 500
+ })
+ .on('progress', onprogress)
+ .on('error', reject)
+ .on('end', resolve)
+ .pipe(fs.createWriteStream(targetLocation));
+ });
+}
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 944ee90..f83bd3f 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -18,7 +18,7 @@ document.ondragover = document.ondrop = (event) => {
};
-const debugBtn = document.getElementById('debug');
+const debugBtn = document.getElementById('debug');
//debugBtn.hidden = true;
@@ -26,3 +26,14 @@ debugBtn.addEventListener('click', () => {
debugBtn.blur();
ipcRenderer.send('debug');
});
+
+const activityLabel = document.getElementById('activity');
+const progressBar = document.getElementById('progress') as HTMLProgressElement;
+ipcRenderer.on('status-update', (event:any, status:any) => {
+ activityLabel.innerText = status.activity;
+ if(status.ActivityIsError)
+ activityLabel.classList.add("error");
+ else
+ activityLabel.classList.remove("error");
+ progressBar.value = status.progress;
+})
diff --git a/src/renderer/serverView.ts b/src/renderer/serverView.ts
index 48ce923..3229187 100644
--- a/src/renderer/serverView.ts
+++ b/src/renderer/serverView.ts
@@ -104,8 +104,7 @@ function setBackground(){
}
ipcRenderer.on('status-update', (event:any, status:any) => {
- const message = `Asynchronous message reply: ${status}`
- console.log(message, status);
+ // Everything that isnt server view related is in index.ts
playBtn.disabled = status.playing;
})