From b5538655e06ab029baea1b7b3eda03b1b85d458a Mon Sep 17 00:00:00 2001 From: Francisco Coelho Date: Mon, 12 Sep 2022 17:56:04 +0100 Subject: [PATCH] Add Prowlarr widget --- next.config.js | 1 + public/locales/de/common.json | 7 +++ public/locales/en/common.json | 7 +++ public/locales/es/common.json | 7 +++ public/locales/fr/common.json | 7 +++ public/locales/it/common.json | 7 +++ public/locales/nb-NO/common.json | 7 +++ public/locales/nl/common.json | 7 +++ public/locales/pt/common.json | 7 +++ public/locales/ru/common.json | 7 +++ public/locales/vi/common.json | 7 +++ public/locales/zh-CN/common.json | 7 +++ src/components/services/widget.jsx | 4 +- .../services/widgets/service/prowlarr.jsx | 55 +++++++++++++++++++ src/pages/api/services/proxy.js | 1 + src/utils/api-helpers.js | 1 + 16 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 src/components/services/widgets/service/prowlarr.jsx 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) {