From 9cd8188f06b7e8b6263ca48b7088e80ddfa2cdca Mon Sep 17 00:00:00 2001 From: lilezek Date: Mon, 6 May 2024 10:53:18 +0200 Subject: [PATCH] refactor: rename of the http downloader to real debrid downloader given that it only supports downloading games through real debrid --- .../events/torrenting/start-game-download.ts | 2 +- src/main/services/download-manager.ts | 10 ++--- src/main/services/downloaders/index.ts | 2 +- ...ownloader.ts => real-debrid.downloader.ts} | 37 ++----------------- src/main/services/real-debrid.ts | 28 ++++++++++++++ src/shared/index.ts | 2 +- 6 files changed, 40 insertions(+), 41 deletions(-) rename src/main/services/downloaders/{http.downloader.ts => real-debrid.downloader.ts} (65%) diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index 8ce62f0b..42ad2e84 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -26,7 +26,7 @@ const startGameDownload = async ( }); const downloader = userPreferences?.realDebridApiToken - ? Downloader.Http + ? Downloader.RealDebrid : Downloader.Torrent; const [game, repack] = await Promise.all([ diff --git a/src/main/services/download-manager.ts b/src/main/services/download-manager.ts index ca98fe82..e345835a 100644 --- a/src/main/services/download-manager.ts +++ b/src/main/services/download-manager.ts @@ -4,7 +4,7 @@ import type { Game } from "@main/entity"; import { Downloader } from "@shared"; import { writePipe } from "./fifo"; -import { HTTPDownloader } from "./downloaders"; +import { RealDebridDownloader } from "./downloaders"; export class DownloadManager { private static gameDownloading: Game; @@ -25,7 +25,7 @@ export class DownloadManager { ) { writePipe.write({ action: "cancel" }); } else { - HTTPDownloader.destroy(); + RealDebridDownloader.destroy(); } } @@ -36,7 +36,7 @@ export class DownloadManager { ) { writePipe.write({ action: "pause" }); } else { - HTTPDownloader.destroy(); + RealDebridDownloader.destroy(); } } @@ -51,7 +51,7 @@ export class DownloadManager { save_path: game!.downloadPath, }); } else { - HTTPDownloader.startDownload(game!); + RealDebridDownloader.startDownload(game!); } this.gameDownloading = game!; @@ -68,7 +68,7 @@ export class DownloadManager { save_path: game!.downloadPath, }); } else { - HTTPDownloader.startDownload(game!); + RealDebridDownloader.startDownload(game!); } this.gameDownloading = game!; diff --git a/src/main/services/downloaders/index.ts b/src/main/services/downloaders/index.ts index 54026581..cd742107 100644 --- a/src/main/services/downloaders/index.ts +++ b/src/main/services/downloaders/index.ts @@ -1,2 +1,2 @@ -export * from "./http.downloader"; +export * from "./real-debrid.downloader"; export * from "./torrent.downloader"; diff --git a/src/main/services/downloaders/http.downloader.ts b/src/main/services/downloaders/real-debrid.downloader.ts similarity index 65% rename from src/main/services/downloaders/http.downloader.ts rename to src/main/services/downloaders/real-debrid.downloader.ts index 3eafd4da..ed81ab21 100644 --- a/src/main/services/downloaders/http.downloader.ts +++ b/src/main/services/downloaders/real-debrid.downloader.ts @@ -7,7 +7,7 @@ import { GameStatus } from "@shared"; import { Downloader } from "./downloader"; import { RealDebridClient } from "../real-debrid"; -export class HTTPDownloader extends Downloader { +export class RealDebridDownloader extends Downloader { private static download: EasyDL; private static downloadSize = 0; @@ -21,43 +21,14 @@ export class HTTPDownloader extends Downloader { return 1; } - static async getDownloadUrl(game: Game) { - const torrents = await RealDebridClient.getAllTorrentsFromUser(); - const hash = RealDebridClient.extractSHA1FromMagnet(game!.repack.magnet); - let torrent = torrents.find((t) => t.hash === hash); - - if (!torrent) { - const magnet = await RealDebridClient.addMagnet(game!.repack.magnet); - - if (magnet && magnet.id) { - await RealDebridClient.selectAllFiles(magnet.id); - torrent = await RealDebridClient.getInfo(magnet.id); - } - } - - if (torrent) { - const { links } = torrent; - const { download } = await RealDebridClient.unrestrictLink(links[0]); - - if (!download) { - throw new Error("Torrent not cached on Real Debrid"); - } - - return download; - } - - throw new Error(); - } - static async startDownload(game: Game) { if (this.download) this.download.destroy(); - const download = await this.getDownloadUrl(game); + const downloadUrl = await RealDebridClient.getDownloadUrl(game); this.download = new EasyDL( - download, - path.join(game.downloadPath!, game.repack.title) + downloadUrl, + path.join(game.downloadPath!, ".rd") ); - const metadata = await this.download.metadata(); this.downloadSize = metadata.size; diff --git a/src/main/services/real-debrid.ts b/src/main/services/real-debrid.ts index b035907c..7fa12e86 100644 --- a/src/main/services/real-debrid.ts +++ b/src/main/services/real-debrid.ts @@ -62,6 +62,34 @@ export class RealDebridClient { return magnet.match(/btih:([0-9a-fA-F]*)/)?.[1].toLowerCase(); } + static async getDownloadUrl(game: Game) { + const torrents = await RealDebridClient.getAllTorrentsFromUser(); + const hash = RealDebridClient.extractSHA1FromMagnet(game!.repack.magnet); + let torrent = torrents.find((t) => t.hash === hash); + + if (!torrent) { + const magnet = await RealDebridClient.addMagnet(game!.repack.magnet); + + if (magnet && magnet.id) { + await RealDebridClient.selectAllFiles(magnet.id); + torrent = await RealDebridClient.getInfo(magnet.id); + } + } + + if (torrent) { + const { links } = torrent; + const { download } = await RealDebridClient.unrestrictLink(links[0]); + + if (!download) { + throw new Error("Torrent not cached on Real Debrid"); + } + + return download; + } + + throw new Error(); + } + static async authorize(apiToken: string) { this.instance = axios.create({ baseURL: base, diff --git a/src/shared/index.ts b/src/shared/index.ts index 7193ac09..20425fd2 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -9,7 +9,7 @@ export enum GameStatus { } export enum Downloader { - Http, + RealDebrid, Torrent, }