mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-11 05:46:17 +00:00
feat: removing aria2
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,7 +9,6 @@ out
|
|||||||
.vite
|
.vite
|
||||||
ludusavi/
|
ludusavi/
|
||||||
hydra-python-rpc/
|
hydra-python-rpc/
|
||||||
aria2/
|
|
||||||
.python-version
|
.python-version
|
||||||
|
|
||||||
# Sentry Config File
|
# Sentry Config File
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ productName: Hydra
|
|||||||
directories:
|
directories:
|
||||||
buildResources: build
|
buildResources: build
|
||||||
extraResources:
|
extraResources:
|
||||||
- aria2
|
|
||||||
- ludusavi
|
- ludusavi
|
||||||
- hydra-python-rpc
|
- hydra-python-rpc
|
||||||
- seeds
|
- seeds
|
||||||
|
|||||||
@@ -5,4 +5,3 @@ pywin32; sys_platform == 'win32'
|
|||||||
psutil
|
psutil
|
||||||
Pillow
|
Pillow
|
||||||
flask
|
flask
|
||||||
aria2p
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ const { default: axios } = require("axios");
|
|||||||
const util = require("node:util");
|
const util = require("node:util");
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
const { spawnSync } = require("node:child_process");
|
|
||||||
|
|
||||||
const exec = util.promisify(require("node:child_process").exec);
|
const exec = util.promisify(require("node:child_process").exec);
|
||||||
|
|
||||||
@@ -47,79 +46,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();
|
downloadLudusavi();
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import { electronApp, optimizer } from "@electron-toolkit/utils";
|
|||||||
import { logger, WindowManager } from "@main/services";
|
import { logger, WindowManager } from "@main/services";
|
||||||
import resources from "@locales";
|
import resources from "@locales";
|
||||||
import { PythonRPC } from "./services/python-rpc";
|
import { PythonRPC } from "./services/python-rpc";
|
||||||
import { Aria2 } from "./services/aria2";
|
|
||||||
import { db, levelKeys } from "./level";
|
import { db, levelKeys } from "./level";
|
||||||
import { loadState } from "./main";
|
import { loadState } from "./main";
|
||||||
|
|
||||||
@@ -143,7 +142,6 @@ app.on("window-all-closed", () => {
|
|||||||
app.on("before-quit", () => {
|
app.on("before-quit", () => {
|
||||||
/* Disconnects libtorrent */
|
/* Disconnects libtorrent */
|
||||||
PythonRPC.kill();
|
PythonRPC.kill();
|
||||||
Aria2.kill();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on("activate", () => {
|
app.on("activate", () => {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { DownloadManager, Ludusavi, startMainLoop } from "./services";
|
|||||||
import { RealDebridClient } from "./services/download/real-debrid";
|
import { RealDebridClient } from "./services/download/real-debrid";
|
||||||
import { HydraApi } from "./services/hydra-api";
|
import { HydraApi } from "./services/hydra-api";
|
||||||
import { uploadGamesBatch } from "./services/library-sync";
|
import { uploadGamesBatch } from "./services/library-sync";
|
||||||
import { Aria2 } from "./services/aria2";
|
|
||||||
import { downloadsSublevel } from "./level/sublevels/downloads";
|
import { downloadsSublevel } from "./level/sublevels/downloads";
|
||||||
import { sortBy } from "lodash-es";
|
import { sortBy } from "lodash-es";
|
||||||
import { Downloader } from "@shared";
|
import { Downloader } from "@shared";
|
||||||
@@ -21,8 +20,6 @@ export const loadState = async () => {
|
|||||||
|
|
||||||
await import("./events");
|
await import("./events");
|
||||||
|
|
||||||
Aria2.spawn();
|
|
||||||
|
|
||||||
if (userPreferences?.realDebridApiToken) {
|
if (userPreferences?.realDebridApiToken) {
|
||||||
RealDebridClient.authorize(userPreferences.realDebridApiToken);
|
RealDebridClient.authorize(userPreferences.realDebridApiToken);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
import path from "node:path";
|
|
||||||
import cp from "node:child_process";
|
|
||||||
import { app } from "electron";
|
|
||||||
|
|
||||||
export class Aria2 {
|
|
||||||
private static process: cp.ChildProcess | null = null;
|
|
||||||
private static readonly binaryPath = app.isPackaged
|
|
||||||
? path.join(process.resourcesPath, "aria2", "aria2c")
|
|
||||||
: path.join(__dirname, "..", "..", "aria2", "aria2c");
|
|
||||||
|
|
||||||
public static spawn() {
|
|
||||||
this.process = cp.spawn(
|
|
||||||
this.binaryPath,
|
|
||||||
[
|
|
||||||
"--enable-rpc",
|
|
||||||
"--rpc-listen-all",
|
|
||||||
"--file-allocation=none",
|
|
||||||
"--allow-overwrite=true",
|
|
||||||
"-s",
|
|
||||||
"16",
|
|
||||||
"-x",
|
|
||||||
"16",
|
|
||||||
"-k",
|
|
||||||
"1M",
|
|
||||||
],
|
|
||||||
{ stdio: "inherit", windowsHide: true }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static kill() {
|
|
||||||
this.process?.kill();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user