Update qbit component to show leech progress

This commit is contained in:
Mindfreak9100 2024-12-12 01:57:40 -05:00 committed by shamoon
parent a3f0fc9599
commit 321549fa88

View File

@ -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 (
<Container service={service}>
<Block label="qbittorrent.leech" value={t("common.number", { value: leech })} />
<Block label="qbittorrent.download" value={t("common.bibyterate", { value: rateDl, decimals: 1 })} />
<Block label="qbittorrent.seed" value={t("common.number", { value: completed })} />
<Block label="qbittorrent.upload" value={t("common.bibyterate", { value: rateUl, decimals: 1 })} />
</Container>
<>
<Container service={service}>
<Block label="qbittorrent.leech" value={t("common.number", { value: leech })} />
<Block label="qbittorrent.download" value={t("common.bibyterate", { value: rateDl, decimals: 1 })} />
<Block label="qbittorrent.seed" value={t("common.number", { value: completed })} />
<Block label="qbittorrent.upload" value={t("common.bibyterate", { value: rateUl, decimals: 1 })} />
</Container>
{enableLeechProgress &&
leechTorrents.map((queueEntry) => (
<QueueEntry
progress={(queueEntry.progress) * 100}
timeLeft={formatTimeLeft(queueEntry.eta)}
title={queueEntry.name}
activity={queueEntry.state}
key={`${queueEntry.name}-${queueEntry.amount_left}`}
/>
))}
</>
);
}