4
0
mirror of https://github.com/AltarikMC/Launcher synced 2024-11-21 06:09:51 +01:00

Made a lot of server fixes thank to eslint

This commit is contained in:
Quentin Legot 2023-11-28 00:18:41 +01:00
parent 9e20458ff6
commit 5721b96601
8 changed files with 1712 additions and 590 deletions

32
.eslintrc.cjs Normal file
View File

@ -0,0 +1,32 @@
module.exports = {
env: {
browser: true,
es2021: true
},
extends: [
'standard',
'plugin:vue/vue3-essential'
],
overrides: [
{
env: {
node: true
},
files: [
'.eslintrc.{js,cjs}'
],
parserOptions: {
sourceType: 'script'
}
}
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
plugins: [
'vue'
],
rules: {
}
}

View File

@ -35,7 +35,13 @@
"@electron-forge/maker-zip": "^7.1.0",
"@electron-forge/plugin-auto-unpack-natives": "^7.1.0",
"@electron-forge/publisher-github": "^7.1.0",
"electron": "beta"
"electron": "beta",
"eslint": "^8.0.1",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-vue": "^9.18.1"
},
"dependencies": {
"decompress": "^4.2.1",

View File

@ -1,47 +1,47 @@
export default function handleSquirrelEvent (app) {
if (process.argv.length === 1) {
return false;
return false
}
const ChildProcess = require('child_process');
const path = require('path');
const ChildProcess = require('child_process')
const path = require('path')
const appFolder = path.resolve(process.execPath, '..');
const rootAtomFolder = path.resolve(appFolder, '..');
const updateDotExe = path.resolve(path.join(rootAtomFolder, 'Update.exe'));
const exeName = path.basename(process.execPath);
const appFolder = path.resolve(process.execPath, '..')
const rootAtomFolder = path.resolve(appFolder, '..')
const updateDotExe = path.resolve(path.join(rootAtomFolder, 'Update.exe'))
const exeName = path.basename(process.execPath)
const spawn = function (command, args) {
let spawnedProcess;
let spawnedProcess
try {
spawnedProcess = ChildProcess.spawn(command, args, {detached: true});
spawnedProcess = ChildProcess.spawn(command, args, { detached: true })
} catch (error) {}
return spawnedProcess;
};
return spawnedProcess
}
const spawnUpdate = function (args) {
return spawn(updateDotExe, args);
};
return spawn(updateDotExe, args)
}
const squirrelEvent = process.argv[1];
const squirrelEvent = process.argv[1]
switch (squirrelEvent) {
case '--squirrel-install':
case '--squirrel-updated':
spawnUpdate(['--createShortcut', exeName]);
spawnUpdate(['--createShortcut', exeName])
setTimeout(app.quit, 1000);
return true;
setTimeout(app.quit, 1000)
return true
case '--squirrel-uninstall':
spawnUpdate(['--removeShortcut', exeName]);
spawnUpdate(['--removeShortcut', exeName])
setTimeout(app.quit, 1000);
return true;
setTimeout(app.quit, 1000)
return true
case '--squirrel-obsolete':
app.quit();
return true;
app.quit()
return true
}
}

View File

