diff --git a/next.config.js b/next.config.js
index c06f75af..8207dc63 100644
--- a/next.config.js
+++ b/next.config.js
@@ -7,6 +7,7 @@ const nextConfig = {
domains: ["cdn.jsdelivr.net"],
unoptimized: true,
},
+ experimental: { images: { allowFutureImage: true } }
};
module.exports = nextConfig;
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index a78403ce..fc214a9c 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 7c60dbe1..c844d37b 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -125,5 +125,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index ffb824ec..5e02dd65 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 3df79e17..66fbe496 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -125,5 +125,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index fe00a626..539062b7 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json
index 98e08cb4..27c5fd47 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index ac5d6a99..05315c62 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 07844751..f5c23a6c 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -125,5 +125,12 @@
"apps": "Aplicações",
"clients": "Clientes",
"messages": "Mensagens"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index a7197e8e..26853b4e 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index fb07ee71..949c1a42 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index a8f7a6b8..ccabda2c 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -114,5 +114,12 @@
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
+ },
+ "prowlarr":{
+ "enableIndexers": "Indexers",
+ "numberOfGrabs": "Grabs",
+ "numberOfQueries": "Queries",
+ "numberOfFailGrabs": "Fail Grabs",
+ "numberOfFailQueries": "Fail Queries"
}
}
diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx
index 2bebe84a..89977c57 100644
--- a/src/components/services/widget.jsx
+++ b/src/components/services/widget.jsx
@@ -20,6 +20,7 @@ import Npm from "./widgets/service/npm";
import Tautulli from "./widgets/service/tautulli";
import CoinMarketCap from "./widgets/service/coinmarketcap";
import Gotify from "./widgets/service/gotify";
+import Prowlarr from "./widgets/service/prowlarr";
const widgetMappings = {
docker: Docker,
@@ -41,7 +42,8 @@ const widgetMappings = {
npm: Npm,
tautulli: Tautulli,
gotify: Gotify,
- sabnzbd: SABnzbd
+ sabnzbd: SABnzbd,
+ prowlarr: Prowlarr
};
export default function Widget({ service }) {
diff --git a/src/components/services/widgets/service/prowlarr.jsx b/src/components/services/widgets/service/prowlarr.jsx
new file mode 100644
index 00000000..39f29ec0
--- /dev/null
+++ b/src/components/services/widgets/service/prowlarr.jsx
@@ -0,0 +1,55 @@
+import useSWR from "swr";
+import { useTranslation } from "react-i18next";
+
+import Widget from "../widget";
+import Block from "../block";
+
+import { formatApiUrl } from "utils/api-helpers";
+
+export default function Prowlarr({ service }) {
+ const { t } = useTranslation();
+
+ const config = service.widget;
+
+ const { data: indexersData, error: indexersError } = useSWR(formatApiUrl(config, "indexer"));
+ const { data: grabsData, error: grabsError } = useSWR(formatApiUrl(config, "indexerstats"));
+
+ if (indexersError || grabsError) {
+ return ;
+ }
+
+ if (!indexersData || !grabsData) {
+ return (
+
+
+
+
+
+
+
+ );
+ }
+
+ const indexers = indexersData?.filter((indexer) => indexer.enable === true);
+
+ let numberOfGrabs = 0
+ let numberOfQueries = 0
+ let numberOfFailedGrabs = 0
+ let numberOfFailedQueries = 0
+ grabsData?.indexers?.forEach(element => {
+ numberOfGrabs = numberOfGrabs + element.numberOfGrabs;
+ numberOfQueries = numberOfQueries + element.numberOfQueries;
+ numberOfFailedGrabs = numberOfFailedGrabs + element.numberOfFailedGrabs;
+ numberOfFailedQueries = numberOfFailedQueries + element.numberOfFailedQueries;
+ });
+
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js
index 0a444029..05c9b342 100644
--- a/src/pages/api/services/proxy.js
+++ b/src/pages/api/services/proxy.js
@@ -23,6 +23,7 @@ const serviceProxyHandlers = {
overseerr: credentialedProxyHandler,
ombi: credentialedProxyHandler,
coinmarketcap: credentialedProxyHandler,
+ prowlarr: credentialedProxyHandler,
// super specific handlers
rutorrent: rutorrentProxyHandler,
nzbget: nzbgetProxyHandler,
diff --git a/src/utils/api-helpers.js b/src/utils/api-helpers.js
index 340ffaaa..4bb733fd 100644
--- a/src/utils/api-helpers.js
+++ b/src/utils/api-helpers.js
@@ -17,6 +17,7 @@ const formats = {
sabnzbd: `{url}/api/?apikey={key}&output=json&mode={endpoint}`,
coinmarketcap: `https://pro-api.coinmarketcap.com/{endpoint}`,
gotify: `{url}/{endpoint}`,
+ prowlarr: `{url}/api/v1/{endpoint}`,
};
export function formatApiCall(api, args) {