From 68b361e60512d5cd2acb30e300a532414986aeb6 Mon Sep 17 00:00:00 2001 From: Chubby Granny Chaser Date: Thu, 15 Aug 2024 20:46:21 +0100 Subject: [PATCH] feat: fixing real debrid download --- package.json | 3 +- .../events/torrenting/start-game-download.ts | 4 - .../services/download/download-manager.ts | 2 - .../download/generic-http-downloader.ts | 25 ++- src/main/services/download/http-download.ts | 2 +- .../download/real-debrid-downloader.ts | 58 ++----- src/main/services/real-debrid.ts | 2 +- src/renderer/src/app.css.ts | 2 +- src/renderer/src/components/hero/hero.css.ts | 1 - .../src/components/modal/modal.css.ts | 1 + src/renderer/src/main.tsx | 10 +- .../src/pages/downloads/downloads.tsx | 4 +- .../description-header/description-header.tsx | 5 +- .../pages/game-details/game-details.css.ts | 1 - .../pages/game-details/hero/hero-panel.css.ts | 1 + .../modals/download-settings-modal.tsx | 24 ++- .../modals/game-options-modal.css.ts | 1 - .../pages/game-details/sidebar/sidebar.css.ts | 1 - .../settings/settings-download-sources.tsx | 4 +- .../settings/settings-real-debrid.css.ts | 1 - .../src/pages/user/user-block-modal.tsx | 4 +- src/renderer/src/pages/user/user-content.tsx | 6 +- .../src/pages/user/user-sign-out-modal.tsx | 2 +- src/shared/index.ts | 3 + torrent-client/downloader.py | 62 ------- torrent-client/main.py | 26 +-- torrent-client/torrent_downloader.py | 158 ++++++++++++++++++ yarn.lock | 13 +- 28 files changed, 241 insertions(+), 185 deletions(-) delete mode 100644 torrent-client/downloader.py create mode 100644 torrent-client/torrent_downloader.py diff --git a/package.json b/package.json index 54d689b2..aa77084e 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,7 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/utils": "^3.0.0", - "@fontsource/fira-mono": "^5.0.13", - "@fontsource/fira-sans": "^5.0.20", + "@fontsource/noto-sans": "^5.0.22", "@primer/octicons-react": "^19.9.0", "@reduxjs/toolkit": "^2.2.3", "@sentry/electron": "^5.1.0", diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index aa33c99a..cea41596 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -44,8 +44,6 @@ const startGameDownload = async ( ); if (game) { - console.log("game", game); - await gameRepository.update( { id: game.id, @@ -97,8 +95,6 @@ const startGameDownload = async ( }, }); - console.log(updatedGame); - createGame(updatedGame!); await downloadQueueRepository.delete({ game: { id: updatedGame!.id } }); diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index b9c9d5a6..52a66693 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -102,8 +102,6 @@ export class DownloadManager { const token = await GofileApi.authorize(); const downloadLink = await GofileApi.getDownloadLink(id!); - console.log(downloadLink, token, "<<<"); - GenericHTTPDownloader.startDownload(game, downloadLink, { Cookie: `accountToken=${token}`, }); diff --git a/src/main/services/download/generic-http-downloader.ts b/src/main/services/download/generic-http-downloader.ts index 4977d503..8384a5fd 100644 --- a/src/main/services/download/generic-http-downloader.ts +++ b/src/main/services/download/generic-http-downloader.ts @@ -2,7 +2,7 @@ import { Game } from "@main/entity"; import { gameRepository } from "@main/repository"; import { calculateETA } from "./helpers"; import { DownloadProgress } from "@types"; -import { HTTPDownload } from "./http-download"; +import { HttpDownload } from "./http-download"; export class GenericHTTPDownloader { private static downloads = new Map(); @@ -11,7 +11,7 @@ export class GenericHTTPDownloader { public static async getStatus() { if (this.downloadingGame) { const gid = this.downloads.get(this.downloadingGame.id)!; - const status = await HTTPDownload.getStatus(gid); + const status = HttpDownload.getStatus(gid); if (status) { const progress = @@ -60,7 +60,7 @@ export class GenericHTTPDownloader { const gid = this.downloads.get(this.downloadingGame!.id!); if (gid) { - await HTTPDownload.pauseDownload(gid); + await HttpDownload.pauseDownload(gid); } this.downloadingGame = null; @@ -76,26 +76,23 @@ export class GenericHTTPDownloader { if (this.downloads.has(game.id)) { await this.resumeDownload(game.id!); - return; } - if (downloadUrl) { - const gid = await HTTPDownload.startDownload( - game.downloadPath!, - downloadUrl, - headers - ); + const gid = await HttpDownload.startDownload( + game.downloadPath!, + downloadUrl, + headers + ); - this.downloads.set(game.id!, gid); - } + this.downloads.set(game.id!, gid); } static async cancelDownload(gameId: number) { const gid = this.downloads.get(gameId); if (gid) { - await HTTPDownload.cancelDownload(gid); + await HttpDownload.cancelDownload(gid); this.downloads.delete(gameId); } } @@ -104,7 +101,7 @@ export class GenericHTTPDownloader { const gid = this.downloads.get(gameId); if (gid) { - await HTTPDownload.resumeDownload(gid); + await HttpDownload.resumeDownload(gid); } } } diff --git a/src/main/services/download/http-download.ts b/src/main/services/download/http-download.ts index fb573ff4..cd8cbee5 100644 --- a/src/main/services/download/http-download.ts +++ b/src/main/services/download/http-download.ts @@ -2,7 +2,7 @@ import { DownloadItem } from "electron"; import { WindowManager } from "../window-manager"; import path from "node:path"; -export class HTTPDownload { +export class HttpDownload { private static id = 0; private static downloads: Record = {}; diff --git a/src/main/services/download/real-debrid-downloader.ts b/src/main/services/download/real-debrid-downloader.ts index f61cb1ff..c6925f57 100644 --- a/src/main/services/download/real-debrid-downloader.ts +++ b/src/main/services/download/real-debrid-downloader.ts @@ -3,7 +3,7 @@ import { RealDebridClient } from "../real-debrid"; import { gameRepository } from "@main/repository"; import { calculateETA } from "./helpers"; import { DownloadProgress } from "@types"; -import { HTTPDownload } from "./http-download"; +import { HttpDownload } from "./http-download"; export class RealDebridDownloader { private static downloads = new Map(); @@ -13,19 +13,23 @@ export class RealDebridDownloader { private static async getRealDebridDownloadUrl() { if (this.realDebridTorrentId) { - const torrentInfo = await RealDebridClient.getTorrentInfo( + let torrentInfo = await RealDebridClient.getTorrentInfo( this.realDebridTorrentId ); - const { status, links } = torrentInfo; - - if (status === "waiting_files_selection") { + if (torrentInfo.status === "waiting_files_selection") { await RealDebridClient.selectAllFiles(this.realDebridTorrentId); - return null; + + torrentInfo = await RealDebridClient.getTorrentInfo( + this.realDebridTorrentId + ); } + const { links, status } = torrentInfo; + if (status === "downloaded") { const [link] = links; + const { download } = await RealDebridClient.unrestrictLink(link); return decodeURIComponent(download); } @@ -38,8 +42,6 @@ export class RealDebridDownloader { this.downloadingGame?.uri ); - console.log("download>>", download); - return decodeURIComponent(download); } @@ -49,7 +51,7 @@ export class RealDebridDownloader { public static async getStatus() { if (this.downloadingGame) { const gid = this.downloads.get(this.downloadingGame.id)!; - const status = await HTTPDownload.getStatus(gid); + const status = HttpDownload.getStatus(gid); if (status) { const progress = @@ -91,33 +93,6 @@ export class RealDebridDownloader { } } - if (this.realDebridTorrentId && this.downloadingGame) { - const torrentInfo = await RealDebridClient.getTorrentInfo( - this.realDebridTorrentId - ); - - const { status } = torrentInfo; - - if (status === "downloaded") { - this.startDownload(this.downloadingGame); - } - - const progress = torrentInfo.progress / 100; - const totalDownloaded = progress * torrentInfo.bytes; - - return { - numPeers: 0, - numSeeds: torrentInfo.seeders, - downloadSpeed: torrentInfo.speed, - timeRemaining: calculateETA( - torrentInfo.bytes, - totalDownloaded, - torrentInfo.speed - ), - isDownloadingMetadata: status === "magnet_conversion", - } as DownloadProgress; - } - return null; } @@ -125,7 +100,7 @@ export class RealDebridDownloader { if (this.downloadingGame) { const gid = this.downloads.get(this.downloadingGame.id); if (gid) { - await HTTPDownload.pauseDownload(gid); + await HttpDownload.pauseDownload(gid); } } @@ -146,18 +121,19 @@ export class RealDebridDownloader { ); } + this.downloadingGame = game; + const downloadUrl = await this.getRealDebridDownloadUrl(); if (downloadUrl) { this.realDebridTorrentId = null; - const gid = await HTTPDownload.startDownload( + const gid = await HttpDownload.startDownload( game.downloadPath!, downloadUrl ); this.downloads.set(game.id!, gid); - this.downloadingGame = game; } } @@ -165,7 +141,7 @@ export class RealDebridDownloader { const gid = this.downloads.get(gameId); if (gid) { - await HTTPDownload.cancelDownload(gid); + await HttpDownload.cancelDownload(gid); this.downloads.delete(gameId); } @@ -177,7 +153,7 @@ export class RealDebridDownloader { const gid = this.downloads.get(gameId); if (gid) { - await HTTPDownload.resumeDownload(gid); + await HttpDownload.resumeDownload(gid); } } } diff --git a/src/main/services/real-debrid.ts b/src/main/services/real-debrid.ts index 2e0debe6..26ba4c79 100644 --- a/src/main/services/real-debrid.ts +++ b/src/main/services/real-debrid.ts @@ -46,7 +46,7 @@ export class RealDebridClient { static async selectAllFiles(id: string) { const searchParams = new URLSearchParams({ files: "all" }); - await this.instance.post( + return this.instance.post( `/torrents/selectFiles/${id}`, searchParams.toString() ); diff --git a/src/renderer/src/app.css.ts b/src/renderer/src/app.css.ts index a5f9394b..c829021a 100644 --- a/src/renderer/src/app.css.ts +++ b/src/renderer/src/app.css.ts @@ -26,7 +26,7 @@ globalStyle("html, body, #root, main", { globalStyle("body", { overflow: "hidden", userSelect: "none", - fontFamily: "'Fira Mono', monospace", + fontFamily: "Noto Sans, sans-serif", fontSize: vars.size.body, background: vars.color.background, color: vars.color.body, diff --git a/src/renderer/src/components/hero/hero.css.ts b/src/renderer/src/components/hero/hero.css.ts index cdb36ee2..eaf0a101 100644 --- a/src/renderer/src/components/hero/hero.css.ts +++ b/src/renderer/src/components/hero/hero.css.ts @@ -45,7 +45,6 @@ export const description = style({ maxWidth: "700px", color: vars.color.muted, textAlign: "left", - fontFamily: "'Fira Sans', sans-serif", lineHeight: "20px", marginTop: `${SPACING_UNIT * 2}px`, }); diff --git a/src/renderer/src/components/modal/modal.css.ts b/src/renderer/src/components/modal/modal.css.ts index 45154015..d9d14fda 100644 --- a/src/renderer/src/components/modal/modal.css.ts +++ b/src/renderer/src/components/modal/modal.css.ts @@ -24,6 +24,7 @@ export const modal = recipe({ animation: `${scaleFadeIn} 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running`, backgroundColor: vars.color.background, borderRadius: "4px", + minWidth: "400px", maxWidth: "600px", color: vars.color.body, maxHeight: "100%", diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx index f87d66bf..b88348f0 100644 --- a/src/renderer/src/main.tsx +++ b/src/renderer/src/main.tsx @@ -8,12 +8,10 @@ import { HashRouter, Route, Routes } from "react-router-dom"; import * as Sentry from "@sentry/electron/renderer"; -import "@fontsource/fira-mono/400.css"; -import "@fontsource/fira-mono/500.css"; -import "@fontsource/fira-mono/700.css"; -import "@fontsource/fira-sans/400.css"; -import "@fontsource/fira-sans/500.css"; -import "@fontsource/fira-sans/700.css"; +import "@fontsource/noto-sans/400.css"; +import "@fontsource/noto-sans/500.css"; +import "@fontsource/noto-sans/700.css"; + import "react-loading-skeleton/dist/skeleton.css"; import { App } from "./app"; diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx index 531bc526..5a9c228c 100644 --- a/src/renderer/src/pages/downloads/downloads.tsx +++ b/src/renderer/src/pages/downloads/downloads.tsx @@ -132,9 +132,7 @@ export function Downloads() {

