diff options
author | LawnCable <lawncable.tmw2@simonlaux.de> | 2018-05-22 01:32:10 -0400 |
---|---|---|
committer | LawnCable <lawncable.tmw2@simonlaux.de> | 2018-05-22 01:32:10 -0400 |
commit | 4fdd86da90dd811378b153de31da542f9fabb355 (patch) | |
tree | 59f78e5cdf361b9f513c6f3dd5f23639841b5d7e /src/main | |
parent | d6ff248cee446218392567296cfcd2fb8723b066 (diff) | |
download | electron-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/main')
-rw-r--r-- | src/main/manaplus/manaApp/manaApp.interface.ts | 8 | ||||
-rw-r--r-- | src/main/manaplus/manaApp/windows.ts | 58 | ||||
-rw-r--r-- | src/main/manaplus/manaplus.ts | 61 | ||||
-rw-r--r-- | src/main/manaplus/update/updater.interface.ts | 6 | ||||
-rw-r--r-- | src/main/status.ts | 19 | ||||
-rw-r--r-- | src/main/util/downloader.ts | 28 |
6 files changed, 169 insertions, 11 deletions
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)); + }); +} |