From 5fb0e7666947641e11e9f1d6d18e1adc544a25a4 Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 16 Sep 2022 15:31:13 +0300 Subject: [PATCH 1/7] add backgroundOpacity option --- src/pages/index.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 3715f6a86..3b161d455 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -46,6 +46,7 @@ export default function Home({ settings }) { if (settings.background) { wrappedStyle.backgroundImage = `url(${settings.background})`; wrappedStyle.backgroundSize = "cover"; + wrappedStyle.opacity = settings.backgroundOpacity ?? 1; } useEffect(() => { From 743a07072406c567bf258f9ec851d7dc7eddfa2e Mon Sep 17 00:00:00 2001 From: Jason Fischer Date: Fri, 16 Sep 2022 11:33:11 -0700 Subject: [PATCH 2/7] Proposal to add ability to map data in a proxy --- .vscode/launch.json | 19 +++++++++++++++++++ src/pages/api/services/proxy.js | 23 +++++++++++++++++++++-- src/utils/proxies/generic.js | 9 +++++++-- 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..0e71c3ba1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Next.js: debug full stack", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/next", + "serverReadyAction": { + "pattern": "started server on .+, url: (https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" + } + } + ] +} \ No newline at end of file diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 5cb1f678c..b2b9bcd05 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -5,6 +5,16 @@ import nzbgetProxyHandler from "utils/proxies/nzbget"; import npmProxyHandler from "utils/proxies/npm"; import transmissionProxyHandler from "utils/proxies/transmission"; +function simpleArrayMapper(endpoint, targetEndpoint, data, mapper) { + if ((data?.length > 0) && (endpoint === targetEndpoint)) { + const json = JSON.parse(data.toString()); + if (json instanceof Array) { + return json.map(mapper); + } + } + return data; +} + const serviceProxyHandlers = { // uses query param auth emby: genericProxyHandler, @@ -13,7 +23,9 @@ const serviceProxyHandlers = { radarr: genericProxyHandler, sonarr: genericProxyHandler, lidarr: genericProxyHandler, - readarr: genericProxyHandler, + readarr: { proxy: genericProxyHandler, mapper: (endpoint, data) => + simpleArrayMapper(endpoint, "book", data, d => ({ statistics: { bookFileCount: d.statistics.bookFileCount } })) + }, bazarr: genericProxyHandler, speedtest: genericProxyHandler, tautulli: genericProxyHandler, @@ -42,7 +54,14 @@ export default async function handler(req, res) { const serviceProxyHandler = serviceProxyHandlers[type]; if (serviceProxyHandler) { - return serviceProxyHandler(req, res); + if (serviceProxyHandler instanceof Function) { + return serviceProxyHandler(req, res); + } + + const { proxy, mapper } = serviceProxyHandler; + if (proxy) { + return proxy(req, res, mapper); + } } return res.status(403).json({ error: "Unkown proxy service type" }); diff --git a/src/utils/proxies/generic.js b/src/utils/proxies/generic.js index 9e0a6a676..628bfe6c5 100644 --- a/src/utils/proxies/generic.js +++ b/src/utils/proxies/generic.js @@ -2,7 +2,7 @@ import getServiceWidget from "utils/service-helpers"; import { formatApiCall } from "utils/api-helpers"; import { httpProxy } from "utils/http"; -export default async function genericProxyHandler(req, res) { +export default async function genericProxyHandler(req, res, mapper) { const { group, service, endpoint } = req.query; if (group && service) { @@ -23,13 +23,18 @@ export default async function genericProxyHandler(req, res) { headers, }); + let resultData = data; + if (mapper) { + resultData = mapper(endpoint, data); + } + if (contentType) res.setHeader("Content-Type", contentType); if (status === 204 || status === 304) { return res.status(status).end(); } - return res.status(status).send(data); + return res.status(status).send(resultData); } } From ef7737e9be7e1a9695d992b96da73d120423d7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Benn=C3=A0ssar=20Carretero?= Date: Fri, 16 Sep 2022 15:24:58 +0000 Subject: [PATCH 3/7] Translated using Weblate (Spanish) Currently translated at 100.0% (104 of 104 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 18fe43a30..a1acdf2ef 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -147,9 +147,9 @@ "albums": "Álbumes" }, "adguard": { - "queries": "Queries", - "blocked": "Blocked", - "filtered": "Filtered", - "latency": "Latency" + "queries": "Consultes", + "blocked": "Bloqueado", + "filtered": "Filtrado", + "latency": "Latencia" } } From d7be64c3d97265dd79a48294361a0012936499cd Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 16 Sep 2022 15:31:13 +0300 Subject: [PATCH 4/7] add backgroundOpacity option --- src/pages/index.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 3715f6a86..3b161d455 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -46,6 +46,7 @@ export default function Home({ settings }) { if (settings.background) { wrappedStyle.backgroundImage = `url(${settings.background})`; wrappedStyle.backgroundSize = "cover"; + wrappedStyle.opacity = settings.backgroundOpacity ?? 1; } useEffect(() => { From 3f17618ad550d8750f54cffc63456c23f759a83d Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Sat, 17 Sep 2022 08:32:40 +0300 Subject: [PATCH 5/7] allow endpoint specific maps --- src/pages/api/services/proxy.js | 17 ++++++++++------- src/utils/proxies/generic.js | 6 +++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index b2b9bcd05..ef7bcfd81 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -5,11 +5,11 @@ import nzbgetProxyHandler from "utils/proxies/nzbget"; import npmProxyHandler from "utils/proxies/npm"; import transmissionProxyHandler from "utils/proxies/transmission"; -function simpleArrayMapper(endpoint, targetEndpoint, data, mapper) { - if ((data?.length > 0) && (endpoint === targetEndpoint)) { +function jsonArrayMapper(data, map) { + if (data?.length > 0) { const json = JSON.parse(data.toString()); if (json instanceof Array) { - return json.map(mapper); + return json.map(map); } } return data; @@ -23,8 +23,11 @@ const serviceProxyHandlers = { radarr: genericProxyHandler, sonarr: genericProxyHandler, lidarr: genericProxyHandler, - readarr: { proxy: genericProxyHandler, mapper: (endpoint, data) => - simpleArrayMapper(endpoint, "book", data, d => ({ statistics: { bookFileCount: d.statistics.bookFileCount } })) + readarr: { + proxy: genericProxyHandler, + maps: { + book: (data) => jsonArrayMapper(data, (d) => ({ statistics: { bookFileCount: d.statistics.bookFileCount } })), + }, }, bazarr: genericProxyHandler, speedtest: genericProxyHandler, @@ -58,9 +61,9 @@ export default async function handler(req, res) { return serviceProxyHandler(req, res); } - const { proxy, mapper } = serviceProxyHandler; + const { proxy, maps } = serviceProxyHandler; if (proxy) { - return proxy(req, res, mapper); + return proxy(req, res, maps); } } diff --git a/src/utils/proxies/generic.js b/src/utils/proxies/generic.js index 628bfe6c5..8954636b5 100644 --- a/src/utils/proxies/generic.js +++ b/src/utils/proxies/generic.js @@ -2,7 +2,7 @@ import getServiceWidget from "utils/service-helpers"; import { formatApiCall } from "utils/api-helpers"; import { httpProxy } from "utils/http"; -export default async function genericProxyHandler(req, res, mapper) { +export default async function genericProxyHandler(req, res, maps) { const { group, service, endpoint } = req.query; if (group && service) { @@ -24,8 +24,8 @@ export default async function genericProxyHandler(req, res, mapper) { }); let resultData = data; - if (mapper) { - resultData = mapper(endpoint, data); + if (maps[endpoint]) { + resultData = maps[endpoint](data); } if (contentType) res.setHeader("Content-Type", contentType); From d7a161c0889d196679a5e3f4adb6fc93f8e5d724 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Sat, 17 Sep 2022 08:34:32 +0300 Subject: [PATCH 6/7] remove map for now --- src/pages/api/services/proxy.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index ef7bcfd81..6b8da7dab 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -23,12 +23,7 @@ const serviceProxyHandlers = { radarr: genericProxyHandler, sonarr: genericProxyHandler, lidarr: genericProxyHandler, - readarr: { - proxy: genericProxyHandler, - maps: { - book: (data) => jsonArrayMapper(data, (d) => ({ statistics: { bookFileCount: d.statistics.bookFileCount } })), - }, - }, + readarr: genericProxyHandler, bazarr: genericProxyHandler, speedtest: genericProxyHandler, tautulli: genericProxyHandler, From cf41e988eb6d6276823c9afc70c4a295af2a0097 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Sat, 17 Sep 2022 08:38:53 +0300 Subject: [PATCH 7/7] fix error with no map --- src/utils/proxies/generic.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/proxies/generic.js b/src/utils/proxies/generic.js index 8954636b5..41c013dbb 100644 --- a/src/utils/proxies/generic.js +++ b/src/utils/proxies/generic.js @@ -24,7 +24,7 @@ export default async function genericProxyHandler(req, res, maps) { }); let resultData = data; - if (maps[endpoint]) { + if (maps?.[endpoint]) { resultData = maps[endpoint](data); }