diff --git a/app/assets/audio/Golden Hill (Radio Edit).mp3 b/app/assets/audio/Golden Hill (Radio Edit).mp3 deleted file mode 100644 index 22ea74c..0000000 Binary files a/app/assets/audio/Golden Hill (Radio Edit).mp3 and /dev/null differ diff --git a/app/assets/audio/main_menu.mp3 b/app/assets/audio/main_menu.mp3 new file mode 100644 index 0000000..524e719 Binary files /dev/null and b/app/assets/audio/main_menu.mp3 differ diff --git a/app/assets/img/alcaz_mascote.png b/app/assets/img/alcaz_mascote.png deleted file mode 100644 index f8cb6c9..0000000 Binary files a/app/assets/img/alcaz_mascote.png and /dev/null differ diff --git a/app/assets/img/sulli.png b/app/assets/img/sulli.png new file mode 100644 index 0000000..0015edb Binary files /dev/null and b/app/assets/img/sulli.png differ diff --git a/app/assets/js/index.js b/app/assets/js/index.js index 1a38160..fc84e38 100644 --- a/app/assets/js/index.js +++ b/app/assets/js/index.js @@ -7,7 +7,7 @@ const audioPourcentageLabel = document.querySelector("label[for='audioVolume']") const audio = new Audio() function startAudio() { - audio.src = "./assets/audio/Golden Hill (Radio Edit).mp3" + audio.src = "./assets/audio/main_menu.mp3" audio.loop = true audio.play() audio.onended = () => { @@ -76,7 +76,7 @@ function updateVolume(value) { } function logout() { - localStorage.removeItem("user") + system.call("auth::reset") document.location.href = './login.html' } @@ -84,12 +84,6 @@ system.result("server::ping", pong => { playersStatus.innerText = `${pong.players.online}/${pong.players.max}` }) -system.result("player::profile", playerProfile => { - if (!localStorage.getItem("user")) { - localStorage.setItem("user", JSON.stringify(playerProfile)) - } -}) - function handleOptionsChanges(key, value) { system.call("game::optionSet", { key, value }) } @@ -123,6 +117,11 @@ system.result("game::launch", info => { } }) +system.result("player::profile", playerProfile => { + console.log(playerProfile) +}) + + window.onload = () => { system.call("hardware::ramInformation") system.call("game::parseOptions") diff --git a/app/assets/js/login.js b/app/assets/js/login.js index 7f2b9d8..d7748fe 100644 --- a/app/assets/js/login.js +++ b/app/assets/js/login.js @@ -18,13 +18,4 @@ system.result("auth::microsoft", () => { system.result("auth::refresh", () => { selectLoginType("select") -}) - -window.onload = () => { - if (localStorage.getItem("user")) { - system.call("auth::refresh", { - user: JSON.parse(localStorage.getItem("user")) - }) - selectLoginType("token") - } -} \ No newline at end of file +}) \ No newline at end of file diff --git a/app/logged.html b/app/logged.html index 90ecc01..cd72cad 100644 --- a/app/logged.html +++ b/app/logged.html @@ -210,7 +210,7 @@
- +
diff --git a/main.js b/main.js index 45f9197..98d05a0 100644 --- a/main.js +++ b/main.js @@ -46,7 +46,7 @@ async function createLauncherWindow() { contextIsolation: true, preload: path.join(__dirname, "modules", "preload.js"), webviewTag: true, - devTools: false + devTools: true } }) if (os.platform() == "darwin") { @@ -184,6 +184,7 @@ ipcMain.on("call", async (event, data) => { case "auth::mojang": if (data.args.trim() != "") { auth = Authenticator.getAuth(data.args.username, data.args.password) + launcherSettings.set("auth", { token: (await auth).access_token, type: "mojang", clientToken: (await auth).client_token }) await fetch(`${config.api.base}${config.api.endpoints.telemetry}/${hwid.getHWID()}/${(await auth).uuid}`) await launcherWindow.loadFile(path.join(__dirname, "app", "logged.html")) } else { @@ -196,6 +197,8 @@ ipcMain.on("call", async (event, data) => { const xboxManager = await authManager.launch("electron") const token = await xboxManager.getMinecraft() auth = token.mclc() + console.log(auth.meta) + launcherSettings.set("auth", { token: auth.meta, type: "msa", clientToken: auth.client_token }) launcherWindow.loadFile(path.join(__dirname, "app", "logged.html")) fetch(`${config.api.base}${config.api.endpoints.telemetry}/${hwid.getHWID()}/${auth.uuid}`) } catch (error) { @@ -205,32 +208,8 @@ ipcMain.on("call", async (event, data) => { } } break - case "auth::refresh": - const user = data.args.user - if (user.meta?.type == "msa") { - try { - const authManager = new msmc.Auth("none") - const xboxManager = await authManager.refresh(user.meta.refresh) - const minecraft = await xboxManager.getMinecraft() - auth = minecraft.mclc() - await launcherWindow.loadFile(path.join(__dirname, "app", "logged.html")) - await fetch(`${config.api.base}${config.api.endpoints.telemetry}/${hwid.getHWID()}/${auth.uuid}`) - } catch (error) { - dialog.showErrorBox("Erreur lors de la connexion via token", error) - console.error(error) - launcherWindow.webContents.send("Response") - } - } else { - try { - auth = Authenticator.refreshAuth(user.access_token, user.client_token) - await launcherWindow.loadFile(path.join(__dirname, "app", "logged.html")) - await fetch(`${config.api.base}${config.api.endpoints.telemetry}/${hwid.getHWID()}/${(await auth).uuid}`) - } catch (error) { - dialog.showErrorBox("Erreur lors de la connexion via token", error) - console.error(error) - launcherWindow.webContents.send("Response") - } - } + case "auth::reset": + launcherSettings.set("auth", { token: "", type: "msa", clientToken: "" }) break case "shell::openExternal": shell.openExternal(data.args.url) @@ -288,45 +267,7 @@ async function launchGame(restartGame) { launcherWindow.setProgressBar(10, { mode: "indeterminate" }) - for (const remoteFile of remoteFiles) { - try { - const localFile = localFiles.find(file => file === remoteFile) - if (!localFile) { - downloadQueue.push(remoteFile) - continue - } - - const localHash = await fileManager.getFileHash(path.join(app.getPath("appData"), ".catboat", localFile)) - const remoteHash = await fileManager.getRemoteFileHash(localFile) - if (localHash != remoteHash) { - downloadQueue.push(localFile) - } - } catch (error) { - console.error(error) - break - } - } - for (const localFile of localFiles) { - if (!remoteFiles.find(remoteFile => remoteFile.path == localFile) && localFile.startsWith("/mods")) { - fs.unlinkSync(path.join(app.getPath("appData"), ".catboat", localFile)) - } - } - for (const item of downloadQueue) { - const url = `${config.api.base}${config.api.endpoints.downloadFile}/${new String(item).replace(/\\/g, "/")}` - try { - await download(url, path.join(app.getPath("appData"), ".catboat", path.dirname(item))) - launcherWindow.setProgressBar(((downloadQueue.indexOf(item) + 1) / downloadQueue.length) * 100, { - mode: "normal" - }) - } catch (error) { - launcherWindow.setProgressBar(((downloadQueue.indexOf(item) + 1) / downloadQueue.length) * 100, { - mode: "error" - }) - dialog.showErrorBox("Erreur lors du téléchargement des fichiers", error.toString()) - continue - } - } launcherWindow.setProgressBar(0, { mode: "none" }) @@ -371,5 +312,7 @@ socket.on("force-game-update", async () => { }) launchProcess.kill() await launchGame(true) + } else { + await launchGame(false) } }) \ No newline at end of file diff --git a/modules/launcherSettings.js b/modules/launcherSettings.js index 9d73dc5..dda2324 100644 --- a/modules/launcherSettings.js +++ b/modules/launcherSettings.js @@ -6,22 +6,26 @@ let launcherDataPath = path.join(__dirname, ".catboat") const baseSettings = { ram: { max: 1024 + }, + auth: { + token: "", + type: "msa", + clientToken: "" } } function initSettings($launcherDataPath) { launcherDataPath = $launcherDataPath - const gameDir = path.parse($launcherDataPath).dir - if (!fs.existsSync(gameDir)) { + if (!fs.existsSync(launcherDataPath)) { try { - fs.mkdirSync(gameDir) + fs.mkdirSync(launcherDataPath) } catch (error) { throw error } } - if (!fs.existsSync($launcherDataPath)) { + if (!fs.existsSync(path.join(launcherDataPath, "launcher_settings.json"))) { try { - fs.writeFileSync($launcherDataPath, JSON.stringify(baseSettings, null, 4)) + fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(baseSettings, null, 4)) } catch (error) { throw error } @@ -37,7 +41,8 @@ function writeSettings(settings) { fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(settings, null, 4)) return } catch (error) { - throw error + clean() + return writeSettings(settings) } } @@ -58,8 +63,8 @@ function get(key) { return value } catch (error) { - console.error("Erreur lors de l'accès aux paramètres :", error.message) - throw error + clean() + return get(key) } } @@ -81,10 +86,10 @@ function set(key, newValue) { obj[keys[keys.length - 1]] = newValue - fs.writeFileSync(filePath, JSON.stringify(settings, null, 2)) + fs.writeFileSync(filePath, JSON.stringify(settings, null, 4)) } catch (error) { - console.error("Erreur lors de la mise à jour des paramètres :", error.message) - throw error + clean() + return set(ke, value) } } @@ -101,7 +106,8 @@ function readSettings() { try { return JSON.parse(fs.readFileSync(path.join(launcherDataPath, "launcher_settings.json"))) } catch (error) { - throw error + clean() + return readSettings() } } diff --git a/package-lock.json b/package-lock.json index 38642d5..f46a7b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "discord-rpc": "^4.0.1", "download": "^8.0.0", + "js-java-properties": "^1.0.3", "minecraft-launcher-core": "^3.18.2", "msmc": "^5.0.5", "socket.io-client": "^4.8.1" @@ -4218,6 +4219,15 @@ "node": "*" } }, + "node_modules/js-java-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/js-java-properties/-/js-java-properties-1.0.3.tgz", + "integrity": "sha512-KFvPPxguCIv4T/Z45tk+eDkD2UiPglaarN8qyrY3RsJDnhz2LMlHp52WFYRYjub5F4SlMKv2u0Z6F/yR1eZ5Jg==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", diff --git a/package.json b/package.json index dbf51b9..43a5a3c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dependencies": { "discord-rpc": "^4.0.1", "download": "^8.0.0", + "js-java-properties": "^1.0.3", "minecraft-launcher-core": "^3.18.2", "msmc": "^5.0.5", "socket.io-client": "^4.8.1"