mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-01-23 05:24:55 +03:00
feat: move initial seeding for DownloadManager
This commit is contained in:
parent
843301c8b6
commit
f853a2a39e
@ -12,6 +12,7 @@ torrent_port = sys.argv[1]
|
||||
http_port = sys.argv[2]
|
||||
rpc_password = sys.argv[3]
|
||||
start_download_payload = sys.argv[4]
|
||||
start_seeding_payload = sys.argv[5]
|
||||
|
||||
downloads = {}
|
||||
# This can be streamed down from Node
|
||||
@ -32,6 +33,12 @@ if start_download_payload:
|
||||
downloads[initial_download['game_id']] = http_downloader
|
||||
http_downloader.start_download(initial_download['url'], initial_download['save_path'], initial_download.get('header'))
|
||||
|
||||
if start_seeding_payload:
|
||||
initial_seeding = json.loads(urllib.parse.unquote(start_seeding_payload))
|
||||
for seed in initial_seeding:
|
||||
torrent_downloader = TorrentDownloader(torrent_session)
|
||||
downloads[seed['game_id']] = torrent_downloader
|
||||
torrent_downloader.start_download(seed['url'], seed['save_path'], "")
|
||||
|
||||
def validate_rpc_password():
|
||||
"""Middleware to validate RPC password."""
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { DownloadManager, Ludusavi, startMainLoop } from "./services";
|
||||
import {
|
||||
downloadQueueRepository,
|
||||
gameRepository,
|
||||
userPreferencesRepository,
|
||||
} from "./repository";
|
||||
import { UserPreferences } from "./entity";
|
||||
@ -35,14 +36,20 @@ const loadState = async (userPreferences: UserPreferences | null) => {
|
||||
},
|
||||
});
|
||||
|
||||
const seedList = await gameRepository.find({
|
||||
where: {
|
||||
shouldSeed: true,
|
||||
downloader: 1,
|
||||
progress: 1,
|
||||
},
|
||||
});
|
||||
|
||||
if (nextQueueItem?.game.status === "active") {
|
||||
DownloadManager.startRPC(nextQueueItem.game);
|
||||
DownloadManager.startRPC(nextQueueItem.game, seedList);
|
||||
} else {
|
||||
PythonRPC.spawn();
|
||||
}
|
||||
|
||||
await startSeedProcess();
|
||||
|
||||
startMainLoop();
|
||||
};
|
||||
|
||||
|
@ -24,13 +24,17 @@ import { logger } from "../logger";
|
||||
export class DownloadManager {
|
||||
private static downloadingGameId: number | null = null;
|
||||
|
||||
public static startRPC(game: Game) {
|
||||
public static startRPC(game: Game, initialSeeding?: Game[]) {
|
||||
if (game && game.status === "active") {
|
||||
PythonRPC.spawn({
|
||||
game_id: game.id,
|
||||
url: game.uri!,
|
||||
save_path: game.downloadPath!,
|
||||
});
|
||||
}, initialSeeding?.map((game) => ({
|
||||
game_id: game.id,
|
||||
url: game.uri!,
|
||||
save_path: game.downloadPath!,
|
||||
})));
|
||||
|
||||
this.downloadingGameId = game.id;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ import { logger } from "./logger";
|
||||
import { Readable } from "node:stream";
|
||||
import { app, dialog } from "electron";
|
||||
|
||||
interface StartDownloadPayload {
|
||||
interface GamePayload {
|
||||
game_id: number;
|
||||
url: string;
|
||||
save_path: string;
|
||||
@ -42,12 +42,13 @@ export class PythonRPC {
|
||||
readable.on("data", logger.log);
|
||||
}
|
||||
|
||||
public static spawn(initialDownload?: StartDownloadPayload) {
|
||||
public static spawn(initialDownload?: GamePayload, initialSeeding?: GamePayload[]) {
|
||||
const commonArgs = [
|
||||
this.BITTORRENT_PORT,
|
||||
this.RPC_PORT,
|
||||
this.RPC_PASSWORD,
|
||||
initialDownload ? JSON.stringify(initialDownload) : "",
|
||||
initialSeeding ? JSON.stringify(initialSeeding) : "",
|
||||
];
|
||||
|
||||
if (app.isPackaged) {
|
||||
|
Loading…
Reference in New Issue
Block a user