diff --git a/README.md b/README.md index 5167f9bc..ae2ecf0f 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ * Service Integration - Currently supports Sonarr, Radarr, Ombi, Emby, Jellyfin, Tautulli (Plex), Overseerr, Jellyseerr ([ilusi0n](https://github.com/benphelps/homepage/pull/34)), NZBGet, ruTorrent - Portainer, Traefik, Speedtest Tracker, PiHole, Nginx Proxy Manager ([aidenpwnz](https://github.com/benphelps/homepage/pull/45)) + - Readarr, SABnzbd ([JazzFisch]()) * Information & Utility Widgets - System Stats (Disk, CPU, Memory) - Weather via WeatherAPI.com or OpenWeatherMap ([AlexFullmoon](https://github.com/benphelps/homepage/pull/25)) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index d7152f68..8df8aa22 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -31,11 +31,6 @@ "bitrate": "Bitrate", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "Rate", - "remaining": "Verblieben", - "downloaded": "Heruntergeladen" - }, "rutorrent": { "active": "Aktiv", "upload": "Hochladen", @@ -51,6 +46,11 @@ "queued": "In Warteschlange", "movies": "Filme" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Ausstehend", "approved": "Genehmigt", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 2f7728cb..938fe810 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1,114 +1,124 @@ { - "common": { - "bytes": "{{value, bytes}}", - "bits": "{{value, bytes(bits: true)}}", - "bbytes": "{{value, bytes(binary: true)}}", - "bbits": "{{value, bytes(bits: true, binary: true)}}", - "byterate": "{{value, rate}}", - "bitrate": "{{value, rate(bits: true)}}", - "percent": "{{value, percent}}", - "number": "{{value, number}}", - "ms": "{{value, number}}" + "common": { + "bytes": "{{value, bytes}}", + "bits": "{{value, bytes(bits: true)}}", + "bbytes": "{{value, bytes(binary: true)}}", + "bbits": "{{value, bytes(bits: true, binary: true)}}", + "byterate": "{{value, rate}}", + "bitrate": "{{value, rate(bits: true)}}", + "percent": "{{value, percent}}", + "number": "{{value, number}}", + "ms": "{{value, number}}" + }, + "widget": { + "missing_type": "Missing Widget Type: {{type}}", + "api_error": "API Error", + "status": "Status" + }, + "weather": { + "current": "Current Location", + "allow": "Click to allow", + "updating": "Updating", + "wait": "Please wait" + }, + "search": { + "placeholder": "Search…" + }, + "resources": { + "total": "Total", + "free": "Free", + "used": "Used" + }, + "docker": { + "rx": "RX", + "tx": "TX", + "mem": "MEM", + "cpu": "CPU", + "offline": "Offline" + }, + "emby": { + "playing": "Playing", + "transcoding": "Transcoding", + "bitrate": "Bitrate", + "no_active": "No Active Streams" + }, + "tautulli": { + "playing": "Playing", + "transcoding": "Transcoding", + "bitrate": "Bitrate", + "no_active": "No Active Streams" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "rutorrent": { + "active": "Active", + "upload": "Upload", + "download": "Download" + }, + "sonarr": { + "wanted": "Wanted", + "queued": "Queued", + "series": "Series" + }, + "radarr": { + "wanted": "Wanted", + "queued": "Queued", + "movies": "Movies" + }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, + "ombi": { + "pending": "Pending", + "approved": "Approved", + "available": "Available" + }, + "jellyseerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available" + }, + "overseerr": { + "pending": "Pending", + "approved": "Approved", + "available": "Available" }, - "widget": { - "missing_type": "Missing Widget Type: {{type}}", - "api_error": "API Error", - "status": "Status" - }, - "weather": { - "current": "Current Location", - "allow": "Click to allow", - "updating": "Updating", - "wait": "Please wait" - }, - "search": { - "placeholder": "Search…" - }, - "resources": { - "total": "Total", - "free": "Free", - "used": "Used" - }, - "docker": { - "rx": "RX", - "tx": "TX", - "mem": "MEM", - "cpu": "CPU", - "offline": "Offline" - }, - "emby": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams" - }, - "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams" - }, - "nzbget": { - "rate": "Rate", - "remaining": "Remaining", - "downloaded": "Downloaded" - }, - "rutorrent": { - "active": "Active", - "upload": "Upload", - "download": "Download" - }, - "sonarr": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" - }, - "radarr": { - "wanted": "Wanted", - "queued": "Queued", - "movies": "Movies" - }, - "ombi": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" - }, - "jellyseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" - }, - "overseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" - }, - "pihole": { - "queries": "Queries", - "blocked": "Blocked", - "gravity": "Gravity" - }, - "speedtest": { - "upload": "Upload", - "download": "Download", - "ping": "Ping" - }, - "portainer": { - "running": "Running", - "stopped": "Stopped", - "total": "Total" - }, - "traefik": { - "routers": "Routers", - "services": "Services", - "middleware": "Middleware" - }, - "npm": { - "enabled": "Enabled", - "disabled": "Disabled", - "total": "Total" - }, - "coinmarketcap": { - "configure": "Configure one or more crypto currencies to track" - } + "pihole": { + "queries": "Queries", + "blocked": "Blocked", + "gravity": "Gravity" + }, + "speedtest": { + "upload": "Upload", + "download": "Download", + "ping": "Ping" + }, + "portainer": { + "running": "Running", + "stopped": "Stopped", + "total": "Total" + }, + "traefik": { + "routers": "Routers", + "services": "Services", + "middleware": "Middleware" + }, + "npm": { + "enabled": "Enabled", + "disabled": "Disabled", + "total": "Total" + }, + "coinmarketcap": { + "configure": "Configure one or more crypto currencies to track" + } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index f80a0a2b..57e8cd27 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -23,18 +23,13 @@ "playing": "En ejecución", "transcoding": "Transcodificando", "bitrate": "Tasa de Bits", - "no_active": "No Active Streams" + "no_active": "No hay streams activos" }, "tautulli": { "playing": "En ejecución", "transcoding": "Transcodificación", "bitrate": "Tasa de bits", - "no_active": "No Active Streams" - }, - "nzbget": { - "rate": "Velocidad", - "remaining": "Restante", - "downloaded": "Descargado" + "no_active": "No hay streams activos" }, "rutorrent": { "active": "Activo", @@ -51,6 +46,11 @@ "queued": "Puesto en cola", "movies": "Películas" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Pendiente", "approved": "Aprobado", @@ -93,8 +93,18 @@ "wait": "Espere, por favor" }, "overseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" + "pending": "Pendiente", + "approved": "Aprobado", + "available": "Disponible" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 333a9e02..8838dc19 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -8,33 +8,28 @@ "placeholder": "Recherche…" }, "resources": { - "total": "Totale", + "total": "Total", "free": "Libre", "used": "Utilisée" }, "docker": { "rx": "Rx", - "tx": "TX", - "mem": "Mem", - "cpu": "CPU", + "tx": "Tx", + "mem": "Mém", + "cpu": "Cpu", "offline": "Hors ligne" }, "emby": { - "playing": "En jouant", - "transcoding": "Transcoding", - "bitrate": "Débiter", - "no_active": "No Active Streams" + "playing": "En lecture", + "transcoding": "Transcodage", + "bitrate": "Débit", + "no_active": "Aucun flux actif" }, "tautulli": { - "playing": "En jouant", - "transcoding": "Transcoding", - "bitrate": "Débiter", - "no_active": "No Active Streams" - }, - "nzbget": { - "rate": "Évaluer", - "remaining": "Restante", - "downloaded": "Téléchargé" + "playing": "En lecture", + "transcoding": "Transcodage", + "bitrate": "Débit", + "no_active": "Aucun flux actif" }, "rutorrent": { "active": "Active", @@ -44,13 +39,18 @@ "sonarr": { "wanted": "Recherchée", "queued": "En queue", - "series": "Série" + "series": "Séries" }, "radarr": { "wanted": "Recherchée", "queued": "En queue", "movies": "Films" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "En attente", "approved": "Approuvée", @@ -74,7 +74,7 @@ "portainer": { "running": "Fonctionnement", "stopped": "Arrêté", - "total": "Totale" + "total": "Total" }, "traefik": { "routers": "Routeurs", @@ -83,8 +83,8 @@ }, "npm": { "enabled": "Activé", - "disabled": "Handicapée", - "total": "Totale" + "disabled": "Désactivé", + "total": "Total" }, "common": { "bbytes": "{{value, bytes(binary: true)}}", @@ -104,8 +104,18 @@ "wait": "Veuillez patienter" }, "overseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" + "pending": "En attente", + "approved": "Approuvée", + "available": "Disponible" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "remaining": "Remaining", + "downloaded": "Downloaded", + "rate": "Rate" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index e582a7a9..8db3fc13 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -7,16 +7,16 @@ "rx": "RX" }, "emby": { - "playing": "Playing", + "playing": "In riproduzione", "transcoding": "Transcoding", "bitrate": "Bitrate", - "no_active": "No Active Streams" + "no_active": "Nessuno Stream Attivo" }, "tautulli": { - "playing": "Playing", + "playing": "In riproduzione", "transcoding": "Transcoding", "bitrate": "Bitrate", - "no_active": "No Active Streams" + "no_active": "Nessuno Stream Attivo" }, "speedtest": { "upload": "Upload", @@ -24,77 +24,87 @@ "ping": "Ping" }, "portainer": { - "running": "Running", - "stopped": "Stopped", - "total": "Total" + "running": "In esecuzione", + "stopped": "Fermati", + "total": "Totali" }, "traefik": { "routers": "Routers", - "services": "Services", + "services": "Servizi", "middleware": "Middleware" }, "widget": { "missing_type": "Missing Widget Type: {{type}}", - "api_error": "API Error", - "status": "Status" + "api_error": "Errore API", + "status": "Stato" }, "search": { - "placeholder": "Search…" + "placeholder": "Cerca…" }, "resources": { - "total": "Total", - "free": "Free", - "used": "Used" + "total": "Totale", + "free": "Libero", + "used": "In utilizzo" + }, + "rutorrent": { + "active": "Attivo", + "upload": "Upload", + "download": "Download" + }, + "sonarr": { + "series": "Serie", + "wanted": "Rchiesti", + "queued": "In coda" + }, + "radarr": { + "wanted": "Richiesti", + "queued": "In coda", + "movies": "Film" + }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, + "ombi": { + "pending": "In attesa", + "approved": "Approvati", + "available": "Disponibili" + }, + "jellyseerr": { + "pending": "In attesa", + "approved": "Approvati", + "available": "Disponibili" + }, + "pihole": { + "queries": "Richieste", + "blocked": "Bloccati", + "gravity": "Severità" + }, + "npm": { + "enabled": "Attivi", + "disabled": "Disabilitati", + "total": "Totali" + }, + "weather": { + "current": "Posizione Attuale", + "allow": "Clicca per consentire", + "updating": "Aggiornamento in corso", + "wait": "Attendi per favore" + }, + "overseerr": { + "pending": "In attesa", + "approved": "Approvati", + "available": "Disponibili" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" }, "nzbget": { "rate": "Rate", "remaining": "Remaining", "downloaded": "Downloaded" - }, - "rutorrent": { - "active": "Active", - "upload": "Upload", - "download": "Download" - }, - "sonarr": { - "series": "Series", - "wanted": "Wanted", - "queued": "Queued" - }, - "radarr": { - "wanted": "Wanted", - "queued": "Queued", - "movies": "Movies" - }, - "ombi": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" - }, - "jellyseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" - }, - "pihole": { - "queries": "Queries", - "blocked": "Blocked", - "gravity": "Gravity" - }, - "npm": { - "enabled": "Enabled", - "disabled": "Disabled", - "total": "Total" - }, - "weather": { - "current": "Current Location", - "allow": "Click to allow", - "updating": "Updating", - "wait": "Please wait" - }, - "overseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" } } diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index a174a82d..3ddf6dc4 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -31,11 +31,6 @@ "bitrate": "Bitrate", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "Takt", - "remaining": "Gjenstående", - "downloaded": "Nedlastet" - }, "rutorrent": { "active": "Aktiv", "upload": "Opplasting", @@ -51,6 +46,11 @@ "queued": "I kø", "movies": "Filmer" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Venter", "approved": "Godkjent", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "downloaded": "Downloaded", + "remaining": "Remaining" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index ada7e08f..6e5cfe45 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -16,11 +16,6 @@ "cpu": "CPU", "offline": "Offline" }, - "nzbget": { - "rate": "Rate", - "remaining": "Overgebleven", - "downloaded": "Gedownload" - }, "speedtest": { "upload": "Upload", "download": "Download", @@ -67,6 +62,11 @@ "wanted": "Gezocht", "queued": "In de wachtrij" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "In afwachting", "approved": "Goedgekeurd", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 8b4688df..b9518036 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -31,11 +31,6 @@ "bitrate": "Taxa de bits", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "Avaliar", - "remaining": "Em falta", - "downloaded": "Baixada" - }, "rutorrent": { "active": "Ativa", "upload": "Envio", @@ -51,6 +46,11 @@ "queued": "Enfileiradas", "movies": "Filmes" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Pendente", "approved": "Aprovada", @@ -107,5 +107,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index dd424d8d..d2fbcd0c 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -31,11 +31,6 @@ "bitrate": "Битрейт", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "Оценка", - "remaining": "Осталось", - "downloaded": "Загружено" - }, "rutorrent": { "active": "Активный", "upload": "Загрузить", @@ -51,6 +46,11 @@ "queued": "В очереди", "movies": "Фильмы" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Ожидание", "approved": "Одобрено", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 21fc74f6..6e42ce44 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -31,11 +31,6 @@ "bitrate": "Bitrate", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "Rate", - "remaining": "Còn lại", - "downloaded": "Đã tải" - }, "rutorrent": { "active": "Hoạt động", "upload": "Tải lên", @@ -51,6 +46,11 @@ "queued": "Queued", "movies": "Movies" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "Pending", "approved": "Approved", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 2deff5bf..90a2c51b 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -31,11 +31,6 @@ "bitrate": "比特率", "no_active": "No Active Streams" }, - "nzbget": { - "rate": "速度", - "remaining": "其余的", - "downloaded": "下载" - }, "rutorrent": { "active": "积极的", "upload": "上传", @@ -51,6 +46,11 @@ "queued": "排队", "movies": "电影" }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, "ombi": { "pending": "待办的", "approved": "得到正式认可的", @@ -96,5 +96,15 @@ "pending": "Pending", "approved": "Approved", "available": "Available" + }, + "sabnzbd": { + "rate": "Rate", + "queue": "Queue", + "timeleft": "Time Left" + }, + "nzbget": { + "rate": "Rate", + "remaining": "Remaining", + "downloaded": "Downloaded" } } diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx index c2535597..361b2484 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -2,10 +2,12 @@ import { useTranslation } from "react-i18next"; import Sonarr from "./widgets/service/sonarr"; import Radarr from "./widgets/service/radarr"; +import Readarr from "./widgets/service/readarr"; import Ombi from "./widgets/service/ombi"; import Portainer from "./widgets/service/portainer"; import Emby from "./widgets/service/emby"; import Nzbget from "./widgets/service/nzbget"; +import SABnzbd from "./widgets/service/sabnzbd"; import Docker from "./widgets/service/docker"; import Pihole from "./widgets/service/pihole"; import Rutorrent from "./widgets/service/rutorrent"; @@ -22,11 +24,13 @@ const widgetMappings = { docker: Docker, sonarr: Sonarr, radarr: Radarr, + readarr: Readarr, ombi: Ombi, portainer: Portainer, emby: Emby, jellyfin: Jellyfin, nzbget: Nzbget, + sabnzbd: SABnzbd, pihole: Pihole, rutorrent: Rutorrent, speedtest: Speedtest, diff --git a/src/components/services/widgets/service/emby.jsx b/src/components/services/widgets/service/emby.jsx index fc9d3e50..35f31f18 100644 --- a/src/components/services/widgets/service/emby.jsx +++ b/src/components/services/widgets/service/emby.jsx @@ -27,6 +27,7 @@ function ticksToString(ticks) { } function SingleSessionEntry({ playCommand, session }) { + console.log(session); const { NowPlayingItem: { Name, SeriesName, RunTimeTicks }, PlayState: { PositionTicks, IsPaused, IsMuted }, @@ -175,7 +176,7 @@ export default function Emby({ service }) { if (playing.length === 0) { return ( -
+
{t("emby.no_active")}
@@ -189,7 +190,7 @@ export default function Emby({ service }) { if (playing.length === 1) { const session = playing[0]; return ( -
+
handlePlayCommand(currentSession, command)} session={session} @@ -199,7 +200,7 @@ export default function Emby({ service }) { } return ( -
+
{playing.map((session) => ( ; + } + + if (!booksData || !wantedData || !queueData) { + return ( + + + + + + ); + } + + const have = booksData.filter((book) => book.statistics.bookFileCount > 0); + + return ( + + + + + + ); +} diff --git a/src/components/services/widgets/service/sabnzbd.jsx b/src/components/services/widgets/service/sabnzbd.jsx new file mode 100644 index 00000000..d1a08a27 --- /dev/null +++ b/src/components/services/widgets/service/sabnzbd.jsx @@ -0,0 +1,37 @@ +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 SABnzbd({ service }) { + const { t } = useTranslation(); + + const config = service.widget; + + const { data: queueData, error: queueError } = useSWR(formatApiUrl(config, "queue")); + + if (queueError) { + return ; + } + + if (!queueData) { + return ( + + + + + + ); + } + + return ( + + + + + + ); +} diff --git a/src/components/services/widgets/service/tautulli.jsx b/src/components/services/widgets/service/tautulli.jsx index c92ccbbe..3902d4fc 100644 --- a/src/components/services/widgets/service/tautulli.jsx +++ b/src/components/services/widgets/service/tautulli.jsx @@ -104,7 +104,7 @@ export default function Tautulli({ service }) { if (!activityData) { return ( -
+
-
@@ -127,7 +127,7 @@ export default function Tautulli({ service }) { if (playing.length === 0) { return ( -
+
{t("tautulli.no_active")}
@@ -141,14 +141,14 @@ export default function Tautulli({ service }) { if (playing.length === 1) { const session = playing[0]; return ( -
+
); } return ( -
+
{playing.map((session) => ( ))} diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 7b58765e..5c78a9cc 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -12,9 +12,11 @@ const serviceProxyHandlers = { pihole: genericProxyHandler, radarr: genericProxyHandler, sonarr: genericProxyHandler, + readarr: genericProxyHandler, speedtest: genericProxyHandler, tautulli: genericProxyHandler, traefik: genericProxyHandler, + sabnzbd: genericProxyHandler, // uses X-API-Key header auth portainer: credentialedProxyHandler, jellyseerr: credentialedProxyHandler, diff --git a/src/utils/api-helpers.js b/src/utils/api-helpers.js index 9050d18d..58147d24 100644 --- a/src/utils/api-helpers.js +++ b/src/utils/api-helpers.js @@ -13,6 +13,8 @@ const formats = { overseerr: `{url}/api/v1/{endpoint}`, ombi: `{url}/api/v1/{endpoint}`, npm: `{url}/api/{endpoint}`, + readarr: `{url}/api/v1/{endpoint}?apikey={key}`, + sabnzbd: `{url}/api/?apikey={key}&output=json&mode={endpoint}`, coinmarketcap: `{url}/{endpoint}`, };