From 2440da8e08ba90c9230b7b31c9fba1d4ceff9432 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Oct 2022 00:31:50 -0700 Subject: [PATCH 01/62] Plex service widget without Tautulli --- package.json | 3 +- pnpm-lock.yaml | 13 ++++ public/locales/en/common.json | 5 ++ src/widgets/components.js | 1 + src/widgets/plex/component.jsx | 37 +++++++++++ src/widgets/plex/proxy.js | 108 +++++++++++++++++++++++++++++++++ src/widgets/plex/widget.js | 14 +++++ src/widgets/widgets.js | 2 + 8 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 src/widgets/plex/component.jsx create mode 100644 src/widgets/plex/proxy.js create mode 100644 src/widgets/plex/widget.js diff --git a/package.json b/package.json index 3dd2ed0d..75d02e7f 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "shvl": "^3.0.0", "swr": "^1.3.0", "tough-cookie": "^4.1.2", - "winston": "^3.8.2" + "winston": "^3.8.2", + "xml-js": "^1.6.11" }, "devDependencies": { "@tailwindcss/forms": "^0.5.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49394c8e..73e30e54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,6 +40,7 @@ specifiers: tough-cookie: ^4.1.2 typescript: ^4.8.3 winston: ^3.8.2 + xml-js: ^1.6.11 dependencies: '@headlessui/react': 1.7.2_biqbaboplfbrettd7655fr4n2y @@ -65,6 +66,7 @@ dependencies: swr: 1.3.0_react@18.2.0 tough-cookie: 4.1.2 winston: 3.8.2 + xml-js: 1.6.11 devDependencies: '@tailwindcss/forms': 0.5.3_tailwindcss@3.1.8 @@ -2554,6 +2556,10 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + /scheduler/0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: @@ -3000,6 +3006,13 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /xml-js/1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + dependencies: + sax: 1.2.4 + dev: false + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/public/locales/en/common.json b/public/locales/en/common.json index b1097904..1261c293 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -66,6 +66,11 @@ "remaining": "Remaining", "downloaded": "Downloaded" }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" + }, "sabnzbd": { "rate": "Rate", "queue": "Queue", diff --git a/src/widgets/components.js b/src/widgets/components.js index c2a6705e..f6e075d8 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -18,6 +18,7 @@ const components = { ombi: dynamic(() => import("./ombi/component")), overseerr: dynamic(() => import("./overseerr/component")), pihole: dynamic(() => import("./pihole/component")), + plex: dynamic(() => import("./plex/component")), portainer: dynamic(() => import("./portainer/component")), prowlarr: dynamic(() => import("./prowlarr/component")), proxmox: dynamic(() => import("./proxmox/component")), diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx new file mode 100644 index 00000000..731a9550 --- /dev/null +++ b/src/widgets/plex/component.jsx @@ -0,0 +1,37 @@ +import useSWR from "swr"; +import { useTranslation } from "next-i18next"; +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { formatProxyUrl } from "utils/proxy/api-helpers"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: plexData, error: plexAPIError } = useSWR(formatProxyUrl(widget, "unified"), { + refreshInterval: 5000, + }); + + if (plexAPIError) { + return ; + } + + if (!plexData) { + return ( + + + + + + ); + } + + return ( + + + + + + ); +} diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js new file mode 100644 index 00000000..c03566c8 --- /dev/null +++ b/src/widgets/plex/proxy.js @@ -0,0 +1,108 @@ +import cache from "memory-cache"; + +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import widgets from "widgets/widgets"; +import { xml2json } from "xml-js"; + +// const udmpPrefix = "/proxy/network"; +const proxyName = "plexProxyHandler"; +const librariesCacheKey = `${proxyName}__libraries`; +const moviesCacheKey = `${proxyName}__movies`; +const tvCacheKey = `${proxyName}__tv`; +const logger = createLogger(proxyName); + +async function getWidget(req) { + const { group, service } = req.query; + + if (!group || !service) { + logger.debug("Invalid or missing service '%s' or group '%s'", service, group); + return null; + } + + const widget = await getServiceWidget(group, service); + + if (!widget) { + logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group); + return null; + } + + return widget; +} + +async function fetchFromPlexAPI(endpoint, widget) { + const api = widgets?.[widget.type]?.api; + if (!api) { + return res.status(403).json({ error: "Service does not support API calls" }); + } + + const url = new URL(formatApiCall(api, { endpoint, ...widget })); + + const [status, contentType, data] = await httpProxy(url); + + if (status !== 200) { + logger.error("HTTP %d communicating with Plex. Data: %s", status, data.toString()); + return [status, data.toString()]; + } + + try { + const dataDecoded = xml2json(data.toString(), { compact: true }); + return [status, JSON.parse(dataDecoded)]; + } catch (e) { + logger.error("Error decoding Plex API data. Data: %s", data.toString()); + return [status, null]; + } +} + +export default async function plexProxyHandler(req, res) { + const widget = await getWidget(req); + if (!widget) { + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + logger.debug("Getting streams from Plex API"); + let streams; + let [status, apiData] = await fetchFromPlexAPI("/status/sessions", widget); + if (apiData && apiData.MediaContainer) { + streams = apiData.MediaContainer._attributes.size; + } + + let libraries = cache.get(librariesCacheKey); + if (libraries == undefined) { + logger.debug("Getting libraries from Plex API"); + [status, apiData] = await fetchFromPlexAPI("/library/sections", widget); + if (apiData && apiData.MediaContainer) { + libraries = apiData.MediaContainer.Directory; + cache.put(librariesCacheKey, libraries, 1000 * 60 * 60 * 6); + } + } + + let movies = cache.get(moviesCacheKey); + let tv = cache.get(tvCacheKey); + if (movies == undefined || tv == undefined) { + logger.debug("Getting movie + tv counts from Plex API"); + libraries.filter(l => ["movie", "show"].includes(l._attributes.type)).forEach(async (library) => { + [status, apiData] = await fetchFromPlexAPI(`/library/sections/${library._attributes.key}/all`, widget); + if (apiData && apiData.MediaContainer) { + const librarySection = apiData.MediaContainer._attributes; + if (library._attributes.type == 'movie') { + movies += parseInt(librarySection.size); + } else if (library._attributes.type == 'show') { + tv += parseInt(librarySection.size); + } + } + cache.put(tvCacheKey, tv, 1000 * 60 * 10); + cache.put(moviesCacheKey, movies, 1000 * 60 * 10); + }); + } + + const data = { + streams: streams, + tv: tv, + movies: movies + }; + + return res.status(status).send(data); +} diff --git a/src/widgets/plex/widget.js b/src/widgets/plex/widget.js new file mode 100644 index 00000000..e3566423 --- /dev/null +++ b/src/widgets/plex/widget.js @@ -0,0 +1,14 @@ +import plexProxyHandler from "./proxy"; + +const widget = { + api: "{url}{endpoint}?X-Plex-Token={token}", + proxyHandler: plexProxyHandler, + + mappings: { + unified: { + endpoint: "/", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index a4cab76b..cd7f5b19 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -13,6 +13,7 @@ import nzbget from "./nzbget/widget"; import ombi from "./ombi/widget"; import overseerr from "./overseerr/widget"; import pihole from "./pihole/widget"; +import plex from "./plex/widget"; import portainer from "./portainer/widget"; import prowlarr from "./prowlarr/widget"; import proxmox from "./proxmox/widget"; @@ -46,6 +47,7 @@ const widgets = { ombi, overseerr, pihole, + plex, portainer, prowlarr, proxmox, From 3c23e59a700226e197c66c3638cefab4e3b2c3dd Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Oct 2022 01:01:13 -0700 Subject: [PATCH 02/62] lint --- src/widgets/plex/component.jsx | 1 + src/widgets/plex/proxy.js | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 731a9550..9de60fd1 100644 --- a/src/widgets/plex/component.jsx +++ b/src/widgets/plex/component.jsx @@ -1,5 +1,6 @@ import useSWR from "swr"; import { useTranslation } from "next-i18next"; + import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; import { formatProxyUrl } from "utils/proxy/api-helpers"; diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index c03566c8..46ebb27c 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -1,13 +1,13 @@ +/* eslint-disable no-underscore-dangle */ import cache from "memory-cache"; +import { xml2json } from "xml-js"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; import widgets from "widgets/widgets"; -import { xml2json } from "xml-js"; -// const udmpPrefix = "/proxy/network"; const proxyName = "plexProxyHandler"; const librariesCacheKey = `${proxyName}__libraries`; const moviesCacheKey = `${proxyName}__movies`; @@ -35,7 +35,7 @@ async function getWidget(req) { async function fetchFromPlexAPI(endpoint, widget) { const api = widgets?.[widget.type]?.api; if (!api) { - return res.status(403).json({ error: "Service does not support API calls" }); + return [403, null]; } const url = new URL(formatApiCall(api, { endpoint, ...widget })); @@ -49,7 +49,7 @@ async function fetchFromPlexAPI(endpoint, widget) { try { const dataDecoded = xml2json(data.toString(), { compact: true }); - return [status, JSON.parse(dataDecoded)]; + return [status, JSON.parse(dataDecoded), contentType]; } catch (e) { logger.error("Error decoding Plex API data. Data: %s", data.toString()); return [status, null]; @@ -70,7 +70,7 @@ export default async function plexProxyHandler(req, res) { } let libraries = cache.get(librariesCacheKey); - if (libraries == undefined) { + if (libraries === null) { logger.debug("Getting libraries from Plex API"); [status, apiData] = await fetchFromPlexAPI("/library/sections", widget); if (apiData && apiData.MediaContainer) { @@ -81,16 +81,18 @@ export default async function plexProxyHandler(req, res) { let movies = cache.get(moviesCacheKey); let tv = cache.get(tvCacheKey); - if (movies == undefined || tv == undefined) { + if (movies === null || tv === null) { + movies = 0; + tv = 0; logger.debug("Getting movie + tv counts from Plex API"); libraries.filter(l => ["movie", "show"].includes(l._attributes.type)).forEach(async (library) => { [status, apiData] = await fetchFromPlexAPI(`/library/sections/${library._attributes.key}/all`, widget); if (apiData && apiData.MediaContainer) { - const librarySection = apiData.MediaContainer._attributes; - if (library._attributes.type == 'movie') { - movies += parseInt(librarySection.size); - } else if (library._attributes.type == 'show') { - tv += parseInt(librarySection.size); + const size = parseInt(apiData.MediaContainer._attributes.size, 10); + if (library._attributes.type === "movie") { + movies += size; + } else if (library._attributes.type === "show") { + tv += size; } } cache.put(tvCacheKey, tv, 1000 * 60 * 10); @@ -99,9 +101,9 @@ export default async function plexProxyHandler(req, res) { } const data = { - streams: streams, - tv: tv, - movies: movies + streams, + tv, + movies }; return res.status(status).send(data); From 2e2aeef77bceab641651f30ffc450703d0c1b43a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:13 +0000 Subject: [PATCH 03/62] Translated using Weblate (German) Currently translated at 87.4% (118 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/ --- public/locales/de/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 0070cb5a..7c68c63e 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From a4795c21dc2801e161f006e3ba512933e4afd7c7 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:13 +0000 Subject: [PATCH 04/62] Translated using Weblate (Spanish) Currently translated at 89.6% (121 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 3184d8b7..1f531853 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -191,5 +191,10 @@ "wlan_users": "WLAN Users", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 855665689cdb8dc623b056821989774033c14d41 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:13 +0000 Subject: [PATCH 05/62] Translated using Weblate (French) Currently translated at 91.1% (123 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index e893fccb..61044d74 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From d5861ea52bd4eb3ac7445d24427e799129b021b9 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:14 +0000 Subject: [PATCH 06/62] Translated using Weblate (Portuguese) Currently translated at 85.1% (115 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/ --- public/locales/pt/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index a8257926..d09543a0 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -202,5 +202,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 8299c6ce8d5fe8ead0d401ebd9cf2841135572b3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:14 +0000 Subject: [PATCH 07/62] Translated using Weblate (Russian) Currently translated at 17.0% (23 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/ --- public/locales/ru/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 57e1eb93..f7eaabdb 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 8854fcdb9b4436821587453d73d582dd91d19c4a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:14 +0000 Subject: [PATCH 08/62] Translated using Weblate (Chinese (Simplified)) Currently translated at 90.3% (122 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index d80a0534..0e16e185 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 45c92ef2f70f58a9a1411c3fb690533dd1a641f4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:14 +0000 Subject: [PATCH 09/62] Translated using Weblate (Italian) Currently translated at 57.0% (77 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/ --- public/locales/it/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 9403315c..154525ae 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -191,5 +191,10 @@ "wlan_users": "WLAN Users", "up": "UP", "down": "DOWN" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From b34a44cf9f5df2eeb8e28712145700b57a3650f6 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:13 +0000 Subject: [PATCH 10/62] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 58.5% (79 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/ --- public/locales/nb-NO/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index dc9992d4..67d33dae 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 59af5e1eb870b2dc349d83a7443cd7f8e8d7850d Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:14 +0000 Subject: [PATCH 11/62] Translated using Weblate (Vietnamese) Currently translated at 32.5% (44 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/ --- public/locales/vi/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 5a27fd85..edea3b88 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 6f34ca50e0d10740773e1c5e426993ed0dd276f4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:15 +0000 Subject: [PATCH 12/62] Translated using Weblate (Dutch) Currently translated at 46.6% (63 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/ --- public/locales/nl/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 07250217..93fa0350 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 5b669417747286c61aced3904df76b5197adc83a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:15 +0000 Subject: [PATCH 13/62] Translated using Weblate (Chinese (Traditional)) Currently translated at 6.6% (9 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/ --- public/locales/zh-Hant/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 3ad0ed06..a4513d66 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 2e4e998654b8614d07e9035c2b9c8bf6b08171e1 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:12 +0000 Subject: [PATCH 14/62] Translated using Weblate (Catalan) Currently translated at 90.3% (122 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/ --- public/locales/ca/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 4f46fff0..1ce79a21 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From d8a4d1ef5d31dea039c6b0d10f87fd35eedc0632 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:12 +0000 Subject: [PATCH 15/62] Translated using Weblate (Polish) Currently translated at 72.5% (98 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/ --- public/locales/pl/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index d34b7c80..13271b61 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 2c80dc63d1e5661d44a946d1354ff629e81b7716 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:10 +0000 Subject: [PATCH 16/62] Translated using Weblate (Swedish) Currently translated at 79.2% (107 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/ --- public/locales/sv/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index b36e77ae..5be9dee2 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 375e513246d193e5a21abdd0dd3e7df0c5c8a38a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:10 +0000 Subject: [PATCH 17/62] Translated using Weblate (Croatian) Currently translated at 85.1% (115 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/ --- public/locales/hr/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index e11164b4..65dcef19 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 46e0732bd192cfd7575b4d9a8b810676b4f170b5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:12 +0000 Subject: [PATCH 18/62] Translated using Weblate (Hungarian) Currently translated at 80.0% (108 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/ --- public/locales/hu/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 581420ea..2c713b6d 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 6b201028cd5099cd808fc9227d6301fc4a1fcf11 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:10 +0000 Subject: [PATCH 19/62] Translated using Weblate (Hebrew) Currently translated at 74.8% (101 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/ --- public/locales/he/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 532fce39..1956c81f 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 9d79e7e72d667f4434174ff894f0e110e476cdfc Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:10 +0000 Subject: [PATCH 20/62] Translated using Weblate (Romanian) Currently translated at 87.4% (118 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/ --- public/locales/ro/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index c3371cd0..d0d291ae 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 92ffb8d0820086d024236020e44a7b56e2b61869 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:11 +0000 Subject: [PATCH 21/62] Translated using Weblate (Portuguese (Brazil)) Currently translated at 85.1% (115 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 61e704d8..8996dd35 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 05183a88613294792791b2831377c5222899d507 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:11 +0000 Subject: [PATCH 22/62] Translated using Weblate (Yue) Currently translated at 87.4% (118 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/ --- public/locales/yue/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index a49767c4..c3b45ec9 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From f50130971d986e34d226b065296db366080fef4c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:12 +0000 Subject: [PATCH 23/62] Translated using Weblate (Finnish) Currently translated at 91.1% (123 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/ --- public/locales/fi/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index c4654377..a469ad0a 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -191,5 +191,10 @@ "wan": "WAN", "up": "UP", "down": "DOWN" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 094b916c9edeca28d20dcdf1126645631d39cecc Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 13:33:13 +0000 Subject: [PATCH 24/62] Translated using Weblate (Telugu) Currently translated at 86.6% (117 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index c5a5323d..86ff2d1c 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -191,5 +191,10 @@ "up": "UP", "down": "DOWN", "wait": "Please wait" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" } } From 860ae7f0f7a376066bd823388b2219691c3d7051 Mon Sep 17 00:00:00 2001 From: Lalyu Lalev Date: Mon, 10 Oct 2022 16:54:57 +0200 Subject: [PATCH 25/62] Added translation using Weblate (Bulgarian) --- public/locales/bg/common.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 public/locales/bg/common.json diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/public/locales/bg/common.json @@ -0,0 +1 @@ +{} From 0625ce2bb962caa5d933d009b325eac7cdad9bdc Mon Sep 17 00:00:00 2001 From: Nonoss117 Date: Mon, 10 Oct 2022 13:47:57 +0000 Subject: [PATCH 26/62] Translated using Weblate (French) Currently translated at 100.0% (135 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 61044d74..d03ecb6a 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -182,19 +182,19 @@ "vms": "VMs" }, "unifi": { - "users": "Users", - "uptime": "System Uptime", - "days": "Days", + "users": "Utilisateurs", + "uptime": "Disponibilité du système", + "days": "Jours", "wan": "WAN", - "lan_users": "LAN Users", - "wlan_users": "WLAN Users", + "lan_users": "Utilisateurs LAN", + "wlan_users": "Utilisateurs WLAN", "up": "UP", "down": "DOWN", - "wait": "Please wait" + "wait": "Merci de patienter" }, "plex": { - "streams": "Active Streams", - "movies": "Movies", - "tv": "TV Shows" + "streams": "Flux actif", + "movies": "Films", + "tv": "Séries TV" } } From c7b5ec33a8f3fd174855747df4986bbd82309a99 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 10 Oct 2022 14:55:01 +0000 Subject: [PATCH 27/62] Translated using Weblate (Bulgarian) Currently translated at 100.0% (0 of 0 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 201 +++++++++++++++++++++++++++++++++- 1 file changed, 200 insertions(+), 1 deletion(-) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 0967ef42..748b7d37 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -1 +1,200 @@ -{} +{ + "sabnzbd": { + "queue": "Queue", + "timeleft": "Time Left", + "rate": "Rate" + }, + "rutorrent": { + "active": "Active", + "upload": "Upload", + "download": "Download" + }, + "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": { + "cpu": "CPU", + "total": "Total", + "free": "Free", + "used": "Used", + "load": "Load" + }, + "unifi": { + "users": "Users", + "uptime": "System Uptime", + "days": "Days", + "wan": "WAN", + "lan_users": "LAN Users", + "wlan_users": "WLAN Users", + "up": "UP", + "down": "DOWN", + "wait": "Please wait" + }, + "docker": { + "offline": "Offline", + "rx": "RX", + "tx": "TX", + "mem": "MEM", + "cpu": "CPU" + }, + "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" + }, + "plex": { + "streams": "Active Streams", + "movies": "Movies", + "tv": "TV Shows" + }, + "transmission": { + "download": "Download", + "upload": "Upload", + "leech": "Leech", + "seed": "Seed" + }, + "qbittorrent": { + "download": "Download", + "upload": "Upload", + "leech": "Leech", + "seed": "Seed" + }, + "sonarr": { + "wanted": "Wanted", + "queued": "Queued", + "series": "Series" + }, + "radarr": { + "wanted": "Wanted", + "queued": "Queued", + "movies": "Movies" + }, + "lidarr": { + "wanted": "Wanted", + "queued": "Queued", + "albums": "Albums" + }, + "readarr": { + "wanted": "Wanted", + "queued": "Queued", + "books": "Books" + }, + "bazarr": { + "missingEpisodes": "Missing Episodes", + "missingMovies": "Missing 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" + }, + "adguard": { + "queries": "Queries", + "blocked": "Blocked", + "filtered": "Filtered", + "latency": "Latency" + }, + "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", + "1hour": "1 Hour", + "1day": "1 Day", + "7days": "7 Days", + "30days": "30 Days" + }, + "gotify": { + "apps": "Applications", + "clients": "Clients", + "messages": "Messages" + }, + "prowlarr": { + "enableIndexers": "Indexers", + "numberOfGrabs": "Grabs", + "numberOfQueries": "Queries", + "numberOfFailGrabs": "Fail Grabs", + "numberOfFailQueries": "Fail Queries" + }, + "authentik": { + "loginsLast24H": "Logins (24h)", + "users": "Users", + "failedLoginsLast24H": "Failed Logins (24h)" + }, + "jackett": { + "configured": "Configured", + "errored": "Errored" + }, + "strelaysrv": { + "numActiveSessions": "Sessions", + "numConnections": "Connections", + "dataRelayed": "Relayed", + "transferRate": "Rate" + }, + "mastodon": { + "user_count": "Users", + "status_count": "Posts", + "domain_count": "Domains" + }, + "proxmox": { + "mem": "MEM", + "cpu": "CPU", + "lxc": "LXC", + "vms": "VMs" + } +} From add17be5baf0073d7093f78e5f0395d75ce0bbaa Mon Sep 17 00:00:00 2001 From: hunkyn Date: Mon, 10 Oct 2022 15:48:02 +0000 Subject: [PATCH 28/62] Translated using Weblate (Telugu) Currently translated at 100.0% (135 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 86ff2d1c..9e114d90 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -31,9 +31,9 @@ "placeholder": "వెతకండి…" }, "resources": { - "cpu": "సీ పి యూ", + "cpu": "సీపియూ", "total": "మొత్తం", - "free": "ఉచిత", + "free": "మిగిలి ఉంది", "used": "ఉపయోగించబడిన", "load": "లోడ్" }, @@ -41,7 +41,7 @@ "rx": "RX", "tx": "TX", "mem": "MEM", - "cpu": "CPU", + "cpu": "సీపియూ", "offline": "ఆఫ్‌లైన్" }, "emby": { @@ -139,7 +139,7 @@ }, "npm": { "enabled": "ప్రారంభించబడింది", - "disabled": "Disabled", + "disabled": "డిసేబ్లెడ్", "total": "మొత్తం" }, "coinmarketcap": { @@ -177,24 +177,24 @@ }, "proxmox": { "mem": "MEM", - "cpu": "CPU", + "cpu": "సీపియూ", "lxc": "LXC", - "vms": "VMs" + "vms": "విఎంలు" }, "unifi": { - "users": "Users", - "uptime": "System Uptime", - "days": "Days", + "users": "వినియోగదారులు", + "uptime": "సిస్టమ్ సమయము", + "days": "రోజులు", "wan": "WAN", - "lan_users": "LAN Users", - "wlan_users": "WLAN Users", - "up": "UP", - "down": "DOWN", - "wait": "Please wait" + "lan_users": "LAN వినియోగదారులు", + "wlan_users": "WLAN వినియోగదారులు", + "up": "అప్", + "down": "డౌన్", + "wait": "దయచేసి వేచి ఉండండి" }, "plex": { - "streams": "Active Streams", - "movies": "Movies", - "tv": "TV Shows" + "streams": "యాక్టివ్ స్ట్రీమ్‌లు", + "movies": "సినిమాలు", + "tv": "దూరదర్శిని కార్యక్రమాలు" } } From 248c18d978efd942f91df06c8715025288fef569 Mon Sep 17 00:00:00 2001 From: Lalyu Lalev Date: Mon, 10 Oct 2022 15:05:35 +0000 Subject: [PATCH 29/62] Translated using Weblate (Bulgarian) Currently translated at 34.0% (46 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 74 +++++++++++++++++------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 748b7d37..fd39dc7f 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -1,77 +1,77 @@ { "sabnzbd": { - "queue": "Queue", - "timeleft": "Time Left", + "queue": "Опашка", + "timeleft": "Оставащо Време", "rate": "Rate" }, "rutorrent": { - "active": "Active", - "upload": "Upload", - "download": "Download" + "active": "Акитивен", + "upload": "Споделяне", + "download": "Сваляне" }, "widget": { - "missing_type": "Missing Widget Type: {{type}}", - "api_error": "API Error", - "status": "Status" + "missing_type": "Липсваща приставка: {{type}}", + "api_error": "API Грешка", + "status": "Статус" }, "weather": { - "current": "Current Location", - "allow": "Click to allow", - "updating": "Updating", - "wait": "Please wait" + "current": "Текущо местоположение", + "allow": "Разреши", + "updating": "Обновяване", + "wait": "Моля изчакайте" }, "search": { - "placeholder": "Search…" + "placeholder": "Търсене…" }, "resources": { "cpu": "CPU", - "total": "Total", - "free": "Free", - "used": "Used", - "load": "Load" + "total": "Общо", + "free": "Свободни", + "used": "Заети", + "load": "Натоварване" }, "unifi": { - "users": "Users", - "uptime": "System Uptime", - "days": "Days", + "users": "Потребители", + "uptime": "Активен от", + "days": "Дни", "wan": "WAN", - "lan_users": "LAN Users", - "wlan_users": "WLAN Users", + "lan_users": "LAN Потребители", + "wlan_users": "WLAN Потребители", "up": "UP", "down": "DOWN", - "wait": "Please wait" + "wait": "Моля изчакайте" }, "docker": { - "offline": "Offline", + "offline": "Изключен", "rx": "RX", "tx": "TX", "mem": "MEM", "cpu": "CPU" }, "emby": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Възпроизвежда", + "transcoding": "Конвертира", "bitrate": "Bitrate", - "no_active": "No Active Streams" + "no_active": "Няма активни потоци" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams" + "playing": "Възпроизвежда", + "transcoding": "Конвертира", + "bitrate": "Честота", + "no_active": "Няма активни потоци" }, "nzbget": { "rate": "Rate", - "remaining": "Remaining", - "downloaded": "Downloaded" + "remaining": "Остава", + "downloaded": "Изтеглени" }, "plex": { - "streams": "Active Streams", - "movies": "Movies", - "tv": "TV Shows" + "streams": "Активни Потоци", + "movies": "Филми", + "tv": "Сериали" }, "transmission": { - "download": "Download", + "download": "Сваляне", "upload": "Upload", "leech": "Leech", "seed": "Seed" From c95422b682df677046d70e8df2fe0d737d307b39 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 11 Oct 2022 15:02:38 +0300 Subject: [PATCH 30/62] impl. mdi icons with the possibility for others --- src/components/services/item.jsx | 42 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 870eb4f4..ed0cef2d 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -9,19 +9,37 @@ import Docker from "widgets/docker/component"; import { SettingsContext } from "utils/contexts/settings"; function resolveIcon(icon) { - if (icon.startsWith("http")) { - return icon; + // direct or relative URLs + if (icon.startsWith("http") || icon.startsWith("/")) { + return logo; } - if (icon.startsWith("/")) { - return icon; + // mdi- prefixed, material design icons + if (icon.startsWith("mdi-")) { + const iconName = icon.replace("mdi-", "").replace(".svg", ""); + return ( +
+ ); } - if (icon.endsWith(".png")) { - return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}`; - } - - return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}.png`; + // fallback to dashboard-icons + const iconName = icon.replace(".png", ""); + return ( + logo + ); } export default function Item({ service }) { @@ -57,12 +75,10 @@ export default function Item({ service }) { rel="noreferrer" className="flex-shrink-0 flex items-center justify-center w-12 " > - logo + {resolveIcon(service.icon)} ) : ( -
- logo -
+
{resolveIcon(service.icon)}
))} {hasLink ? ( From 778261f67e17723d561c6cd503af6135c28b9a7d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Oct 2022 07:08:29 -0700 Subject: [PATCH 31/62] Change Plex service widget to use key not token --- src/widgets/plex/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/plex/widget.js b/src/widgets/plex/widget.js index e3566423..de3cf25b 100644 --- a/src/widgets/plex/widget.js +++ b/src/widgets/plex/widget.js @@ -1,7 +1,7 @@ import plexProxyHandler from "./proxy"; const widget = { - api: "{url}{endpoint}?X-Plex-Token={token}", + api: "{url}{endpoint}?X-Plex-Token={key}", proxyHandler: plexProxyHandler, mappings: { From 321efd08cc967f6e06f15487526cdee21b7c7fbc Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Oct 2022 11:18:29 -0700 Subject: [PATCH 32/62] Glances info widget --- public/locales/en/common.json | 5 + src/components/widgets/glances/glances.jsx | 111 +++++++++++++++++++++ src/components/widgets/widget.jsx | 1 + src/pages/api/widgets/glances.js | 23 +++++ 4 files changed, 140 insertions(+) create mode 100644 src/components/widgets/glances/glances.jsx create mode 100644 src/pages/api/widgets/glances.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 1261c293..d53d480c 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -207,5 +207,10 @@ "cpu": "CPU", "lxc": "LXC", "vms": "VMs" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx new file mode 100644 index 00000000..75bdeb71 --- /dev/null +++ b/src/components/widgets/glances/glances.jsx @@ -0,0 +1,111 @@ +import useSWR from "swr"; + +import { BiError } from "react-icons/bi"; +import { FaMemory } from "react-icons/fa"; +import { FiCpu } from "react-icons/fi"; +import { useTranslation } from "next-i18next"; + +import UsageBar from "../resources/usage-bar"; + +export default function Widget({ options }) { + const { t, i18n } = useTranslation(); + + const { data, error } = useSWR( + `/api/widgets/glances?${new URLSearchParams({ lang: i18n.language, ...options }).toString()}`, { + refreshInterval: 1500, + } + ); + + if (error || data?.error) { + return ( +
+
+
+ +
+ {t("widget.api_error")} +
+
+
+
+ ); + } + + if (!data) { + return ( +
+
+
+ +
+
+
+ {t("glances.wait")} +
+
+ +
+
+
+ +
+
+
+ {t("glances.wait")} +
+
+ +
+
+
+ {options.label && ( +
{options.label}
+ )} +
+ ); + } + + return ( +
+
+
+ +
+
+
+ {t("common.number", { + value: data.cpu, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} +
+
{t("glances.cpu")}
+
+ +
+
+
+ +
+
+
+ {t("common.number", { + value: data.mem, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} +
+
{t("glances.mem")}
+
+ +
+
+
+ {options.label && ( +
{options.label}
+ )} +
+ ); +} diff --git a/src/components/widgets/widget.jsx b/src/components/widgets/widget.jsx index ac5353eb..bd31ed93 100644 --- a/src/components/widgets/widget.jsx +++ b/src/components/widgets/widget.jsx @@ -11,6 +11,7 @@ const widgetMappings = { datetime: dynamic(() => import("components/widgets/datetime/datetime")), logo: dynamic(() => import("components/widgets/logo/logo"), { ssr: false }), unifi_console: dynamic(() => import("components/widgets/unifi_console/unifi_console")), + glances: dynamic(() => import("components/widgets/glances/glances")), }; export default function Widget({ widget }) { diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js new file mode 100644 index 00000000..26edbb81 --- /dev/null +++ b/src/pages/api/widgets/glances.js @@ -0,0 +1,23 @@ +import { httpProxy } from "utils/proxy/http"; + +export default async function handler(req, res) { + const { url } = req.query; + + if (!url) { + return res.status(400).json({ error: "Missing Glances URL" }); + } + + const apiUrl = `${url}/api/3/quicklook`; + const params = { method: "GET", headers: { + "Accept-Encoding": "application/json" + } }; + + const [status, contentType, data, responseHeaders] = await httpProxy(apiUrl, params); + + if (status !== 200) { + logger.error("HTTP %d getting data from glances API %s. Data: %s", status, apiUrl, data); + } + + if (contentType) res.setHeader("Content-Type", contentType); + return res.status(status).send(data); +} From 080bc44a6f3d9421b748d63d03ffd07cd088e358 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Oct 2022 11:21:11 -0700 Subject: [PATCH 33/62] Lint glances info widget --- src/components/widgets/glances/glances.jsx | 1 - src/pages/api/widgets/glances.js | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx index 75bdeb71..a48cef50 100644 --- a/src/components/widgets/glances/glances.jsx +++ b/src/components/widgets/glances/glances.jsx @@ -1,5 +1,4 @@ import useSWR from "swr"; - import { BiError } from "react-icons/bi"; import { FaMemory } from "react-icons/fa"; import { FiCpu } from "react-icons/fi"; diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index 26edbb81..b0202860 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -1,4 +1,7 @@ import { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; + +const logger = createLogger("glances"); export default async function handler(req, res) { const { url } = req.query; @@ -12,7 +15,7 @@ export default async function handler(req, res) { "Accept-Encoding": "application/json" } }; - const [status, contentType, data, responseHeaders] = await httpProxy(apiUrl, params); + const [status, contentType, data] = await httpProxy(apiUrl, params); if (status !== 200) { logger.error("HTTP %d getting data from glances API %s. Data: %s", status, apiUrl, data); From 802fe0f721b641f09effab272ebd287979e89f65 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Oct 2022 08:13:19 -0700 Subject: [PATCH 34/62] Glances widget use settings for URL --- src/pages/api/widgets/glances.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index b0202860..d8cc04b7 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -1,12 +1,19 @@ import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { getSettings } from "utils/config/config"; const logger = createLogger("glances"); export default async function handler(req, res) { - const { url } = req.query; + const settings = getSettings()?.glances; + if (!settings) { + logger.error("There is no glances section in settings.yaml"); + return res.status(400).json({ error: "There is no glances section in settings.yaml" }); + } + const url = settings?.url; if (!url) { + logger.error("Missing Glances URL"); return res.status(400).json({ error: "Missing Glances URL" }); } From 99b70f96e438e37c629e95cb1b37f3ce2d06b665 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Oct 2022 08:40:15 -0700 Subject: [PATCH 35/62] Allow username + password for glances --- src/pages/api/widgets/glances.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index d8cc04b7..bf00862b 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -18,14 +18,22 @@ export default async function handler(req, res) { } const apiUrl = `${url}/api/3/quicklook`; - const params = { method: "GET", headers: { + const headers = { "Accept-Encoding": "application/json" - } }; + }; + if (settings.username && settings.password) { + headers.Authorization = `Basic ${Buffer.from(`${settings.username}:${settings.password}`).toString("base64")}` + } + const params = { method: "GET", headers }; const [status, contentType, data] = await httpProxy(apiUrl, params); + if (status === 401) { + logger.error("Authorization failure getting data from glances API. Data: %s", data); + } + if (status !== 200) { - logger.error("HTTP %d getting data from glances API %s. Data: %s", status, apiUrl, data); + logger.error("HTTP %d getting data from glances API. Data: %s", status, data); } if (contentType) res.setHeader("Content-Type", contentType); From 8e2ff61f1cf809c98af06dcfa8913f29819a8728 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Oct 2022 09:34:59 -0700 Subject: [PATCH 36/62] Allow multiple glances widgets with optional `id` property --- src/pages/api/widgets/glances.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index bf00862b..86992dd1 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -5,24 +5,35 @@ import { getSettings } from "utils/config/config"; const logger = createLogger("glances"); export default async function handler(req, res) { - const settings = getSettings()?.glances; - if (!settings) { - logger.error("There is no glances section in settings.yaml"); - return res.status(400).json({ error: "There is no glances section in settings.yaml" }); + const { id } = req.query; + + let errorMessage; + + let instanceID = "glances"; + if (id) { // multiple instances + instanceID = id; + } + const settings = getSettings(); + const instanceSettings = settings[instanceID]; + if (!instanceSettings) { + errorMessage = id ? `There is no glances section with id '${id}' in settings.yaml` : "There is no glances section in settings.yaml"; + logger.error(errorMessage); + return res.status(400).json({ error: errorMessage }); } - const url = settings?.url; + const url = instanceSettings?.url; if (!url) { - logger.error("Missing Glances URL"); - return res.status(400).json({ error: "Missing Glances URL" }); + errorMessage = "Missing Glances URL"; + logger.error(errorMessage); + return res.status(400).json({ error: errorMessage }); } const apiUrl = `${url}/api/3/quicklook`; const headers = { "Accept-Encoding": "application/json" }; - if (settings.username && settings.password) { - headers.Authorization = `Basic ${Buffer.from(`${settings.username}:${settings.password}`).toString("base64")}` + if (instanceSettings.username && instanceSettings.password) { + headers.Authorization = `Basic ${Buffer.from(`${instanceSettings.username}:${instanceSettings.password}`).toString("base64")}` } const params = { method: "GET", headers }; From 2bdd9eaa880582e2736daba2ec3a4ff3068ee880 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 11 Oct 2022 21:56:48 +0300 Subject: [PATCH 37/62] remove shortcuts from manifest --- src/pages/site.webmanifest.jsx | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/pages/site.webmanifest.jsx b/src/pages/site.webmanifest.jsx index 10a448a3..80513ddb 100644 --- a/src/pages/site.webmanifest.jsx +++ b/src/pages/site.webmanifest.jsx @@ -1,33 +1,13 @@ import checkAndCopyConfig, { getSettings } from "utils/config/config"; import themes from "utils/styles/themes"; -import { servicesResponse, bookmarksResponse } from "utils/config/api-response"; export async function getServerSideProps({ res }) { checkAndCopyConfig("settings.yaml"); const settings = getSettings(); - const services = await servicesResponse(); - const bookmarks = await bookmarksResponse(); const color = settings.color || "slate"; const theme = settings.theme || "dark"; - const serviceShortcuts = services.map((group) => - group.services.map((service) => ({ - name: service.name, - url: service.href, - description: service.description, - })) - ); - - const bookmarkShortcuts = bookmarks.map((group) => - group.bookmarks.map((service) => ({ - name: service.name, - url: service.href, - })) - ); - - const shortcuts = [...serviceShortcuts, ...bookmarkShortcuts].flat(); - const manifest = { name: settings.title || "Homepage", short_name: settings.title || "Homepage", @@ -43,7 +23,6 @@ export async function getServerSideProps({ res }) { type: "image/png", }, ], - shortcuts, theme_color: themes[color][theme], background_color: themes[color][theme], display: "standalone", From 46a29ea7d68010a273062a5d0d4023d7e90c27a5 Mon Sep 17 00:00:00 2001 From: GM Date: Tue, 11 Oct 2022 08:29:33 +0000 Subject: [PATCH 38/62] Translated using Weblate (Chinese (Simplified)) Currently translated at 91.1% (123 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 0e16e185..33445160 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -92,7 +92,7 @@ "current": "当前定位", "allow": "点击并允许", "updating": "更新中", - "wait": "请稍后" + "wait": "请稍候" }, "overseerr": { "pending": "待办", @@ -190,7 +190,7 @@ "wlan_users": "WLAN Users", "up": "UP", "down": "DOWN", - "wait": "Please wait" + "wait": "请稍候" }, "plex": { "streams": "Active Streams", From 280c8b01477241659a4576aae3daa84c8bb308a1 Mon Sep 17 00:00:00 2001 From: hunkyn Date: Tue, 11 Oct 2022 16:21:04 +0000 Subject: [PATCH 39/62] Translated using Weblate (Telugu) Currently translated at 100.0% (135 of 135 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 9e114d90..3b05dc29 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -33,7 +33,7 @@ "resources": { "cpu": "సీపియూ", "total": "మొత్తం", - "free": "మిగిలి ఉంది", + "free": "మిగిలింది", "used": "ఉపయోగించబడిన", "load": "లోడ్" }, @@ -128,8 +128,8 @@ "ping": "పింగ్" }, "portainer": { - "running": "నడుస్తోంది", - "stopped": "ఆగిపోయింది", + "running": "నడుస్తున్నవి", + "stopped": "ఆగిపోయినవి", "total": "మొత్తం" }, "traefik": { From 7bb8274b950eaf620291d937812e214e1e145db5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 40/62] Translated using Weblate (German) Currently translated at 85.5% (118 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/ --- public/locales/de/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 7c68c63e..3dbe8beb 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 072e29025e5e4d18db1183c0fb02560b415d33ad Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 41/62] Translated using Weblate (Spanish) Currently translated at 87.6% (121 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 1f531853..7335f88b 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 911bd31c14747f0b5eaa0bffaacedf0b10213ab4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 42/62] Translated using Weblate (French) Currently translated at 97.8% (135 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index d03ecb6a..2f49a82e 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -196,5 +196,10 @@ "streams": "Flux actif", "movies": "Films", "tv": "Séries TV" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From b6dd2975e742e9268afca2ca8332b64bba1fb511 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 43/62] Translated using Weblate (Portuguese) Currently translated at 83.3% (115 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/ --- public/locales/pt/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index d09543a0..10658f6e 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -207,5 +207,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 65447f2b97f19e542c5c29b66e534a53663bfb00 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 44/62] Translated using Weblate (Russian) Currently translated at 16.6% (23 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/ --- public/locales/ru/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index f7eaabdb..5f905808 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 95f811e4c188e4bb7a6ca3b2b9e1f6f7467afa61 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 45/62] Translated using Weblate (Chinese (Simplified)) Currently translated at 89.1% (123 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 33445160..6592fb1e 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 73e1d3dc200a16eab14a45b3c012d877bde19b62 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 46/62] Translated using Weblate (Italian) Currently translated at 55.7% (77 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/ --- public/locales/it/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 154525ae..405a6e0b 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 69a67f450dc3fd979daaa1f85e7d21cd8cd95c45 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 47/62] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 57.2% (79 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/ --- public/locales/nb-NO/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index 67d33dae..b163e998 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From bf666b3ec415dbb06969dbf3f564f0080143835b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:21 +0000 Subject: [PATCH 48/62] Translated using Weblate (Vietnamese) Currently translated at 31.8% (44 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/ --- public/locales/vi/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index edea3b88..7f74ebd9 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 73b44c3a2ed14048d02d1d6298a879d4b4ae50b6 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:22 +0000 Subject: [PATCH 49/62] Translated using Weblate (Dutch) Currently translated at 45.6% (63 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/ --- public/locales/nl/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 93fa0350..562a50de 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 92e47c45f99a00ce09851e1db559a112490663ff Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:22 +0000 Subject: [PATCH 50/62] Translated using Weblate (Chinese (Traditional)) Currently translated at 6.5% (9 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/ --- public/locales/zh-Hant/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index a4513d66..9418e244 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From be4d02f5e93b757efa165221818b3a18ba0c4dcc Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:19 +0000 Subject: [PATCH 51/62] Translated using Weblate (Catalan) Currently translated at 88.4% (122 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/ --- public/locales/ca/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 1ce79a21..cea7d15b 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From e7215feee14ae12b913ef45cd4a6b59de5e6674c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 52/62] Translated using Weblate (Polish) Currently translated at 71.0% (98 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/ --- public/locales/pl/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 13271b61..8de9d629 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From c1d14e3b16aa8a38a27463dc5cdac3bf049b1810 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:18 +0000 Subject: [PATCH 53/62] Translated using Weblate (Swedish) Currently translated at 77.5% (107 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/ --- public/locales/sv/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 5be9dee2..7c8c592f 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 73a200994caf367a377d98cb943233e14185c6a2 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:18 +0000 Subject: [PATCH 54/62] Translated using Weblate (Croatian) Currently translated at 83.3% (115 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/ --- public/locales/hr/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 65dcef19..096f6e0b 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 770d52cbaee7ff1e180609e0cf0a6aef65a590ca Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 55/62] Translated using Weblate (Hungarian) Currently translated at 78.2% (108 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/ --- public/locales/hu/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 2c713b6d..c36c15a0 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From a8bd84467c78133344532f65a525b3456fca0afb Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:18 +0000 Subject: [PATCH 56/62] Translated using Weblate (Hebrew) Currently translated at 73.1% (101 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/ --- public/locales/he/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 1956c81f..ff48c10b 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 02dd6d08b459aabc6908d7050ff5ffd0239d2167 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:18 +0000 Subject: [PATCH 57/62] Translated using Weblate (Romanian) Currently translated at 85.5% (118 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/ --- public/locales/ro/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index d0d291ae..3a821807 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 9669c463dae781f5408e3267c50ae841c14ef1e9 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:18 +0000 Subject: [PATCH 58/62] Translated using Weblate (Portuguese (Brazil)) Currently translated at 83.3% (115 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 8996dd35..1ec421ea 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 17ec656b9b67076fbf8ccbb82e867067e7ca118c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:19 +0000 Subject: [PATCH 59/62] Translated using Weblate (Yue) Currently translated at 85.5% (118 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/ --- public/locales/yue/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index c3b45ec9..e3909728 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 61e82e2b2c295ccbc535ff919341791062ea8234 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 60/62] Translated using Weblate (Finnish) Currently translated at 89.1% (123 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/ --- public/locales/fi/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index a469ad0a..a972a141 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -196,5 +196,10 @@ "streams": "Active Streams", "movies": "Movies", "tv": "TV Shows" + }, + "glances": { + "wait": "Please wait", + "cpu": "CPU", + "mem": "MEM" } } From 8f644ef7a48040deb67d06c9df5ff20371f8aa0a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 61/62] Translated using Weblate (Telugu) Currently translated at 97.8% (135 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 3b05dc29..ae793770 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -196,5 +196,10 @@ "streams": "యాక్టివ్ స్ట్రీమ్‌లు", "movies": "సినిమాలు", "tv": "దూరదర్శిని కార్యక్రమాలు" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } } From 9dd259654a7b8454e0a8c86ac42ea11a695f8fbb Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 12 Oct 2022 08:20:20 +0000 Subject: [PATCH 62/62] Translated using Weblate (Bulgarian) Currently translated at 33.3% (46 of 138 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index fd39dc7f..2efeb981 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -196,5 +196,10 @@ "cpu": "CPU", "lxc": "LXC", "vms": "VMs" + }, + "glances": { + "cpu": "CPU", + "mem": "MEM", + "wait": "Please wait" } }