{t("no_downloads_title")}

-

- {t("no_downloads_description")} -

+

{t("no_downloads_description")}

)} diff --git a/src/renderer/src/pages/game-details/description-header/description-header.tsx b/src/renderer/src/pages/game-details/description-header/description-header.tsx index e4272534..cd73c52a 100644 --- a/src/renderer/src/pages/game-details/description-header/description-header.tsx +++ b/src/renderer/src/pages/game-details/description-header/description-header.tsx @@ -19,7 +19,10 @@ export function DescriptionHeader() { date: shopDetails?.release_date.date, })}

-

{t("publisher", { publisher: shopDetails.publishers[0] })}

+ + {Array.isArray(shopDetails.publishers) && ( +

{t("publisher", { publisher: shopDetails.publishers[0] })}

+ )} ); diff --git a/src/renderer/src/pages/game-details/game-details.css.ts b/src/renderer/src/pages/game-details/game-details.css.ts index f0bbfd2e..3dc0ec94 100644 --- a/src/renderer/src/pages/game-details/game-details.css.ts +++ b/src/renderer/src/pages/game-details/game-details.css.ts @@ -101,7 +101,6 @@ export const descriptionContent = style({ export const description = style({ userSelect: "text", lineHeight: "22px", - fontFamily: "'Fira Sans', sans-serif", fontSize: "16px", padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, "@media": { diff --git a/src/renderer/src/pages/game-details/hero/hero-panel.css.ts b/src/renderer/src/pages/game-details/hero/hero-panel.css.ts index e10d55a5..c379c1c3 100644 --- a/src/renderer/src/pages/game-details/hero/hero-panel.css.ts +++ b/src/renderer/src/pages/game-details/hero/hero-panel.css.ts @@ -9,6 +9,7 @@ export const panel = recipe({ height: "72px", minHeight: "72px", padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, + backgroundColor: vars.color.darkBackground, display: "flex", alignItems: "center", justifyContent: "space-between", diff --git a/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx b/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx index d102d2b2..dff73ea0 100644 --- a/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx @@ -60,14 +60,22 @@ export function DownloadSettingsModal({ .then((defaultDownloadsPath) => setSelectedPath(defaultDownloadsPath)); } - if ( - userPreferences?.realDebridApiToken && - downloaders.includes(Downloader.RealDebrid) - ) { - setSelectedDownloader(Downloader.RealDebrid); - } else { - setSelectedDownloader(downloaders[0]); - } + const filteredDownloaders = downloaders.filter((downloader) => { + if (downloader === Downloader.RealDebrid) + return userPreferences?.realDebridApiToken; + return true; + }); + + /* Gives preference to Real Debrid */ + const selectedDownloader = filteredDownloaders.includes( + Downloader.RealDebrid + ) + ? Downloader.RealDebrid + : filteredDownloaders[0]; + + setSelectedDownloader( + selectedDownloader === undefined ? null : selectedDownloader + ); }, [ userPreferences?.downloadsPath, downloaders, diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts b/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts index 8bf0ae7f..f844a686 100644 --- a/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts +++ b/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts @@ -15,7 +15,6 @@ export const gameOptionHeader = style({ }); export const gameOptionHeaderDescription = style({ - fontFamily: "'Fira Sans', sans-serif", fontWeight: "400", }); diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts b/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts index e6d8b60a..734e6eb3 100644 --- a/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts +++ b/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts @@ -46,7 +46,6 @@ export const requirementButton = style({ export const requirementsDetails = style({ padding: `${SPACING_UNIT * 2}px`, lineHeight: "22px", - fontFamily: "'Fira Sans', sans-serif", fontSize: "16px", }); diff --git a/src/renderer/src/pages/settings/settings-download-sources.tsx b/src/renderer/src/pages/settings/settings-download-sources.tsx index 8214117a..64d653b0 100644 --- a/src/renderer/src/pages/settings/settings-download-sources.tsx +++ b/src/renderer/src/pages/settings/settings-download-sources.tsx @@ -82,9 +82,7 @@ export function SettingsDownloadSources() { onAddDownloadSource={handleAddDownloadSource} /> -

- {t("download_sources_description")} -

+

{t("download_sources_description")}

{t("no_recent_activity_title")}

- {isMe && ( -

- {t("no_recent_activity_description")} -

- )} + {isMe &&

{t("no_recent_activity_description")}

} ) : (
-

{t("sign_out_modal_text")}

+

{t("sign_out_modal_text")}