diff options
Diffstat (limited to 'src/main/manaplus/manaApp/linux.ts')
-rw-r--r-- | src/main/manaplus/manaApp/linux.ts | 246 |
1 files changed, 141 insertions, 105 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; + } +} |