From 153291f89fdb0d23c474ea2caac792ba0b87a672 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:10:23 -0300 Subject: [PATCH] feat: apply suggestions --- src/main/events/auth/sign-out.ts | 4 ++-- src/main/events/library/close-game.ts | 4 ++-- src/main/index.ts | 4 ++-- src/main/main.ts | 4 ++-- src/main/services/download/download-manager.ts | 12 ++++++------ src/main/services/download/index.ts | 2 +- .../{rpc-manager.ts => python-instance.ts} | 16 ++++++++-------- src/main/services/process-watcher.ts | 4 ++-- torrent-client/downloader.py | 5 +++-- torrent-client/main.py | 7 ++++--- 10 files changed, 32 insertions(+), 30 deletions(-) rename src/main/services/download/{rpc-manager.ts => python-instance.ts} (92%) diff --git a/src/main/events/auth/sign-out.ts b/src/main/events/auth/sign-out.ts index a38e9d9e..0ba23e2b 100644 --- a/src/main/events/auth/sign-out.ts +++ b/src/main/events/auth/sign-out.ts @@ -1,6 +1,6 @@ import { registerEvent } from "../register-event"; import * as Sentry from "@sentry/electron/main"; -import { HydraApi, RPCManager, gamesPlaytime } from "@main/services"; +import { HydraApi, PythonInstance, gamesPlaytime } from "@main/services"; import { dataSource } from "@main/data-source"; import { DownloadQueue, Game, UserAuth } from "@main/entity"; @@ -24,7 +24,7 @@ const signOut = async (_event: Electron.IpcMainInvokeEvent) => { Sentry.setUser(null); /* Disconnects libtorrent */ - RPCManager.killTorrent(); + PythonInstance.killTorrent(); await Promise.all([ databaseOperations, diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts index 7f3b74a5..9c431d06 100644 --- a/src/main/events/library/close-game.ts +++ b/src/main/events/library/close-game.ts @@ -1,6 +1,6 @@ import { gameRepository } from "@main/repository"; import { registerEvent } from "../register-event"; -import { RPCManager, logger } from "@main/services"; +import { PythonInstance, logger } from "@main/services"; import sudo from "sudo-prompt"; import { app } from "electron"; @@ -16,7 +16,7 @@ const closeGame = async ( _event: Electron.IpcMainInvokeEvent, gameId: number ) => { - const processes = await RPCManager.getProcessList(); + const processes = await PythonInstance.getProcessList(); const game = await gameRepository.findOne({ where: { id: gameId, isDeleted: false }, }); diff --git a/src/main/index.ts b/src/main/index.ts index 1372539d..7b7c6390 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -5,7 +5,7 @@ import i18n from "i18next"; import path from "node:path"; import url from "node:url"; import { electronApp, optimizer } from "@electron-toolkit/utils"; -import { logger, RPCManager, WindowManager } from "@main/services"; +import { logger, PythonInstance, WindowManager } from "@main/services"; import { dataSource } from "@main/data-source"; import * as resources from "@locales"; import { userPreferencesRepository } from "@main/repository"; @@ -116,7 +116,7 @@ app.on("window-all-closed", () => { app.on("before-quit", () => { /* Disconnects libtorrent */ - RPCManager.kill(); + PythonInstance.kill(); }); app.on("activate", () => { diff --git a/src/main/main.ts b/src/main/main.ts index 759b1714..c80f0368 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -1,7 +1,7 @@ import { DownloadManager, RepacksManager, - RPCManager, + PythonInstance, startMainLoop, } from "./services"; import { @@ -41,7 +41,7 @@ const loadState = async (userPreferences: UserPreferences | null) => { if (nextQueueItem?.game.status === "active") { DownloadManager.startDownload(nextQueueItem.game); } else { - RPCManager.spawn(); + PythonInstance.spawn(); } startMainLoop(); diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 8d402e5a..1a1b4ca8 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -1,6 +1,6 @@ import { Game } from "@main/entity"; import { Downloader } from "@shared"; -import { RPCManager } from "./rpc-manager"; +import { PythonInstance } from "./python-instance"; import { WindowManager } from "../window-manager"; import { downloadQueueRepository, gameRepository } from "@main/repository"; import { publishDownloadCompleteNotification } from "../notifications"; @@ -16,7 +16,7 @@ export class DownloadManager { if (this.currentDownloader === Downloader.RealDebrid) { status = await RealDebridDownloader.getStatus(); } else { - status = await RPCManager.getStatus(); + status = await PythonInstance.getStatus(); } if (status) { @@ -65,7 +65,7 @@ export class DownloadManager { if (this.currentDownloader === Downloader.RealDebrid) { RealDebridDownloader.pauseDownload(); } else { - await RPCManager.pauseDownload(); + await PythonInstance.pauseDownload(); } WindowManager.mainWindow?.setProgressBar(-1); @@ -77,7 +77,7 @@ export class DownloadManager { RealDebridDownloader.startDownload(game); this.currentDownloader = Downloader.RealDebrid; } else { - RPCManager.startDownload(game); + PythonInstance.startDownload(game); this.currentDownloader = Downloader.Torrent; } } @@ -86,7 +86,7 @@ export class DownloadManager { if (this.currentDownloader === Downloader.RealDebrid) { RealDebridDownloader.cancelDownload(); } else { - RPCManager.cancelDownload(gameId); + PythonInstance.cancelDownload(gameId); } WindowManager.mainWindow?.setProgressBar(-1); @@ -98,7 +98,7 @@ export class DownloadManager { RealDebridDownloader.startDownload(game); this.currentDownloader = Downloader.RealDebrid; } else { - RPCManager.startDownload(game); + PythonInstance.startDownload(game); this.currentDownloader = Downloader.Torrent; } } diff --git a/src/main/services/download/index.ts b/src/main/services/download/index.ts index 0298f7d8..26d21799 100644 --- a/src/main/services/download/index.ts +++ b/src/main/services/download/index.ts @@ -1,2 +1,2 @@ export * from "./download-manager"; -export * from "./rpc-manager"; +export * from "./python-instance"; diff --git a/src/main/services/download/rpc-manager.ts b/src/main/services/download/python-instance.ts similarity index 92% rename from src/main/services/download/rpc-manager.ts rename to src/main/services/download/python-instance.ts index 58cc1daa..c534e41d 100644 --- a/src/main/services/download/rpc-manager.ts +++ b/src/main/services/download/python-instance.ts @@ -20,8 +20,8 @@ import { ProcessPayload, } from "./types"; -export class RPCManager { - private static rpcProcess: cp.ChildProcess | null = null; +export class PythonInstance { + private static pythonProcess: cp.ChildProcess | null = null; private static downloadingGameId = -1; private static rpc = axios.create({ @@ -32,19 +32,19 @@ export class RPCManager { }); public static spawn(args?: StartDownloadPayload) { - this.rpcProcess = startRPCClient(args); + this.pythonProcess = startRPCClient(args); } public static kill() { - if (this.rpcProcess) { - this.rpcProcess.kill(); - this.rpcProcess = null; + if (this.pythonProcess) { + this.pythonProcess.kill(); + this.pythonProcess = null; this.downloadingGameId = -1; } } public static killTorrent() { - if (this.rpcProcess) { + if (this.pythonProcess) { this.rpc.post("/action", { action: "kill-torrent" }); this.downloadingGameId = -1; } @@ -131,7 +131,7 @@ export class RPCManager { } static async startDownload(game: Game) { - if (!this.rpcProcess) { + if (!this.pythonProcess) { this.spawn({ game_id: game.id, magnet: game.uri!, diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index ec7d8e20..4ee78334 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -3,7 +3,7 @@ import { gameRepository } from "@main/repository"; import { WindowManager } from "./window-manager"; import { createGame, updateGamePlaytime } from "./library-sync"; import { GameRunning } from "@types"; -import { RPCManager } from "./download"; +import { PythonInstance } from "./download"; export const gamesPlaytime = new Map< number, @@ -19,7 +19,7 @@ export const watchProcesses = async () => { }); if (games.length === 0) return; - const processes = await RPCManager.getProcessList(); + const processes = await PythonInstance.getProcessList(); for (const game of games) { const executablePath = game.executablePath!; diff --git a/torrent-client/downloader.py b/torrent-client/downloader.py index 2368ff17..142da020 100644 --- a/torrent-client/downloader.py +++ b/torrent-client/downloader.py @@ -30,12 +30,13 @@ class Downloader: self.torrent_handles[game_id] = None self.downloading_game_id = -1 - def cancel_all_downloads(self): + def abort_session(self): for game_id in self.torrent_handles: torrent_handle = self.torrent_handles[game_id] torrent_handle.pause() self.session.remove_torrent(torrent_handle) - + + self.session.abort() self.torrent_handles = {} self.downloading_game_id = -1 diff --git a/torrent-client/main.py b/torrent-client/main.py index 8f57de8a..004cd108 100644 --- a/torrent-client/main.py +++ b/torrent-client/main.py @@ -8,11 +8,12 @@ from downloader import Downloader torrent_port = sys.argv[1] http_port = sys.argv[2] rpc_password = sys.argv[3] +start_download_payload = sys.argv[4] downloader = None -if sys.argv[4]: - initial_download = json.loads(urllib.parse.unquote(sys.argv[4])) +if start_download_payload: + initial_download = json.loads(urllib.parse.unquote(start_download_payload)) downloader = Downloader(torrent_port) downloader.start_download(initial_download['game_id'], initial_download['magnet'], initial_download['save_path']) @@ -75,7 +76,7 @@ class Handler(BaseHTTPRequestHandler): elif data['action'] == 'cancel': downloader.cancel_download(data['game_id']) elif data['action'] == 'kill-torrent': - downloader.cancel_all_downloads() + downloader.abort_session() downloader = None self.send_response(200)