diff --git a/binaries/aria2c b/binaries/aria2c new file mode 100755 index 00000000..129ccd4b Binary files /dev/null and b/binaries/aria2c differ diff --git a/binaries/aria2c.exe b/binaries/aria2c.exe new file mode 100755 index 00000000..cf6411fe Binary files /dev/null and b/binaries/aria2c.exe differ diff --git a/electron-builder.yml b/electron-builder.yml index dd10e81a..50fe8139 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -3,7 +3,6 @@ productName: Hydra directories: buildResources: build extraResources: - - aria2 - ludusavi - hydra-python-rpc - seeds @@ -21,6 +20,7 @@ asarUnpack: win: executableName: Hydra extraResources: + - from: binaries/aria2c.exe - from: binaries/7z.exe - from: binaries/7z.dll target: @@ -51,6 +51,7 @@ dmg: linux: extraResources: - from: binaries/7zzs + - from: binaries/aria2c target: - AppImage - snap diff --git a/scripts/postinstall.cjs b/scripts/postinstall.cjs index b187b29f..7a7e3e43 100644 --- a/scripts/postinstall.cjs +++ b/scripts/postinstall.cjs @@ -3,7 +3,6 @@ const tar = require("tar"); const util = require("node:util"); const fs = require("node:fs"); const path = require("node:path"); -const { spawnSync } = require("node:child_process"); const exec = util.promisify(require("node:child_process").exec); @@ -68,79 +67,4 @@ const downloadLudusavi = async () => { }); }; -const downloadAria2WindowsAndLinux = async () => { - const file = - process.platform === "win32" - ? "aria2-1.37.0-win-64bit-build1.zip" - : "aria2-1.37.0-1-x86_64.pkg.tar.zst"; - - const downloadUrl = - process.platform === "win32" - ? `https://github.com/aria2/aria2/releases/download/release-1.37.0/${file}` - : "https://archlinux.org/packages/extra/x86_64/aria2/download/"; - - console.log(`Downloading ${file}...`); - - const response = await axios.get(downloadUrl, { responseType: "stream" }); - - const stream = response.data.pipe(fs.createWriteStream(file)); - - stream.on("finish", async () => { - console.log(`Downloaded ${file}, extracting...`); - - if (process.platform === "win32") { - await exec(`npx extract-zip ${file}`); - console.log("Extracted. Renaming folder..."); - - fs.mkdirSync("aria2"); - fs.copyFileSync( - path.join(file.replace(".zip", ""), "aria2c.exe"), - "aria2/aria2c.exe" - ); - fs.rmSync(file.replace(".zip", ""), { recursive: true }); - } else { - await exec(`tar --zstd -xvf ${file} usr/bin/aria2c`); - console.log("Extracted. Copying binary file..."); - fs.mkdirSync("aria2"); - fs.copyFileSync("usr/bin/aria2c", "aria2/aria2c"); - fs.rmSync("usr", { recursive: true }); - } - - console.log(`Extracted ${file}, removing compressed downloaded file...`); - fs.rmSync(file); - }); -}; - -const copyAria2Macos = async () => { - console.log("Checking if aria2 is installed..."); - - const isAria2Installed = spawnSync("which", ["aria2c"]).status; - - if (isAria2Installed != 0) { - console.log("Please install aria2"); - console.log("brew install aria2"); - return; - } - - console.log("Copying aria2 binary..."); - fs.mkdirSync("aria2"); - await exec(`cp $(which aria2c) aria2/aria2c`); -}; - -const copyAria2 = () => { - const aria2Path = - process.platform === "win32" ? "aria2/aria2c.exe" : "aria2/aria2c"; - - if (fs.existsSync(aria2Path)) { - console.log("Aria2 already exists, skipping download..."); - return; - } - if (process.platform == "darwin") { - copyAria2Macos(); - } else { - downloadAria2WindowsAndLinux(); - } -}; - -copyAria2(); downloadLudusavi(); diff --git a/src/main/services/aria2.ts b/src/main/services/aria2.ts index e0001b82..c6b97b9f 100644 --- a/src/main/services/aria2.ts +++ b/src/main/services/aria2.ts @@ -7,8 +7,8 @@ export class Aria2 { public static spawn() { const binaryPath = app.isPackaged - ? path.join(process.resourcesPath, "aria2", "aria2c") - : path.join(__dirname, "..", "..", "aria2", "aria2c"); + ? path.join(process.resourcesPath, "aria2c") + : path.join(__dirname, "..", "..", "binaries", "aria2c"); this.process = cp.spawn( binaryPath, diff --git a/src/main/services/python-rpc.ts b/src/main/services/python-rpc.ts index 2179ffdc..1577b1e6 100644 --- a/src/main/services/python-rpc.ts +++ b/src/main/services/python-rpc.ts @@ -7,7 +7,7 @@ import crypto from "node:crypto"; import { pythonRpcLogger } from "./logger"; import { Readable } from "node:stream"; -import { app, dialog, safeStorage } from "electron"; +import { app, dialog } from "electron"; import { db, levelKeys } from "@main/level"; interface GamePayload { @@ -49,18 +49,13 @@ export class PythonRPC { valueEncoding: "utf8", }); - if (existingPassword) - return safeStorage.decryptString(Buffer.from(existingPassword, "hex")); + if (existingPassword) return existingPassword; const newPassword = crypto.randomBytes(32).toString("hex"); - await db.put( - levelKeys.rpcPassword, - safeStorage.encryptString(newPassword).toString("hex"), - { - valueEncoding: "utf8", - } - ); + await db.put(levelKeys.rpcPassword, newPassword, { + valueEncoding: "utf8", + }); return newPassword; }