diff --git a/docs/widgets/services/qbittorrent.md b/docs/widgets/services/qbittorrent.md
index d60785e7f..103430deb 100644
--- a/docs/widgets/services/qbittorrent.md
+++ b/docs/widgets/services/qbittorrent.md
@@ -15,4 +15,5 @@ widget:
url: http://qbittorrent.host.or.ip
username: username
password: password
+ enableLeechProgress: true # optional, defaults to false
```
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index e3c491ac1..1c37ad492 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -479,6 +479,9 @@ export function cleanServiceGroups(groups) {
// proxmox
node,
+ // qbittorrent
+ enableLeechProgress,
+
// speedtest
bitratePrecision,
@@ -671,6 +674,9 @@ export function cleanServiceGroups(groups) {
if (type === "spoolman") {
if (spoolIds !== undefined) widget.spoolIds = spoolIds;
}
+ if (type === "qbittorrent") {
+ if (enableLeechProgress !== undefined) widget.enableLeechProgress = JSON.parse(enableLeechProgress);
+ }
return widget;
});
return cleanedService;
diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx
index e88b26227..d7fb8bf75 100644
--- a/src/widgets/qbittorrent/component.jsx
+++ b/src/widgets/qbittorrent/component.jsx
@@ -1,12 +1,13 @@
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";
export default function Component({ service }) {
const { t } = useTranslation();
-
const { widget } = service;
const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents");
@@ -29,6 +30,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 +39,31 @@ 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;
return (
-
-
-
-
-
-
+ <>
+
+
+
+
+
+
+ {widget?.enableLeechProgress &&
+ leechTorrents.map((queueEntry) => (
+
+ ))}
+ >
);
}