@ -1,26 +1,23 @@
import { app, BrowserWindow, Menu, ipcMain, autoUpdater, dialog } from 'electron'
import isDev from 'electron-is-dev'
import logger from 'electron-log'
import { join } from 'path'
import updater from './updater.js'
import { join, dirname } from 'path'
import Updater from './updater.js'
import electronStartup from 'electron-squirrel-startup'
import install from "./install.js"
import mc from './minecraft.js'
import { minimizeWindow, closeWindow } from "./menubar.js";
import install from './install.js'
import Mc from './minecraft.js'
import { minimizeWindow, closeWindow } from './menubar.js'
import { fileURLToPath } from 'url'
import { dirname } from 'path'
let updaterInstance = new updater(app, autoUpdater, dialog, logger, showNotification)
const updaterInstance = new Updater(app, autoUpdater, dialog, logger, showNotification)
updaterInstance.configUpdater()
let minecraft = new mc()
const minecraft = new Mc()
minecraft.showNotification = showNotification
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const iconPath = join(__dirname, "icon.ico")
const iconPath = join(__dirname, 'icon.ico')
let win = null
@ -36,29 +33,31 @@ function createWindow () {
},
frame: false
})
//Menu.setApplicationMenu(null)
if (!isDev) {
Menu.setApplicationMenu(null)
}
win.loadFile('src/client/checkingUpdate.html')
win.on("close", () => {
win.on('close', () => {
app.quit()
})
}
function showNotification(title, body="", clazz="info") {
win.webContents.send('notification', {title: title, body: body, class: clazz})
function showNotification (title, body = '', clazz = 'info') {
win.webContents.send('notification', { title, body, class: clazz })
}
ipcMain.on("disconnect", () => {
ipcMain.on('disconnect', () => {
minecraft.auth = null
win.loadFile('src/client/login.html').then(() => showNotification("Déconnecté", "Vous avez été déconnecté de votre compte", "success"))
win.loadFile('src/client/login.html').then(() => showNotification('Déconnecté', 'Vous avez été déconnecté de votre compte', 'success'))
})
ipcMain.on("pageReady", (event) => {
event.sender.send("nick", { name: minecraft.auth.name })
ipcMain.on('pageReady', (event) => {
event.sender.send('nick', { name: minecraft.auth.name })
minecraft.getModsInformations(event)
})
ipcMain.on("checking-update", () => {
ipcMain.on('checking-update', () => {
updaterInstance.checkForUpdates(win, showNotification)
})
@ -93,22 +92,21 @@ function main() {
}
})
ipcMain.on("login", (event, args) => {
ipcMain.on('login', (event, args) => {
minecraft.login(event, win, args.user, args.pass)
})
ipcMain.on("microsoft-login", (event) => {
ipcMain.on('microsoft-login', (event) => {
minecraft.microsoftLogin(event, win)
})
ipcMain.on("invalidateData", event => {
ipcMain.on('invalidateData', event => {
minecraft.invalidateData(event)
})
ipcMain.on("launch", (event, args) => {
ipcMain.on('launch', (event, args) => {
minecraft.launch(event, args)
})
}
main()

View File

@ -1,29 +1,26 @@
import isDev from "electron-is-dev"
import mlc from "minecraft-launcher-core"
import fetch from "node-fetch"
import { hashFile } from "hasha"
import fs from "fs"
import { join } from "path"
import constants from "constants"
import zip from "extract-zip"
import logger from "electron-log"
import { Auth, lst } from "msmc"
import decompress from "decompress"
import decompressTar from "decompress-targz"
import isDev from 'electron-is-dev'
import mlc from 'minecraft-launcher-core'
import fetch from 'node-fetch'
import { hashFile } from 'hasha'
import fs from 'fs'
import { join } from 'path'
import zip from 'extract-zip'
import logger from 'electron-log'
import { Auth, lst } from 'msmc'
import decompress from 'decompress'
import decompressTar from 'decompress-targz'
const { Authenticator, Client } = mlc
export default class Minecraft {
appdata = process.env.APPDATA || (process.platform === "darwin" ? process.env.HOME + "/Library/Preferences" : process.env.HOME + "/.local/share")
localappdata = process.env.LOCALAPPDATA || (process.platform === "darwin" ? process.env.HOME + "/Library/Application Support/" : process.env.HOME + "/.config")
minecraftpath = join(this.appdata, ".altarik")
appdata = process.env.APPDATA || (process.platform === 'darwin' ? process.env.HOME + '/Library/Preferences' : process.env.HOME + '/.local/share')
localappdata = process.env.LOCALAPPDATA || (process.platform === 'darwin' ? process.env.HOME + '/Library/Application Support/' : process.env.HOME + '/.config')
minecraftpath = join(this.appdata, '.altarik')
launcher = new Client()
auth = null
modsList = undefined
showNotification = undefined
modsInformationsEndpoint = "https://launcher.altarik.fr"
modsInformationsEndpoint = 'https://launcher.altarik.fr'
setShowNotification (showNotification) {
this.showNotification = showNotification
@ -35,17 +32,17 @@ export default class Minecraft {
*/
login (event, win, username, password) {
this.auth = null
if(isDev || password.trim() !== "") {
if (isDev || password.trim() !== '') {
this.auth = Authenticator.getAuth(username, password)
this.auth.then(v => {
win.loadFile("src/client/index.html")
win.loadFile('src/client/index.html')
}).catch(() => {
event.sender.send("loginError")
event.sender.send('loginError')
logger.error("[MJ login] User haven't purchase the game")
this.showNotification("Erreur de connexion", "Vous ne possèdez pas de licence Minecraft sur ce compte", "error")
this.showNotification('Erreur de connexion', 'Vous ne possèdez pas de licence Minecraft sur ce compte', 'error')
})
} else {
this.showNotification("Erreur de connexion", "Veuillez renseignez un mot de passe", "warning")
this.showNotification('Erreur de connexion', 'Veuillez renseignez un mot de passe', 'warning')
}
}
@ -53,28 +50,28 @@ export default class Minecraft {
* Used to login through a Microsoft account
*/
microsoftLogin (event, win) {
const authManager = new Auth("select_account")
authManager.launch("electron").then(async xboxManager => {
const authManager = new Auth('select_account')
authManager.launch('electron').then(async xboxManager => {
xboxManager.getMinecraft().then(async token => {
if (!token.isDemo()) {
this.auth = token.mclc()
logger.info("[MS login] User has been connected successfully to them account")
win.loadFile("src/client/index.html")
logger.info('[MS login] User has been connected successfully to them account')
win.loadFile('src/client/index.html')
} else {
event.sender.send("loginError")
event.sender.send('loginError')
logger.error("[MS login] User haven't purchase the game")
this.showNotification("Erreur de connexion", "Vous ne possèdez pas de licence Minecraft sur ce compte", "error")
this.showNotification('Erreur de connexion', 'Vous ne possèdez pas de licence Minecraft sur ce compte', 'error')
}
}).catch(err => {
event.sender.send("loginError")
logger.error("[MS login] " + lst(err))
this.showNotification("Erreur de connexion à Mojang", lst(err), "error")
event.sender.send('loginError')
logger.error('[MS login] ' + lst(err))
this.showNotification('Erreur de connexion à Mojang', lst(err), 'error')
})
}).catch(err => {
event.sender.send("loginError")
if(err != "error.gui.closed") {
logger.error("[MS login] " + lst(err))
this.showNotification("Une erreur de connexion à Xbox est survenue", lst(err), "error")
event.sender.send('loginError')
if (err !== 'error.gui.closed') {
logger.error('[MS login] ' + lst(err))
this.showNotification('Une erreur de connexion à Xbox est survenue', lst(err), 'error')
}
})
}
@ -85,10 +82,10 @@ export default class Minecraft {
this.launcher.launch({
authorization: this.auth,
root: this.minecraftpath,
javaPath: javaPath,
javaPath,
version: {
number: chapter.minecraftVersion,
type: chapter.type | "release",
type: chapter.type | 'release',
custom: chapter.customVersion
},
memory: {
@ -100,40 +97,40 @@ export default class Minecraft {
this.close(event, -1)
}
})
this.launcher.on("debug", (e) => logger.info(`debug: ${e}`));
this.launcher.on("data", (e) => logger.info(`data: ${e}`));
this.launcher.on("progress", (e) => {
event.sender.send("progress", e)
this.launcher.on('debug', (e) => logger.info(`debug: ${e}`))
this.launcher.on('data', (e) => logger.info(`data: ${e}`))
this.launcher.on('progress', (e) => {
event.sender.send('progress', e)
logger.info(`progress ${e.type} :${e.task} / ${e.total}`)
})
this.launcher.on("arguments", (e) => {
event.sender.send("launch", e)
logger.info("launching the game")
this.launcher.on('arguments', (e) => {
event.sender.send('launch', e)
logger.info('launching the game')
logger.info(e)
})
this.launcher.on("close", (e) => {
this.launcher.on('close', (e) => {
this.close(event, e)
})
}).catch((err) => {
this.showNotification("Impossible de lancer le jeu", "Erreur inconnue", "error")
event.sender.send("close", 1)
logger.error("Unable to launch the game")
this.showNotification('Impossible de lancer le jeu', 'Erreur inconnue', 'error')
event.sender.send('close', 1)
logger.error('Unable to launch the game')
logger.error(err)
})
}).catch(err => {
this.showNotification("Impossible de lancer le jeu", "Impossible d'installer Java pour votre configuration", "error")
event.sender.send("close", 1)
logger.warn("Unable to install java")
this.showNotification('Impossible de lancer le jeu', "Impossible d'installer Java pour votre configuration", 'error')
event.sender.send('close', 1)
logger.warn('Unable to install java')
logger.warn(err)
})
}
close (event, code) {
event.sender.send("close", code)
event.sender.send('close', code)
if (code !== 0) {
logger.warn("Minecraft didn't close properly")
logger.warn(code)
this.showNotification("Une erreur est survenue", "Minecraft ne s'est pas fermé correctement", "error")
this.showNotification('Une erreur est survenue', "Minecraft ne s'est pas fermé correctement", 'error')
}
}
@ -141,45 +138,43 @@ export default class Minecraft {
fetch(this.modsInformationsEndpoint).then(response => {
if (response.ok) {
response.json().then(data => {
let folder = join(this.localappdata, "altarik-launcher", "data")
if(!fs.existsSync(folder))
fs.mkdirSync(folder, {recursive: true})
let file = join(folder, "launcher.json")
if(fs.existsSync(file))
fs.rmSync(file)
const folder = join(this.localappdata, 'altarik-launcher', 'data')
if (!fs.existsSync(folder)) { fs.mkdirSync(folder, { recursive: true }) }
const file = join(folder, 'launcher.json')
if (fs.existsSync(file)) { fs.rmSync(file) }
fs.writeFileSync(file, JSON.stringify(data))
event.sender.send("modsInformations", this.extractModsInformations(data))
event.sender.send('modsInformations', this.extractModsInformations(data))
}).catch(err => {
event.sender.send("modsInformations", this.extractModsFromFileSystem())
event.sender.send('modsInformations', this.extractModsFromFileSystem())
logger.warn(err)
logger.warn("An error occured while trying to connect to server")
logger.warn('An error occured while trying to connect to server')
})
} else {
logger.warn("Unable to connect to server")
logger.warn(err)
event.sender.send("modsInformations", this.extractModsFromFileSystem())
logger.warn('Unable to connect to server')
logger.warn(response.status)
event.sender.send('modsInformations', this.extractModsFromFileSystem())
}
}).catch(err => {
logger.warn("Unable to connect to server")
logger.warn('Unable to connect to server')
logger.warn(err)
event.sender.send("modsInformations", this.extractModsFromFileSystem())
event.sender.send('modsInformations', this.extractModsFromFileSystem())
})
}
extractModsFromFileSystem () {
let filepath = join(this.localappdata, "altarik-launcher/data/launcher.json")
const filepath = join(this.localappdata, 'altarik-launcher/data/launcher.json')
if (fs.existsSync(filepath)) {
let content = fs.readFileSync(filepath)
const content = fs.readFileSync(filepath)
if (content !== null) {
this.showNotification("Impossible de récupérer certaines informations en ligne", "utilisation des dernières données récupérées", "warning")
this.showNotification('Impossible de récupérer certaines informations en ligne', 'utilisation des dernières données récupérées', 'warning')
return this.extractModsInformations(JSON.parse(content))
} else {
this.showNotification("Impossible de récupérer certaines informations en ligne", "Veuillez réessayez en cliquant sur le bouton", "warning")
logger.error("Unable to get chapters informations from server or filesystem")
this.showNotification('Impossible de récupérer certaines informations en ligne', 'Veuillez réessayez en cliquant sur le bouton', 'warning')
logger.error('Unable to get chapters informations from server or filesystem')
return null
}
} else {
return null;
return null
}
}
@ -190,24 +185,21 @@ export default class Minecraft {
async extractMods (chapterId, event) {
return new Promise(async (resolve, reject) => {
const modsFolder = join(this.minecraftpath, "mods")
const shaderFolder = join(this.minecraftpath, "shaderpacks")
if(fs.existsSync(modsFolder))
fs.rmSync(modsFolder, { recursive: true })
if(fs.existsSync(shaderFolder))
fs.rmSync(shaderFolder, { recursive: true })
const modsFolder = join(this.minecraftpath, 'mods')
const shaderFolder = join(this.minecraftpath, 'shaderpacks')
if (fs.existsSync(modsFolder)) { fs.rmSync(modsFolder, { recursive: true }) }
if (fs.existsSync(shaderFolder)) { fs.rmSync(shaderFolder, { recursive: true }) }
for (const i in this.modsList) {
if (Number(i) === chapterId) {
const chapter = this.modsList[i]
for(let j in chapter.modspack.mods) {
event.sender.send("progress", {type: "mods", task: 0, total: chapter.modspack.mods.length })
let modpackFolder = join(this.minecraftpath, "modpack", chapter.title)
if(!fs.existsSync(modpackFolder))
fs.mkdirSync(modpackFolder, { recursive: true })
for (const j in chapter.modspack.mods) {
event.sender.send('progress', { type: 'mods', task: 0, total: chapter.modspack.mods.length })
const modpackFolder = join(this.minecraftpath, 'modpack', chapter.title)
if (!fs.existsSync(modpackFolder)) { fs.mkdirSync(modpackFolder, { recursive: true }) }
const path = join(modpackFolder, `modpack${j}.zip`)
try {
fs.accessSync(path, constants.W_OK)
let sha1 = await hashFile(path, {algorithm: "sha1"})
fs.accessSync(path, fs.W_OK)
const sha1 = await hashFile(path, { algorithm: 'sha1' })
if (sha1 === chapter.modspack.sha1sum[j]) {
await this.unzipMods(path).catch(err => {
reject(err)
@ -218,12 +210,12 @@ export default class Minecraft {
reject(err)
})
}
event.sender.send("progress", {type: "mods", task: Number(j)+1, total: chapter.modspack.mods.length })
event.sender.send('progress', { type: 'mods', task: Number(j) + 1, total: chapter.modspack.mods.length })
} catch (err) {
try {
await this.downloadAndExtractMods(chapter.modspack.mods[j], path)
} catch (e) {
reject({ err, e })
reject(new Error({ err, e }))
return
}
}
@ -232,24 +224,24 @@ export default class Minecraft {
return
}
}
reject("didn't found the correct chapter" + chapter)
reject(new Error("didn't found the correct chapter" + chapterId))
})
}
downloadMods (link, path) {
return new Promise((resolve, reject) => {
fetch(link).then(response => {
if (response.ok) {
if(fs.existsSync(path))
fs.rmSync(path)
if (fs.existsSync(path)) { fs.rmSync(path) }
const dest = fs.createWriteStream(path)
response.body.pipe(dest)
response.body.on("end", () => {
logger.log("download completed");
resolve("download completed")
response.body.on('end', () => {
logger.log('download completed')
resolve('download completed')
})
dest.on('error', () => {
reject(new Error('An error appenned when using stream'))
})
dest.on("error", () => {
reject("An error appenned when using stream")
});
} else {
reject(response.status)
}
@ -260,21 +252,19 @@ export default class Minecraft {
}
async unzipMods (zipLocation, outLocation = this.minecraftpath) {
return new Promise(async (resolve, reject) => {
return new Promise((resolve, reject) => {
logger.info(`unzipping ${zipLocation} file to ${outLocation}`)
zip(zipLocation, { dir: outLocation }).then(() => {
resolve()
}).catch(err => {
logger.error(`failed to unzip file`)
logger.error('failed to unzip file')
reject(err)
})
})
}
async extractTar (tarLocation, outLocation = this.microsoftpath) {
return new Promise(async (resolve, reject) => {
return new Promise((resolve, reject) => {
logger.info(`Extracting targz ${tarLocation} file to ${outLocation}`)
decompress(tarLocation, outLocation, {
plugins: [
@ -283,14 +273,14 @@ export default class Minecraft {
}).then(() => {
resolve()
}).catch((e) => {
logger.error(`Failed to extract targz file`)
logger.error('Failed to extract targz file')
reject(e)
})
})
}
async downloadAndExtractMods (link, path) {
return new Promise(async (resolve, reject) => {
return new Promise((resolve, reject) => {
this.downloadMods(link, path).then(() => {
this.unzipMods(path).then(() => {
resolve()
@ -304,35 +294,39 @@ export default class Minecraft {
}
async extractJava (chapterId, event) {
return new Promise(async (resolve, reject) => {
const runtime = join(this.minecraftpath, "runtime")
if(this.modsList[chapterId].java.platform[process.platform] !== undefined
&& this.modsList[chapterId].java.platform[process.platform][process.arch] !== undefined) {
event.sender.send("progress", {type: "java", task: 0, total: 1 })
return new Promise((resolve, reject) => {
const runtime = join(this.minecraftpath, 'runtime')
if (this.modsList[chapterId].java.platform[process.platform] !== undefined &&
this.modsList[chapterId].java.platform[process.platform][process.arch] !== undefined) {
event.sender.send('progress', { type: 'java', task: 0, total: 1 })
const infos = this.modsList[chapterId].java.platform[process.platform][process.arch]
const jre = join(runtime, infos.name)
const downloadFolder = join(runtime, "download")
const downloadFolder = join(runtime, 'download')
const downloadFile = join(downloadFolder, `${infos.name}.zip`)
if(fs.existsSync(jre))
fs.rmSync(jre, { recursive: true })
if(!fs.existsSync(downloadFolder))
fs.mkdirSync(downloadFolder, { recursive: true })
if (fs.existsSync(jre)) { fs.rmSync(jre, { recursive: true }) }
if (!fs.existsSync(downloadFolder)) { fs.mkdirSync(downloadFolder, { recursive: true }) }
if (fs.existsSync(downloadFile)) {
let sha1 = await hashFile(downloadFile, {algorithm: "sha256"})
hashFile(downloadFile, { algorithm: 'sha256' }).then(sha1 => {
if (sha1 === infos.sha256sum) {
await this.extractJavaArchive(downloadFile, runtime)
let filename = process.platform == "win32" ? "java.exe" : "java"
resolve(join(jre, "bin", filename))
this.extractJavaArchive(downloadFile, runtime).then(() => {
const filename = process.platform === 'win32' ? 'java.exe' : 'java'
resolve(join(jre, 'bin', filename))
}).catch(err => {
reject(err)
})
} else {
logger.warn(`java sha256sum ${sha1} don't correspond to ${infos.sha256sum}`)
await this.downloadAndExtractJava(infos, downloadFolder, runtime).then(() => resolve(join(jre, "bin", process.platform === "win32" ? "java.exe" : "java"))).catch(err => reject(err))
this.downloadAndExtractJava(infos, downloadFolder, runtime).then(() => resolve(join(jre, 'bin', process.platform === 'win32' ? 'java.exe' : 'java'))).catch(err => reject(err))
}
}).catch(err => {
reject(err)
})
} else {
await this.downloadAndExtractJava(infos, downloadFolder, runtime).then(() => resolve(join(jre, "bin", process.platform === "win32" ? "java.exe" : "java"))).catch(err => reject(err))
this.downloadAndExtractJava(infos, downloadFolder, runtime).then(() => resolve(join(jre, 'bin', process.platform === 'win32' ? 'java.exe' : 'java'))).catch(err => reject(err))
}
event.sender.send("progress", {type: "java", task: 1, total: 1 })
event.sender.send('progress', { type: 'java', task: 1, total: 1 })
} else {
reject("There is not available version for this system")
reject(new Error('There is not available version for this system'))
}
})
}
@ -341,13 +335,13 @@ export default class Minecraft {
return new Promise((resolve, reject) => {
logger.info(`Downloading ${infos.name}`)
this.downloadMods(infos.link, join(downloadFolder, `${infos.name}.zip`)).then(() => {
logger.info(`download completed`)
logger.info('download completed')
this.extractJavaArchive(join(downloadFolder, `${infos.name}.zip`), runtimeFolder).then(() => {
logger.info(`File unzipped`)
logger.info('File unzipped')
resolve()
}).catch(err => {
let join_s = join(downloadFolder, `${infos.name}.zip`)
logger.info(`Failed to unzip ${join_s}`)
const joinS = join(downloadFolder, `${infos.name}.zip`)
logger.info(`Failed to unzip ${joinS}`)
reject(err)
})
}).catch(err => {
@ -358,7 +352,7 @@ export default class Minecraft {
}
async extractJavaArchive (zipLocation, outLocation) {
if(process.platform === "win32") {
if (process.platform === 'win32') {
await this.unzipMods(zipLocation, outLocation)
} else {
await this.extractTar(zipLocation, outLocation)
@ -366,20 +360,16 @@ export default class Minecraft {
}
invalidateData (event) {
logger.info("invalidate game data...")
const assets = join(this.minecraftpath, "assets")
const librairies = join(this.minecraftpath,"libraries")
const natives = join(this.minecraftpath, "natives")
const versions = join(this.minecraftpath, "versions")
if(fs.existsSync(assets))
fs.rmSync(assets, { recursive: true })
if(fs.existsSync(librairies))
fs.rmSync(librairies, { recursive: true })
if(fs.existsSync(natives))
fs.rmSync(natives, { recursive: true })
if(fs.existsSync(versions))
fs.rmSync(versions, { recursive: true })
logger.info("Game data invalidated")
event.sender.send("invalidated")
logger.info('invalidate game data...')
const assets = join(this.minecraftpath, 'assets')
const librairies = join(this.minecraftpath, 'libraries')
const natives = join(this.minecraftpath, 'natives')
const versions = join(this.minecraftpath, 'versions')
if (fs.existsSync(assets)) { fs.rmSync(assets, { recursive: true }) }
if (fs.existsSync(librairies)) { fs.rmSync(librairies, { recursive: true }) }
if (fs.existsSync(natives)) { fs.rmSync(natives, { recursive: true }) }
if (fs.existsSync(versions)) { fs.rmSync(versions, { recursive: true }) }
logger.info('Game data invalidated')
event.sender.send('invalidated')
}
}

View File

@ -1,11 +1,10 @@
import isDev from 'electron-is-dev'
import fetch from 'node-fetch'
import pkg from "../../package.json" assert { type: "json" }
import pkg from '../../package.json' assert {type: 'json'}
const server = 'https://update.electronjs.org'
export default class Updater {
constructor (app, autoUpdater, dialog, logger, ipcMain) {
this.app = app
this.autoUpdater = autoUpdater
@ -15,9 +14,9 @@ export default class Updater {
}
configUpdater () {
this.logger.info(`electron version: ${process.versions['electron']}`)
this.logger.info(`chrome version: ${process.versions['chrome']}`)
this.logger.info(`Node version: ${process.versions['node']}`)
this.logger.info(`electron version: ${process.versions.electron}`)
this.logger.info(`chrome version: ${process.versions.chrome}`)
this.logger.info(`Node version: ${process.versions.node}`)
this.logger.info(`platform: ${process.platform}`)
this.logger.info(`arch: ${process.arch}`)
if (isDev) {
@ -28,38 +27,36 @@ export default class Updater {
// TODO : replace dialog by automatic restart
this.autoUpdater.on('update-downloaded', (_event, releaseNotes, releaseName) => {
this.logger.info(`update downloaded ${releaseName}`)
this.logger.info("Leaving application to install update...")
this.logger.info('Leaving application to install update...')
this.autoUpdater.quitAndInstall()
})
}
checkForUpdates (win, showNotification) {
if (isDev) {
win.loadFile('src/client/login.html')
return;
return
}
this.logger.info("Checking for update...")
this.logger.info('Checking for update...')
const feed = `${server}/${pkg.repository}/${process.platform}-${process.arch}/${this.app.getVersion()}`
if(process.platform != 'linux') {
if (process.platform !== 'linux') {
this.autoUpdater.setFeedURL(feed)
this.autoUpdater.on('error', message => {
this.displayError(win, showNotification, message)
})
this.autoUpdater.on('update-available', () => {
this.logger.info("update available, downloading...")
win.webContents.send("update-available")
this.logger.info('update available, downloading...')
win.webContents.send('update-available')
})
this.autoUpdater.on("update-not-available", () => {
this.logger.info("update not available")
this.autoUpdater.on('update-not-available', () => {
this.logger.info('update not available')
win.loadFile('src/client/login.html')
})
this.autoUpdater.checkForUpdates()
} else {
this.searchUpdateLinux(win, showNotification)
}
}
searchUpdateLinux (win, showNotification) {
@ -68,21 +65,21 @@ export default class Updater {
if (response.status === 200) {
response.json().then(json => {
if (json.tag_name !== pkg.version) {
let asset = json.assets.filter(el => el.browser_download_url.includes(".zip"))
const asset = json.assets.filter(el => el.browser_download_url.includes('.zip'))
if (asset.length === 1) {
let downloadUrl = asset[0].browser_download_url
win.webContents.send("please-download-update", { url: downloadUrl} )
this.logger.info("update available, please download")
const downloadUrl = asset[0].browser_download_url
win.webContents.send('please-download-update', { url: downloadUrl })
this.logger.info('update available, please download')
} else {
this.displayError(win, showNotification, "Can't find right asset in last update")
}
} else {
this.logger.info("update not available")
this.logger.info('update not available')
win.loadFile('src/client/login.html')
}
}).catch(err => this.displayError(win, showNotification, err))
} else {
this.displayError(win, showNotification, "Server unavailable")
this.displayError(win, showNotification, 'Server unavailable')
}
}).catch(err => this.displayError(win, showNotification, err))
}
@ -91,8 +88,7 @@ export default class Updater {
this.logger.error('There was a problem updating the application')
this.logger.error(errorMessage)
win.loadFile('src/client/login.html').then(() => {
showNotification("Une erreur est survenue lors de la vérification de la mise à jour", "Veuillez vérifier votre connexion internet et réessayer", "error")
showNotification('Une erreur est survenue lors de la vérification de la mise à jour', 'Veuillez vérifier votre connexion internet et réessayer', 'error')
})
}
}

1128
yarn.lock

File diff suppressed because it is too large Load Diff