From 52771d5a00d04c3d93c4c41255fc66cfb26735c2 Mon Sep 17 00:00:00 2001
From: Chubby Granny Chaser
Date: Mon, 3 Feb 2025 20:07:12 +0000
Subject: [PATCH] feat: adding articles for seeding and peers
---
python_rpc/main.py | 2 ++
.../events/torrenting/cancel-game-download.ts | 9 +++++-
.../services/download/download-manager.ts | 6 ++--
src/renderer/src/hooks/use-download.ts | 2 +-
.../src/pages/downloads/download-group.scss | 8 +++++
.../src/pages/downloads/download-group.tsx | 18 +++++++++--
.../src/pages/downloads/downloads.tsx | 32 +++++++++----------
.../modals/download-settings-modal.tsx | 6 ++--
8 files changed, 58 insertions(+), 25 deletions(-)
diff --git a/python_rpc/main.py b/python_rpc/main.py
index 2deb2029..94c34e17 100644
--- a/python_rpc/main.py
+++ b/python_rpc/main.py
@@ -159,6 +159,8 @@ def action():
downloader = downloads.get(game_id)
if downloader:
downloader.pause_download()
+
+ if downloading_game_id == game_id:
downloading_game_id = -1
elif action == 'cancel':
downloader = downloads.get(game_id)
diff --git a/src/main/events/torrenting/cancel-game-download.ts b/src/main/events/torrenting/cancel-game-download.ts
index 5d80337f..860d33bb 100644
--- a/src/main/events/torrenting/cancel-game-download.ts
+++ b/src/main/events/torrenting/cancel-game-download.ts
@@ -13,7 +13,14 @@ const cancelGameDownload = async (
await DownloadManager.cancelDownload(downloadKey);
- await downloadsSublevel.del(downloadKey);
+ const download = await downloadsSublevel.get(downloadKey);
+
+ if (!download) return;
+
+ await downloadsSublevel.put(downloadKey, {
+ ...download,
+ status: "removed",
+ });
};
registerEvent("cancelGameDownload", cancelGameDownload);
diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts
index 247d5c75..789a3010 100644
--- a/src/main/services/download/download-manager.ts
+++ b/src/main/services/download/download-manager.ts
@@ -219,8 +219,10 @@ export class DownloadManager {
} as PauseDownloadPayload)
.catch(() => {});
- WindowManager.mainWindow?.setProgressBar(-1);
- this.downloadingGameId = null;
+ if (downloadKey === this.downloadingGameId) {
+ WindowManager.mainWindow?.setProgressBar(-1);
+ this.downloadingGameId = null;
+ }
}
static async resumeDownload(download: Download) {
diff --git a/src/renderer/src/hooks/use-download.ts b/src/renderer/src/hooks/use-download.ts
index 49a033c9..6d9e04d3 100644
--- a/src/renderer/src/hooks/use-download.ts
+++ b/src/renderer/src/hooks/use-download.ts
@@ -39,7 +39,7 @@ export function useDownload() {
const pauseDownload = async (shop: GameShop, objectId: string) => {
await window.electron.pauseGameDownload(shop, objectId);
await updateLibrary();
- dispatch(clearDownload());
+ if (lastPacket?.gameId === `${shop}:${objectId}`) dispatch(clearDownload());
};
const resumeDownload = async (shop: GameShop, objectId: string) => {
diff --git a/src/renderer/src/pages/downloads/download-group.scss b/src/renderer/src/pages/downloads/download-group.scss
index 2c5e9701..4a67e857 100644
--- a/src/renderer/src/pages/downloads/download-group.scss
+++ b/src/renderer/src/pages/downloads/download-group.scss
@@ -5,6 +5,14 @@
flex-direction: column;
gap: calc(globals.$spacing-unit * 2);
+ &__details-with-article {
+ display: flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit / 2);
+ align-self: flex-start;
+ cursor: pointer;
+ }
+
&__header {
display: flex;
align-items: center;
diff --git a/src/renderer/src/pages/downloads/download-group.tsx b/src/renderer/src/pages/downloads/download-group.tsx
index 66416471..6d581683 100644
--- a/src/renderer/src/pages/downloads/download-group.tsx
+++ b/src/renderer/src/pages/downloads/download-group.tsx
@@ -24,6 +24,7 @@ import {
DownloadIcon,
LinkIcon,
PlayIcon,
+ QuestionIcon,
ThreeBarsIcon,
TrashIcon,
UnlinkIcon,
@@ -122,8 +123,12 @@ export function DownloadGroup({
{download.downloader === Downloader.Torrent && (
-
+
{lastPacket?.numPeers} peers / {lastPacket?.numSeeds} seeds
+
)}
>
@@ -136,7 +141,14 @@ export function DownloadGroup({
return download.status === "seeding" &&
download.downloader === Downloader.Torrent ? (
<>
- {t("seeding")}
+
+ {t("seeding")}
+
+
+
{uploadSpeed && {uploadSpeed}/s
}
>
) : (
@@ -217,7 +229,7 @@ export function DownloadGroup({
];
}
- if (isGameDownloading || download?.status === "active") {
+ if (isGameDownloading) {
return [
{
label: t("pause"),
diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx
index eb38c6f5..8b0e5576 100644
--- a/src/renderer/src/pages/downloads/downloads.tsx
+++ b/src/renderer/src/pages/downloads/downloads.tsx
@@ -8,7 +8,7 @@ import "./downloads.scss";
import { DeleteGameModal } from "./delete-game-modal";
import { DownloadGroup } from "./download-group";
import type { GameShop, LibraryGame, SeedingStatus } from "@types";
-import { orderBy, sortBy } from "lodash-es";
+import { orderBy } from "lodash-es";
import { ArrowDownIcon } from "@primer/octicons-react";
export default function Downloads() {
@@ -58,24 +58,24 @@ export default function Downloads() {
complete: [],
};
- const result = sortBy(library, (game) => game.download?.timestamp).reduce(
- (prev, next) => {
- /* Game has been manually added to the library or has been canceled */
- if (!next.download?.status || next.download?.status === "removed")
- return prev;
+ const result = orderBy(
+ library,
+ (game) => game.download?.timestamp,
+ "desc"
+ ).reduce((prev, next) => {
+ /* Game has been manually added to the library */
+ if (!next.download) return prev;
- /* Is downloading */
- if (lastPacket?.gameId === next.id)
- return { ...prev, downloading: [...prev.downloading, next] };
+ /* Is downloading */
+ if (lastPacket?.gameId === next.id)
+ return { ...prev, downloading: [...prev.downloading, next] };
- /* Is either queued or paused */
- if (next.download.queued || next.download?.status === "paused")
- return { ...prev, queued: [...prev.queued, next] };
+ /* Is either queued or paused */
+ if (next.download.queued || next.download?.status === "paused")
+ return { ...prev, queued: [...prev.queued, next] };
- return { ...prev, complete: [...prev.complete, next] };
- },
- initialValue
- );
+ return { ...prev, complete: [...prev.complete, next] };
+ }, initialValue);
const queued = orderBy(result.queued, (game) => game.download?.timestamp, [
"desc",
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 214af1d1..0892d0cf 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
@@ -163,8 +163,10 @@ export function DownloadSettingsModal({
selectedDownloader === downloader ? "primary" : "outline"
}
disabled={
- downloader === Downloader.RealDebrid &&
- !userPreferences?.realDebridApiToken
+ (downloader === Downloader.RealDebrid &&
+ !userPreferences?.realDebridApiToken) ||
+ (downloader === Downloader.TorBox &&
+ !userPreferences?.torBoxApiToken)
}
onClick={() => setSelectedDownloader(downloader)}
>