From 321549fa885c5b9c78010f5cf56aca3a2510f281 Mon Sep 17 00:00:00 2001 From: Mindfreak9100 Date: Thu, 12 Dec 2024 01:57:40 -0500 Subject: [PATCH] Update qbit component to show leech progress --- src/widgets/qbittorrent/component.jsx | 57 +++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index e88b2622..0d67a586 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -1,12 +1,38 @@ import { useTranslation } from "next-i18next"; +import QueueEntry from "../../components/widgets/queue/queueEntry"; + import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; +function formatTimeLeft(inputSeconds) { + let seconds = inputSeconds; + const years = Math.floor(seconds / (365 * 24 * 60 * 60)); + seconds %= 365 * 24 * 60 * 60; // Remaining seconds after subtracting years + + const days = Math.floor(seconds / (24 * 60 * 60)); + seconds %= 24 * 60 * 60; // Remaining seconds after subtracting days + + const hours = Math.floor(seconds / 3600); + seconds %= 3600; // Remaining seconds after subtracting hours + + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + + let result = ''; + if (years > 0) result += `${years}y `; + if (days > 0) result += `${days}d `; + if (hours > 0) result += `${hours}h `; + if (minutes > 0) result += `${minutes}m `; + result += `${remainingSeconds}s`; + + return result.trim(); +} + + export default function Component({ service }) { const { t } = useTranslation(); - const { widget } = service; const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents"); @@ -29,6 +55,7 @@ export default function Component({ service }) { let rateDl = 0; let rateUl = 0; let completed = 0; + const leechTorrents = []; for (let i = 0; i < torrentData.length; i += 1) { const torrent = torrentData[i]; @@ -37,16 +64,32 @@ export default function Component({ service }) { if (torrent.progress === 1) { completed += 1; } + if (torrent.state.includes("DL") || torrent.state === "downloading") { + leechTorrents.push(torrent); + } } const leech = torrentData.length - completed; + const enableLeechProgress = widget?.enableLeechProgress && Array.isArray(leechTorrents) && leechTorrents.length > 0; return ( - - - - - - + <> + + + + + + + {enableLeechProgress && + leechTorrents.map((queueEntry) => ( + + ))} + ); }