From 20fece1573464d01d6c49212afd14834fb51d44f Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Wed, 14 Jun 2023 08:29:30 +0100 Subject: [PATCH 0001/1640] widget cleanup --- src/widgets/widgets.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 74044170..c8fa74d7 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -87,7 +87,6 @@ import whatsupdocker from "./whatsupdocker/widget"; import wgeasy from "./wgeasy/widget"; import xteve from "./xteve/widget"; import jdrssdownloader from "./jdrssdownloader/widget"; -import jdownloader from "./jdownloader/widget"; const widgets = { adguard, @@ -118,7 +117,6 @@ const widgets = { healthchecks, immich, jackett, - jdownloader, jellyfin: emby, jdrssdownloader, jdownloader, From d426bdab9e44367237662a83fa941cf2d0c64245 Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Thu, 15 Jun 2023 10:24:34 +0100 Subject: [PATCH 0002/1640] Add Total Queue and Remaining In Queue --- public/locales/en/common.json | 3 ++- src/widgets/jdownloader/component.jsx | 6 ++++-- src/widgets/jdownloader/proxy.js | 23 ++++++++++++++--------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 437088bd..513aa4a6 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -656,7 +656,8 @@ }, "jdownloader": { "downloadCount": "Queue Count", - "downloadQueueSize": "Queue Size", + "downloadBytesRemaining": "Queue Remaining", + "downloadTotalBytes": "Total Queue Size", "downloadSpeed": "Download Speed" } } diff --git a/src/widgets/jdownloader/component.jsx b/src/widgets/jdownloader/component.jsx index d8fea9ca..8f271935 100644 --- a/src/widgets/jdownloader/component.jsx +++ b/src/widgets/jdownloader/component.jsx @@ -21,7 +21,8 @@ export default function Component({ service }) { return ( - + + ); @@ -30,7 +31,8 @@ export default function Component({ service }) { return ( - + + ); diff --git a/src/widgets/jdownloader/proxy.js b/src/widgets/jdownloader/proxy.js index 353192ac..be858d51 100644 --- a/src/widgets/jdownloader/proxy.js +++ b/src/widgets/jdownloader/proxy.js @@ -28,8 +28,8 @@ async function getWidget(req) { async function login(loginSecret, deviceSecret, params) { const rid = uniqueRid(); - const path = `/my/connect?${querystring.stringify({...params, rid})}`; - + const path = `/my/connect?${querystring.stringify({ ...params, rid })}`; + const signature = crypto .createHmac('sha256', loginSecret) .update(path) @@ -64,7 +64,7 @@ async function login(loginSecret, deviceSecret, params) { async function getDevice(serverEncryptionToken, deviceName, params) { const rid = uniqueRid(); - const path = `/my/listdevices?${querystring.stringify({...params, rid})}`; + const path = `/my/listdevices?${querystring.stringify({ ...params, rid })}`; const signature = crypto .createHmac('sha256', serverEncryptionToken) .update(path) @@ -100,7 +100,7 @@ function createBody(rid, query, params) { rid, url: query }; - return params ? {...baseBody, params: [JSON.stringify(params)] } : baseBody; + return params ? { ...baseBody, params: [JSON.stringify(params)] } : baseBody; } async function queryPackages(deviceEncryptionToken, deviceId, sessionToken, params) { @@ -135,9 +135,9 @@ export default async function jdownloaderProxyHandler(req, res) { return res.status(400).json({ error: "Invalid proxy service type" }); } logger.debug("Getting data from JDRss API"); - const {username} = widget - const {password} = widget - + const { username } = widget + const { password } = widget + const appKey = "homepage" const loginSecret = sha256(`${username}${password}server`) const deviceSecret = sha256(`${username}${password}device`) @@ -171,17 +171,22 @@ export default async function jdownloaderProxyHandler(req, res) { } ) + let bytesRemaining = 0; let totalBytes = 0; let totalSpeed = 0; packageStatus.forEach(file => { totalBytes += file.bytesTotal; - if (file.speed) { - totalSpeed += file.speed; + if (file.finished !== true) { + bytesRemaining += file.bytesTotal; + if (file.speed) { + totalSpeed += file.speed; + } } }); const data = { downloadCount: packageStatus.length, + bytesRemaining, totalBytes, totalSpeed }; From f0f619a602b2595252529b8764f5d77805949a48 Mon Sep 17 00:00:00 2001 From: Karl0ss Date: Thu, 15 Jun 2023 10:42:51 +0100 Subject: [PATCH 0003/1640] Update common.json Remove Total from Queue Size --- public/locales/en/common.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 513aa4a6..1daa0ff5 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -657,7 +657,7 @@ "jdownloader": { "downloadCount": "Queue Count", "downloadBytesRemaining": "Queue Remaining", - "downloadTotalBytes": "Total Queue Size", + "downloadTotalBytes": "Queue Size", "downloadSpeed": "Download Speed" } } From 8a0ada3b7fabc3369260150e5233ffec3877c0a3 Mon Sep 17 00:00:00 2001 From: Karl0ss Date: Fri, 16 Jun 2023 07:28:29 +0100 Subject: [PATCH 0004/1640] Update common.json --- public/locales/en/common.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 1daa0ff5..36b5a391 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -655,9 +655,9 @@ "updates": "Updates" }, "jdownloader": { - "downloadCount": "Queue Count", - "downloadBytesRemaining": "Queue Remaining", - "downloadTotalBytes": "Queue Size", - "downloadSpeed": "Download Speed" + "downloadCount": "Queue", + "downloadBytesRemaining": "Remaining", + "downloadTotalBytes": "Size", + "downloadSpeed": "Speed" } } From e89bdf84136ceadf697fe4fa343caf9d57dc0e5f Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Sun, 23 Jul 2023 15:18:43 +0100 Subject: [PATCH 0005/1640] update common --- public/locales/en/common.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 185fce08..639c9031 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -655,7 +655,7 @@ "ready": "Recent" }, "jdrssdownloader": { - "totalShows": "Tracked Shows", + "totalShows": "Tracked", "retryCache": "Retry Cache", "feedCache": "Feed Cache" }, From aa9b682f5fb37a19fe22dcef438be303d45a511e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Alves?= Date: Sun, 23 Jul 2023 13:58:03 -0100 Subject: [PATCH 0006/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index baeb5841..0a81bb08 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ pnpm dev Open [http://localhost:3000](http://localhost:3000) to start. -This is a [Next.js](https://nextjs.org/) application, see their doucmentation for more information: +This is a [Next.js](https://nextjs.org/) application, see their documentation for more information: ## Contributors From 92ed6dc1cb03f1a86eb1152e1a46b577d4b75243 Mon Sep 17 00:00:00 2001 From: Johan Steen Date: Mon, 24 Jul 2023 12:28:03 +0700 Subject: [PATCH 0007/1640] Add snapshot host and path to Kopia widget --- src/utils/config/service-helpers.js | 6 ++++++ src/widgets/kopia/component.jsx | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index e99582b2..dc625f2e 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -291,6 +291,8 @@ export function cleanServiceGroups(groups) { volume, // diskstation widget, enableQueue, // sonarr/radarr node, // Proxmox + snapshotHost, // kopia + snapshotPath, } = cleanedService.widget; let fieldsList = fields; @@ -345,6 +347,10 @@ export function cleanServiceGroups(groups) { if (["diskstation", "qnap"].includes(type)) { if (volume) cleanedService.widget.volume = volume; } + if (type === "kopia") { + if (snapshotHost) cleanedService.widget.snapshotHost = snapshotHost; + if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath; + } } return cleanedService; diff --git a/src/widgets/kopia/component.jsx b/src/widgets/kopia/component.jsx index 46690990..9a7a76ac 100755 --- a/src/widgets/kopia/component.jsx +++ b/src/widgets/kopia/component.jsx @@ -41,7 +41,12 @@ export default function Component({ service }) { return ; } - const source = statusData?.sources[0]; + const snapshotHost = service.widget?.snapshotHost; + const snapshotPath = service.widget?.snapshotPath; + + const source = statusData?.sources + .filter(el => snapshotHost ? el.source.host === snapshotHost : true) + .filter(el => snapshotPath ? el.source.path === snapshotPath : true)[0]; if (!statusData || !source) { return ( From f079bb649aae30aaaf0a3c6b51d0cf91fb4fb26e Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Mon, 24 Jul 2023 11:39:42 +0100 Subject: [PATCH 0008/1640] better error handling --- src/widgets/octoprint/component.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index 7d3d5a1d..3d15e9d0 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -1,6 +1,7 @@ import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; +import { Buffer } from 'buffer'; export default function Component({ service }) { const { widget } = service; @@ -9,7 +10,13 @@ export default function Component({ service }) { const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats"); if (printerStatsError) { - return ; + let msg + msg = JSON.parse(new Buffer.from(printerStatsError.resultData.data).toString()); + return ( + + + + ); } if (jobStatsError) { From 19bd5b3b7b6379542af074f031dd6db20a1cb205 Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Mon, 24 Jul 2023 11:40:12 +0100 Subject: [PATCH 0009/1640] better error handling --- src/widgets/octoprint/component.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index 3d15e9d0..a897c077 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -10,8 +10,7 @@ export default function Component({ service }) { const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats"); if (printerStatsError) { - let msg - msg = JSON.parse(new Buffer.from(printerStatsError.resultData.data).toString()); + const msg = JSON.parse(new Buffer.from(printerStatsError.resultData.data).toString()); return ( From 9992cd87b0939bd8f2331421ff925ec436ea4ba2 Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Mon, 24 Jul 2023 11:59:22 +0100 Subject: [PATCH 0010/1640] linting --- src/widgets/octoprint/component.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index a897c077..894bd887 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -1,7 +1,8 @@ +import { Buffer } from 'buffer'; + import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; -import { Buffer } from 'buffer'; export default function Component({ service }) { const { widget } = service; @@ -10,7 +11,7 @@ export default function Component({ service }) { const { data: jobStats, error: jobStatsError } = useWidgetAPI(widget, "job_stats"); if (printerStatsError) { - const msg = JSON.parse(new Buffer.from(printerStatsError.resultData.data).toString()); + const msg = JSON.parse(Buffer.from(printerStatsError.resultData.data).toString()); return ( From 115bb432ff5f3d11f662bf1820089decbb1a9cb4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:02:13 -0700 Subject: [PATCH 0011/1640] Ensure spacing with custom logo --- src/components/widgets/logo/logo.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/widgets/logo/logo.jsx b/src/components/widgets/logo/logo.jsx index bb58a765..83432561 100644 --- a/src/components/widgets/logo/logo.jsx +++ b/src/components/widgets/logo/logo.jsx @@ -8,7 +8,9 @@ export default function Logo({ options }) { {options.icon ? - : +
+ +
: // fallback to homepage logo
Date: Wed, 26 Jul 2023 02:31:42 +0200 Subject: [PATCH 0012/1640] Support custom colors for icons (#1724) * Add custom colors to resolvedicon.jsx Enables appending a color code (e.g. "#123456") to all mdi and si icons, in order to change their color to a per-icon custom one. * Streamline code for custom icon colors in resolvedicon.jsx Removed redundant if statement when defaulting to theme colors if no custom icon color code is provided * Update resolvedicon.jsx Remove unnecessary variable, restoring the fallback code in case no custom icon color is provided. * Update resolvedicon.jsx - test for custom color suffix Changed if condition from string.match to string.test and expanded regex to also include upper case letters. * Update resolvedicon.jsx - DRY Removed repetition, slimmed down if statement. Also reverse previous commit as it did not work as intended. * Update resolvedicon.jsx - upper case color hex codes Update regular expression to also allow for upper case letters as part of the hex color code, as either are valid when describing an objects color. * Refactor custom color code --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/components/resolvedicon.jsx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx index fa9fa68d..6e28ee24 100644 --- a/src/components/resolvedicon.jsx +++ b/src/components/resolvedicon.jsx @@ -33,11 +33,22 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log } // check mdi- or si- prefixed icons - const prefix = icon.split("-")[0] + const prefix = icon.split("-")[0]; if (prefix in iconSetURLs) { - // get icon source - const iconName = icon.replace(`${prefix}-`, "").replace(".svg", ""); + // default to theme setting + let iconName = icon.replace(`${prefix}-`, "").replace(".svg", ""); + let iconColor = settings.iconStyle === "theme" ? + `rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` : + "linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))"; + + // use custom hex color if provided + const colorMatches = icon.match(/[#][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]$/i) + if (colorMatches?.length) { + iconName = icon.replace(`${prefix}-`, "").replace(".svg", "").replace(`-${colorMatches[0]}`, ""); + iconColor = `${colorMatches[0]}`; + } + const iconSource = `${iconSetURLs[prefix]}${iconName}.svg`; return ( @@ -47,16 +58,13 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log height, maxWidth: '100%', maxHeight: '100%', - background: settings.iconStyle === "theme" ? - `rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` : - "linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))", + background: `${iconColor}`, mask: `url(${iconSource}) no-repeat center / contain`, WebkitMask: `url(${iconSource}) no-repeat center / contain`, }} /> ); } - // fallback to dashboard-icons if (icon.endsWith(".svg")) { From 454d8d03c239ffb88ed89211bc7fbdd207286c6e Mon Sep 17 00:00:00 2001 From: Mega-Volti <119437326+Mega-Volti@users.noreply.github.com> Date: Thu, 27 Jul 2023 01:35:48 +0200 Subject: [PATCH 0013/1640] Add custom refresh rate setting to resources Simplify resources refresh variable, enforce minimum Add custom refresh rate to uptime Add custom refresh rate to memory Add custom refresh rate to disk Add custom refresh rate to cputemp Add custom refresh rate to CPU --- src/components/widgets/resources/cpu.jsx | 4 ++-- src/components/widgets/resources/cputemp.jsx | 4 ++-- src/components/widgets/resources/disk.jsx | 4 ++-- src/components/widgets/resources/memory.jsx | 4 ++-- src/components/widgets/resources/resources.jsx | 14 ++++++++------ src/components/widgets/resources/uptime.jsx | 4 ++-- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/components/widgets/resources/cpu.jsx b/src/components/widgets/resources/cpu.jsx index 12972fe8..514b845f 100644 --- a/src/components/widgets/resources/cpu.jsx +++ b/src/components/widgets/resources/cpu.jsx @@ -5,11 +5,11 @@ import { useTranslation } from "next-i18next"; import Resource from "../widget/resource"; import Error from "../widget/error"; -export default function Cpu({ expanded }) { +export default function Cpu({ expanded, refresh = 1500 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=cpu`, { - refreshInterval: 1500, + refreshInterval: refresh, }); if (error || data?.error) { diff --git a/src/components/widgets/resources/cputemp.jsx b/src/components/widgets/resources/cputemp.jsx index ba6d9b73..684fe2f6 100644 --- a/src/components/widgets/resources/cputemp.jsx +++ b/src/components/widgets/resources/cputemp.jsx @@ -9,11 +9,11 @@ function convertToFahrenheit(t) { return t * 9/5 + 32 } -export default function CpuTemp({ expanded, units }) { +export default function CpuTemp({ expanded, units, refresh = 1500 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=cputemp`, { - refreshInterval: 1500, + refreshInterval: refresh, }); if (error || data?.error) { diff --git a/src/components/widgets/resources/disk.jsx b/src/components/widgets/resources/disk.jsx index ab56624d..ccda2410 100644 --- a/src/components/widgets/resources/disk.jsx +++ b/src/components/widgets/resources/disk.jsx @@ -5,11 +5,11 @@ import { useTranslation } from "next-i18next"; import Resource from "../widget/resource"; import Error from "../widget/error"; -export default function Disk({ options, expanded }) { +export default function Disk({ options, expanded, refresh = 1500 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=disk&target=${options.disk}`, { - refreshInterval: 1500, + refreshInterval: refresh, }); if (error || data?.error) { diff --git a/src/components/widgets/resources/memory.jsx b/src/components/widgets/resources/memory.jsx index 19ae8687..c3dbb277 100644 --- a/src/components/widgets/resources/memory.jsx +++ b/src/components/widgets/resources/memory.jsx @@ -5,11 +5,11 @@ import { useTranslation } from "next-i18next"; import Resource from "../widget/resource"; import Error from "../widget/error"; -export default function Memory({ expanded }) { +export default function Memory({ expanded, refresh = 1500 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=memory`, { - refreshInterval: 1500, + refreshInterval: refresh, }); if (error || data?.error) { diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx index 0cc2c301..7b226ecb 100644 --- a/src/components/widgets/resources/resources.jsx +++ b/src/components/widgets/resources/resources.jsx @@ -9,16 +9,18 @@ import Uptime from "./uptime"; export default function Resources({ options }) { const { expanded, units } = options; + let { refresh } = options; + refresh = Math.max(refresh, 1000); return
- {options.cpu && } - {options.memory && } + {options.cpu && } + {options.memory && } {Array.isArray(options.disk) - ? options.disk.map((disk) => ) - : options.disk && } - {options.cputemp && } - {options.uptime && } + ? options.disk.map((disk) => ) + : options.disk && } + {options.cputemp && } + {options.uptime && }
{options.label && (
{options.label}
diff --git a/src/components/widgets/resources/uptime.jsx b/src/components/widgets/resources/uptime.jsx index 3984975f..73ec0a35 100644 --- a/src/components/widgets/resources/uptime.jsx +++ b/src/components/widgets/resources/uptime.jsx @@ -5,11 +5,11 @@ import { useTranslation } from "next-i18next"; import Resource from "../widget/resource"; import Error from "../widget/error"; -export default function Uptime() { +export default function Uptime({ refresh = 1500 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=uptime`, { - refreshInterval: 1500, + refreshInterval: refresh, }); if (error || data?.error) { From 420aa896d7d9c50adc998639e82d29cc3fa2020d Mon Sep 17 00:00:00 2001 From: fredodiable Date: Thu, 27 Jul 2023 07:06:45 +0200 Subject: [PATCH 0014/1640] Feature: GameDig Widget (#1717) * Adding Counter-Strike: Global Offensive (CSGO) Adding Counter-Strike: Global Offensive (CSGO) widget * Changed to GameDig Converted csgo widget to gamedig Added game server type as widget parameter Added more fields * Limited widget displayed fields to 4 * Moved fields limit to gamedig widget --- package.json | 1 + pnpm-lock.yaml | 375 +++++++++++++++++++++++++++++- public/locales/en/common.json | 9 + public/locales/fr/common.json | 9 + src/widgets/components.js | 1 + src/widgets/gamedig/component.jsx | 59 +++++ src/widgets/gamedig/proxy.js | 37 +++ src/widgets/gamedig/widget.js | 7 + src/widgets/widgets.js | 2 + 9 files changed, 497 insertions(+), 3 deletions(-) create mode 100644 src/widgets/gamedig/component.jsx create mode 100644 src/widgets/gamedig/proxy.js create mode 100644 src/widgets/gamedig/widget.js diff --git a/package.json b/package.json index b46cea8d..8c774188 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "compare-versions": "^5.0.1", "dockerode": "^3.3.4", "follow-redirects": "^1.15.2", + "gamedig": "^4.0.6", "i18next": "^21.9.2", "js-yaml": "^4.1.0", "json-rpc-2.0": "^1.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 344998b0..78cff342 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,9 @@ dependencies: follow-redirects: specifier: ^1.15.2 version: 1.15.2 + gamedig: + specifier: ^4.0.6 + version: 4.0.6 i18next: specifier: ^21.9.2 version: 21.10.0 @@ -402,12 +405,24 @@ packages: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: true + /@sindresorhus/is@5.4.1: + resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} + engines: {node: '>=14.16'} + dev: false + /@swc/helpers@0.4.11: resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} dependencies: tslib: 2.5.0 dev: false + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: false + /@tailwindcss/forms@0.5.3(tailwindcss@3.3.0): resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==} peerDependencies: @@ -424,6 +439,10 @@ packages: hoist-non-react-statics: 3.3.2 dev: false + /@types/http-cache-semantics@4.0.1: + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + dev: false + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true @@ -531,6 +550,11 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + dev: false + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -545,7 +569,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -687,6 +710,12 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /barse@0.4.3: + resolution: {integrity: sha512-UEpvriJqAn8zuVinYICuKoPttZy3XxXEoqX/V2uYAL4zzJRuNzCK3+20nAu3YUIa2U7G53kf90wfBIp9/A+Odw==} + dependencies: + readable-stream: 1.0.34 + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false @@ -710,6 +739,10 @@ packages: readable-stream: 3.6.2 dev: false + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -756,6 +789,24 @@ packages: engines: {node: '>= 0.8'} dev: false + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: false + + /cacheable-request@10.2.12: + resolution: {integrity: sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.1 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.2 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: false + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -788,6 +839,30 @@ packages: supports-color: 7.2.0 dev: true + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: false + + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -868,6 +943,13 @@ packages: delayed-stream: 1.0.0 dev: false + /commander@2.8.1: + resolution: {integrity: sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==} + engines: {node: '>= 0.6.x'} + dependencies: + graceful-readlink: 1.0.1 + dev: false + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -877,6 +959,14 @@ packages: resolution: {integrity: sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==} dev: false + /compressjs@1.0.3: + resolution: {integrity: sha512-jpKJjBTretQACTGLNuvnozP1JdP2ZLrjdGdBgk/tz1VfXlUcBhhSZW6vEsuThmeot/yjvSrPQKEgfF3X2Lpi8Q==} + hasBin: true + dependencies: + amdefine: 1.0.1 + commander: 2.8.1 + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -911,6 +1001,21 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -953,6 +1058,13 @@ packages: dependencies: ms: 2.1.2 + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + /deep-equal@2.2.0: resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} dependencies: @@ -979,6 +1091,11 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -1049,6 +1166,33 @@ packages: esutils: 2.0.3 dev: true + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: false + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: false + /ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: @@ -1074,6 +1218,11 @@ packages: once: 1.4.0 dev: false + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + /es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} @@ -1491,6 +1640,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /event-to-promise@0.7.0: + resolution: {integrity: sha512-VOBBfyaADfe378ZzG0tgkzmsvzUyeU5arehrFzNRt5yaASUDshgctTwSrPI17ocAwR3+YftsxRClHF+GBKFByQ==} + deprecated: Use promise-toolbox/fromEvent instead + dev: false + /execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -1608,6 +1762,11 @@ packages: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: false + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: false + /form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -1660,6 +1819,33 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /gamedig@4.0.6: + resolution: {integrity: sha512-h0k9n/e5vNrd9Mh2wyFUp2Vo7ABWbDkdBxKC6FNJLOZiU5d9Z29bntGeYbXtOkcRWoV6Q63wSAJ3jLWxYQkpZw==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + cheerio: 1.0.0-rc.12 + compressjs: 1.0.3 + gbxremote: 0.2.1 + got: 12.6.1 + iconv-lite: 0.6.3 + long: 5.2.3 + minimist: 1.2.8 + punycode: 2.3.0 + varint: 6.0.0 + dev: false + + /gbxremote@0.2.1: + resolution: {integrity: sha512-SMehu6Y6ndq2Qgp9VxAb8Np3f+UUD+RWoW2SAMaxzGS96rWXyr4T1GGkecO0HHtxeH1m7pEh4FJWB8a/6aM2XQ==} + engines: {node: '>=0.10'} + dependencies: + any-promise: 1.3.0 + barse: 0.4.3 + event-to-promise: 0.7.0 + string-to-stream: 1.1.1 + xmlrpc: 1.3.2 + dev: false + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: @@ -1765,6 +1951,27 @@ packages: get-intrinsic: 1.2.0 dev: true + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.4.1 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.12 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.0 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: false + + /graceful-readlink@1.0.1: + resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} + dev: false + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true @@ -1832,6 +2039,19 @@ packages: void-elements: 3.1.0 dev: false + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: false + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -1852,6 +2072,14 @@ packages: sshpk: 1.17.0 dev: false + /http2-wrapper@2.2.0: + resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: false + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -1874,6 +2102,13 @@ packages: safer-buffer: 2.1.2 dev: false + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false @@ -2084,6 +2319,14 @@ packages: get-intrinsic: 1.2.0 dev: true + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true @@ -2128,6 +2371,10 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: false + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + /json-rpc-2.0@1.5.1: resolution: {integrity: sha512-ZY/vYl/uUgKN3tNrZMq7w+CGLcoUT+8AzDO/HJZVa+K4XcwgfgES1QDa5y7ieAeh4NgRo3hLexMxgdaiEiK9aA==} dev: false @@ -2176,6 +2423,12 @@ packages: object.assign: 4.1.4 dev: true + /keyv@4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + dependencies: + json-buffer: 3.0.1 + dev: false + /kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: false @@ -2229,11 +2482,20 @@ packages: triple-beam: 1.3.0 dev: false + /long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} dependencies: js-tokens: 4.0.0 + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2278,6 +2540,16 @@ packages: engines: {node: '>=6'} dev: false + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /minecraft-ping-js@1.0.2: resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==} dependencies: @@ -2296,7 +2568,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} @@ -2438,6 +2709,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: false + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -2445,6 +2721,12 @@ packages: path-key: 3.1.1 dev: false + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + /oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} dev: false @@ -2581,6 +2863,11 @@ packages: dev: false optional: true + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: false + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2602,6 +2889,19 @@ packages: callsites: 3.1.0 dev: true + /parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2746,6 +3046,10 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} dev: false + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -2785,7 +3089,6 @@ packages: /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} @@ -2851,6 +3154,27 @@ packages: pify: 2.3.0 dev: true + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -2916,6 +3240,10 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: false + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2936,6 +3264,13 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: false + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2956,6 +3291,10 @@ packages: queue-microtask: 1.2.3 dev: true + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false @@ -3104,6 +3443,13 @@ packages: engines: {node: '>= 0.10.0'} dev: false + /string-to-stream@1.1.1: + resolution: {integrity: sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: false + /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: @@ -3142,6 +3488,16 @@ packages: es-abstract: 1.21.2 dev: true + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -3601,6 +3957,19 @@ packages: sax: 1.2.4 dev: false + /xmlbuilder@8.2.2: + resolution: {integrity: sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==} + engines: {node: '>=4.0'} + dev: false + + /xmlrpc@1.3.2: + resolution: {integrity: sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==} + engines: {node: '>=0.8', npm: '>=1.0.0'} + dependencies: + sax: 1.2.4 + xmlbuilder: 8.2.2 + dev: false + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 18753c46..6091c0b1 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -674,5 +674,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 79187db3..9bf6d6ef 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -665,5 +665,14 @@ "failed": "Échoué", "canceled": "Annulé", "inProgress": "En cours" + }, + "gamedig": { + "name": "Nom", + "map": "Carte", + "currentPlayers": "Joueurs actuels", + "players": "Joueurs", + "maxPlayers": "Joueurs max", + "bots": "Bots", + "ping": "Ping" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index de114cc4..4b7ef50c 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -22,6 +22,7 @@ const components = { fileflows: dynamic(() => import("./fileflows/component")), flood: dynamic(() => import("./flood/component")), freshrss: dynamic(() => import("./freshrss/component")), + gamedig: dynamic(() => import("./gamedig/component")), ghostfolio: dynamic(() => import("./ghostfolio/component")), gluetun: dynamic(() => import("./gluetun/component")), gotify: dynamic(() => import("./gotify/component")), diff --git a/src/widgets/gamedig/component.jsx b/src/widgets/gamedig/component.jsx new file mode 100644 index 00000000..3ddf909a --- /dev/null +++ b/src/widgets/gamedig/component.jsx @@ -0,0 +1,59 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { widget } = service; + const { data: serverData, error: serverError } = useWidgetAPI(widget, "status"); + const { t } = useTranslation(); + + if(serverError){ + return ; + } + + // Default fields + if (widget.fields == null || widget.fields.length === 0) { + widget.fields = ["map", "currentPlayers", "ping"]; + } + const MAX_ALLOWED_FIELDS = 4; + // Limits max number of displayed fields + if (widget.fields != null && widget.fields.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!serverData) { + return ( + + + + + + + + + + ); + } + + const name = serverData.online ? serverData.name : "-"; + const map = serverData.online ? serverData.map : "-"; + const currentPlayers = serverData.online ? `${serverData.players} / ${serverData.maxplayers}` : "-"; + const players = serverData.online ? `${serverData.players}` : "-"; + const maxPlayers = serverData.online ? `${serverData.maxplayers}` : "-"; + const bots = serverData.online ? `${serverData.bots}` : "-"; + const ping = serverData.online ? `${serverData.ping}` : 0; + + return ( + + + + + + + + + + ); +} diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js new file mode 100644 index 00000000..f0b2e1d9 --- /dev/null +++ b/src/widgets/gamedig/proxy.js @@ -0,0 +1,37 @@ +import createLogger from "utils/logger"; +import getServiceWidget from "utils/config/service-helpers"; + +const proxyName = "gamedigProxyHandler"; +const logger = createLogger(proxyName); +const gamedig = require("gamedig"); + +export default async function gamedigProxyHandler(req, res) { + const { group, service } = req.query; + const serviceWidget = await getServiceWidget(group, service); + const url = new URL(serviceWidget.url); + + try { + const serverData = await gamedig.query({ + type: serviceWidget.serverType, + host: url.hostname, + port: url.port, + givenPortOnly: true, + }); + + res.status(200).send({ + online: true, + name: serverData.name, + map: serverData.map, + players: serverData.players.length, + maxplayers: serverData.maxplayers, + bots: serverData.bots.length, + ping: serverData.ping, + }); + } catch (e) { + logger.error(e); + + res.status(200).send({ + online: false + }); + } +} diff --git a/src/widgets/gamedig/widget.js b/src/widgets/gamedig/widget.js new file mode 100644 index 00000000..c84e95bb --- /dev/null +++ b/src/widgets/gamedig/widget.js @@ -0,0 +1,7 @@ +import gamedigProxyHandler from "./proxy"; + +const widget = { + proxyHandler: gamedigProxyHandler +} + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index f88bde59..6ae47efd 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -17,6 +17,7 @@ import evcc from "./evcc/widget"; import fileflows from "./fileflows/widget"; import flood from "./flood/widget"; import freshrss from "./freshrss/widget"; +import gamedig from "./gamedig/widget"; import ghostfolio from "./ghostfolio/widget"; import gluetun from "./gluetun/widget"; import gotify from "./gotify/widget"; @@ -107,6 +108,7 @@ const widgets = { fileflows, flood, freshrss, + gamedig, ghostfolio, gluetun, gotify, From 259cb955d03b6a3832675b268633e8a5060dfd43 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:38 +0000 Subject: [PATCH 0015/1640] Translated using Weblate (German) Currently translated at 93.8% (457 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/ --- public/locales/de/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 8bd743ea..a173355c 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "bots": "Bots", + "ping": "Ping", + "maxPlayers": "Max players" } } From fc39c1b45ad01f49bf2459978baf503fbe338f22 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:39 +0000 Subject: [PATCH 0016/1640] Translated using Weblate (Spanish) Currently translated at 98.5% (480 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index c4712669..ba0e64f1 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -665,5 +665,14 @@ "failed": "Fallido", "canceled": "Cancelado", "inProgress": "En proceso" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 3572b53ad6b3616a4619871aa617d75bd1518fcc Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:40 +0000 Subject: [PATCH 0017/1640] Translated using Weblate (Portuguese) Currently translated at 85.2% (415 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/ --- public/locales/pt/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index add4573a..0cedbe01 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -674,5 +674,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 2b21d50ce256b00da56953155898a2bd6b039a97 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:31 +0000 Subject: [PATCH 0018/1640] Translated using Weblate (Russian) Currently translated at 87.4% (426 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/ --- public/locales/ru/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index ed23a2a9..4f73ea7e 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -665,5 +665,14 @@ "notStarted": "Not Started", "failed": "Failed", "canceled": "Canceled" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 2c84b378ef7d12808e773b49e2a29fb1a1b031d9 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:32 +0000 Subject: [PATCH 0019/1640] Translated using Weblate (Chinese (Simplified)) Currently translated at 91.1% (444 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 448893aa..ae3c8ccb 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 374e0c215ec80d3b35b10ea8ef7e917761a19871 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:27 +0000 Subject: [PATCH 0020/1640] Translated using Weblate (Italian) Currently translated at 96.5% (470 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/ --- public/locales/it/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 0e45b23f..663b9f90 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 16daf4e97caefe265cc7299f9c793e608fbe6d6b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:27 +0000 Subject: [PATCH 0021/1640] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?= =?UTF-8?q?gian=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 16.4% (80 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/ --- public/locales/nb-NO/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index 38dd3012..5619ba90 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 28026a7fa1360458187433c553b39d76f81c61f7 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:42 +0000 Subject: [PATCH 0022/1640] Translated using Weblate (Vietnamese) Currently translated at 9.0% (44 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/ --- public/locales/vi/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index d3341c7a..4ea3945e 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From c48d10adcbd5465b682a4d5fbed79237f24fefae Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:29 +0000 Subject: [PATCH 0023/1640] Translated using Weblate (Dutch) Currently translated at 49.4% (241 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/ --- public/locales/nl/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 5bcce505..b01e40cd 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From c43cec32d0be28bbba02114a73eb7223a6bc98f3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:34 +0000 Subject: [PATCH 0024/1640] Translated using Weblate (Chinese (Traditional)) Currently translated at 94.4% (460 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/ --- public/locales/zh-Hant/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 2f9d8622..0adcba93 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From c379f3592e216746494dd7343faa46658eb4b6a2 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:30 +0000 Subject: [PATCH 0025/1640] Translated using Weblate (Catalan) Currently translated at 53.3% (260 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/ --- public/locales/ca/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 83fc95a4..8849d7c7 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 05ca31ecb6114eb955863f7b2d28413b35530c54 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:21 +0000 Subject: [PATCH 0026/1640] Translated using Weblate (Polish) Currently translated at 76.7% (374 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/ --- public/locales/pl/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index c44da833..4853224d 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From f1e7b2b92ff8df8d5d6ad542da56f2d9c82b7beb Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:31 +0000 Subject: [PATCH 0027/1640] Translated using Weblate (Swedish) Currently translated at 27.1% (132 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/ --- public/locales/sv/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index d432afc4..814d5534 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From d7be22c7c8d457061ea06e5e1104bdc5473f068c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:32 +0000 Subject: [PATCH 0028/1640] Translated using Weblate (Croatian) Currently translated at 96.5% (470 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/ --- public/locales/hr/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 49e13492..3dd31841 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From f28ce55e429be52cce3a31898ad1b3b5dfd2a8b2 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:37 +0000 Subject: [PATCH 0029/1640] Translated using Weblate (Hungarian) Currently translated at 98.3% (479 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/ --- public/locales/hu/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 56bfd877..2ee5c2d4 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -665,5 +665,14 @@ "failed": "Sikertelen", "canceled": "Megszakítva", "inProgress": "Folyamatban" + }, + "gamedig": { + "ping": "Ping", + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots" } } From 8ebc7937c187fc264b81a6b19c06f6a963926cc7 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:36 +0000 Subject: [PATCH 0030/1640] Translated using Weblate (Hebrew) Currently translated at 20.5% (100 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/ --- public/locales/he/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 78545f39..335ee8fc 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 70aab41ffc7992078966e0f325fd928d9299e6b6 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:34 +0000 Subject: [PATCH 0031/1640] Translated using Weblate (Romanian) Currently translated at 30.8% (150 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/ --- public/locales/ro/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 96fd22b4..ec4016cd 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 078b1cbfd6ff68f0cf460d7123b65a56dc99b078 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:33 +0000 Subject: [PATCH 0032/1640] Translated using Weblate (Portuguese (Brazil)) Currently translated at 82.9% (404 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 55e45757..acf7fa0a 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From b94a4834c19ddce13a72a6bdd6dd87e12f860b6b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:41 +0000 Subject: [PATCH 0033/1640] Translated using Weblate (Yue (Traditional)) Currently translated at 24.0% (117 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/ --- public/locales/yue/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 91775685..37cfeeba 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From bb2b2de97e24a3f531f633712f4cb552bc5a808d Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:40 +0000 Subject: [PATCH 0034/1640] Translated using Weblate (Finnish) Currently translated at 36.3% (177 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/ --- public/locales/fi/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index ad457f2c..e276fb98 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From bd229a7f8f08d650d058c662cd25ac86d9848b36 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:41 +0000 Subject: [PATCH 0035/1640] Translated using Weblate (Telugu) Currently translated at 44.1% (215 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index a73051a4..60c0c70c 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 9dfc9f261b9aad3a99d8f9604b24a3eb3afa744f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:28 +0000 Subject: [PATCH 0036/1640] Translated using Weblate (Bulgarian) Currently translated at 9.4% (46 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index d0dea6a9..192002a5 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 8658d24d15ac307a5fa2f084e036cff748a16cd0 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:29 +0000 Subject: [PATCH 0037/1640] Translated using Weblate (Turkish) Currently translated at 80.6% (393 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/ --- public/locales/tr/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 0aac8e9f..8ef13783 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From de47fc6e7fb4a2a8bc609fa350b6b784e1e1aa18 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:35 +0000 Subject: [PATCH 0038/1640] Translated using Weblate (Serbian) Currently translated at 1.8% (9 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/ --- public/locales/sr/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index bb387d90..dcdbce18 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 7aa3220e508024555605c73c6da35b8029ee403a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:35 +0000 Subject: [PATCH 0039/1640] Translated using Weblate (Arabic) Currently translated at 53.7% (262 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/ --- public/locales/ar/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 6ff5acab..376cb1fe 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 5aa82ae92867dd8288e58f0bce5b0308d2b0c370 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:24 +0000 Subject: [PATCH 0040/1640] Translated using Weblate (Czech) Currently translated at 91.1% (444 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/ --- public/locales/cs/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index ed5dc276..73ce54ac 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "map": "Map", + "currentPlayers": "Current players", + "name": "Name", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 28acc9207c512bb23f76a100bf753e5a04474d70 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:22 +0000 Subject: [PATCH 0041/1640] Translated using Weblate (Danish) Currently translated at 40.4% (197 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/ --- public/locales/da/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 797f9f4a..bb45619d 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 5b9a478a0fde775161e16c31ba2635ac9cf45ed5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:22 +0000 Subject: [PATCH 0042/1640] Translated using Weblate (Malay) Currently translated at 51.5% (251 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/ --- public/locales/ms/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index a25ed71f..4d729745 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From f7ffb87e7c2c024f522099ccc7baa3b701a539b1 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:23 +0000 Subject: [PATCH 0043/1640] Translated using Weblate (Hindi) Currently translated at 1.8% (9 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/ --- public/locales/hi/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 70dd22e8..3ab11d3c 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 4863bf924915fae888be0a7f5d8bcc26cdbd733a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:24 +0000 Subject: [PATCH 0044/1640] Translated using Weblate (Esperanto) Currently translated at 29.7% (145 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/ --- public/locales/eo/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 4a1ae6f3..ccc953d0 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 29a7336b74343a7496d1095cfc6ccca11f1d7e13 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:25 +0000 Subject: [PATCH 0045/1640] Translated using Weblate (Ukrainian) Currently translated at 98.5% (480 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/ --- public/locales/uk/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 86008450..f831a41a 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -665,5 +665,14 @@ "notStarted": "Не розпочато", "canceled": "Скасовано", "inProgress": "В процесі" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From e39734e101d0854bb7823b04ad0c272d98811f20 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:23 +0000 Subject: [PATCH 0046/1640] Translated using Weblate (Japanese) Currently translated at 79.0% (385 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/ --- public/locales/ja/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 5a0eccee..ec84d85a 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 51c386e9b38c117cd6ffd39efcd3b888cfd89cc1 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:26 +0000 Subject: [PATCH 0047/1640] Translated using Weblate (Latvian) Currently translated at 24.2% (118 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/ --- public/locales/lv/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 696b4d85..f6aeba06 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -665,5 +665,14 @@ "canceled": "Canceled", "result": "Result", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 4203d2d45c97c4ac716ca8b63754d478f3f81fde Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:19 +0000 Subject: [PATCH 0048/1640] Translated using Weblate (Thai) Currently translated at 9.6% (47 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/ --- public/locales/th/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 64300953..d6c1d48e 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 970842cee219a64e543198a783736a31bfdb5194 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:37 +0000 Subject: [PATCH 0049/1640] Translated using Weblate (Slovak) Currently translated at 1.8% (9 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/ --- public/locales/sk/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 710b5007..29595948 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 3f1fdc2426b584df15c340c76e10500ecc4a338c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:38 +0000 Subject: [PATCH 0050/1640] Translated using Weblate (Korean) Currently translated at 35.5% (173 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/ --- public/locales/ko/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index f1325b75..92b18b49 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "ping": "Ping", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots" } } From 6de158897cd6c7d1accbe68fdedf21b023a66114 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:20 +0000 Subject: [PATCH 0051/1640] Translated using Weblate (Greek) Currently translated at 29.3% (143 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/ --- public/locales/el/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 506a25d7..661e36ac 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 846181eaeba8ae41f93c59425af4e716c73702ae Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:26 +0000 Subject: [PATCH 0052/1640] Translated using Weblate (Slovenian) Currently translated at 96.7% (471 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/ --- public/locales/sl/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 60cee85f..c727bcf8 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 4a051bdaed6400b927baf5338b4160845b6e0e3f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:20 +0000 Subject: [PATCH 0053/1640] Translated using Weblate (Indonesian) Currently translated at 3.0% (15 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/ --- public/locales/id/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/id/common.json b/public/locales/id/common.json index d3cab359..a0f17261 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From 4d50ca21dc01859091a2940a304feb75279e5ae5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Thu, 27 Jul 2023 05:07:43 +0000 Subject: [PATCH 0054/1640] Translated using Weblate (Basque) Currently translated at 6.7% (33 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eu/ --- public/locales/eu/common.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 27685703..2b99e769 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -665,5 +665,14 @@ "failed": "Failed", "canceled": "Canceled", "inProgress": "In Progress" + }, + "gamedig": { + "currentPlayers": "Current players", + "name": "Name", + "map": "Map", + "players": "Players", + "maxPlayers": "Max players", + "bots": "Bots", + "ping": "Ping" } } From e9ebf67cdaafaa44fab8f1d48d42c579d8f8f976 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Thu, 27 Jul 2023 12:24:44 +0000 Subject: [PATCH 0055/1640] Translated using Weblate (Spanish) Currently translated at 100.0% (487 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index ba0e64f1..d0f7025e 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -667,11 +667,11 @@ "inProgress": "En proceso" }, "gamedig": { - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", + "name": "Nombre", + "map": "Mapa", + "currentPlayers": "Jugadores actuales", + "players": "Jugadores", + "maxPlayers": "Jugadores máximos", "bots": "Bots", "ping": "Ping" } From ac61dc5d0c5b6de9aa9d3544207c4f196eff6e12 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 27 Jul 2023 09:37:38 +0000 Subject: [PATCH 0056/1640] Translated using Weblate (Ukrainian) Currently translated at 100.0% (487 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/ --- public/locales/uk/common.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index f831a41a..b532eccd 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -667,12 +667,12 @@ "inProgress": "В процесі" }, "gamedig": { - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", - "bots": "Bots", - "ping": "Ping" + "name": "Назва", + "map": "Мапа", + "currentPlayers": "Поточні гравці", + "players": "Гравці", + "maxPlayers": "Максимум гравців", + "bots": "Ботів", + "ping": "Пінг" } } From 7e05adc02a00ec4cfeedef1b85ffc85a4b9b1dbe Mon Sep 17 00:00:00 2001 From: Nitzan Miranda <59150911+Nizzan943@users.noreply.github.com> Date: Sun, 30 Jul 2023 08:17:30 +0300 Subject: [PATCH 0057/1640] Add Azure DevOps (#1715) * add azure pullrequrests * add creatorId * rename azurePullrequests->azurePullRequests * pass creatorId to FE * expose userEmail to frontend * tolower * remove unused code * merge to AzureDevOps * fix userEmail * remove whitespace in const and set true endpoint in widget * use widget params in endpoint * change approvedNotCompleted to Approved * change to lower * rename * rename * merge widgets together * limit pipeline result to 1 result * Better handle azuredevops PR call failures * change to have repositoryId and not branchName * Fix field filtering, avoid PR call if not needed --------- Co-authored-by: Nitzan Miranda Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- public/locales/en/common.json | 7 ++- src/utils/config/service-helpers.js | 7 +++ src/utils/proxy/api-helpers.js | 2 +- src/utils/proxy/handlers/credentialed.js | 2 +- src/widgets/azurePipelines/component.jsx | 36 ------------- src/widgets/azurePipelines/widget.js | 8 --- src/widgets/azuredevops/component.jsx | 65 ++++++++++++++++++++++++ src/widgets/azuredevops/widget.js | 18 +++++++ src/widgets/components.js | 2 +- src/widgets/widgets.js | 4 +- 10 files changed, 100 insertions(+), 51 deletions(-) delete mode 100644 src/widgets/azurePipelines/component.jsx delete mode 100644 src/widgets/azurePipelines/widget.js create mode 100644 src/widgets/azuredevops/component.jsx create mode 100644 src/widgets/azuredevops/widget.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 6091c0b1..66aa19ab 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -665,7 +665,7 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { + "azuredevops": { "result": "Result", "status": "Status", "buildId": "Build ID", @@ -673,7 +673,10 @@ "notStarted": "Not Started", "failed": "Failed", "canceled": "Canceled", - "inProgress": "In Progress" + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" }, "gamedig": { "name": "Name", diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index dc625f2e..92fa7b22 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -293,6 +293,8 @@ export function cleanServiceGroups(groups) { node, // Proxmox snapshotHost, // kopia snapshotPath, + userEmail, // azuredevops + repositoryId } = cleanedService.widget; let fieldsList = fields; @@ -312,6 +314,11 @@ export function cleanServiceGroups(groups) { service_group: serviceGroup.name, }; + if (type === "azuredevops") { + if (userEmail) cleanedService.widget.userEmail = userEmail; + if (repositoryId) cleanedService.widget.repositoryId = repositoryId; + } + if (type === "coinmarketcap") { if (currency) cleanedService.widget.currency = currency; if (symbols) cleanedService.widget.symbols = symbols; diff --git a/src/utils/proxy/api-helpers.js b/src/utils/proxy/api-helpers.js index ca2721ec..be73a5b7 100644 --- a/src/utils/proxy/api-helpers.js +++ b/src/utils/proxy/api-helpers.js @@ -5,7 +5,7 @@ export function formatApiCall(url, args) { return args[key] || ""; }; - return url.replace(/\/+$/, "").replace(find, replace); + return url.replace(/\/+$/, "").replace(find, replace).replace(find,replace); } function getURLSearchParams(widget, endpoint) { diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 3d181ead..498c0d6d 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -62,7 +62,7 @@ export default async function credentialedProxyHandler(req, res, map) { headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`; } } - else if (widget.type === "azurePipelines") { + else if (widget.type === "azuredevops") { headers.Authorization = `Basic ${Buffer.from(`$:${widget.key}`).toString("base64")}`; } else { headers["X-API-Key"] = `${widget.key}`; diff --git a/src/widgets/azurePipelines/component.jsx b/src/widgets/azurePipelines/component.jsx deleted file mode 100644 index a47296f3..00000000 --- a/src/widgets/azurePipelines/component.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import { useTranslation } from "next-i18next"; - -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; -import useWidgetAPI from "utils/proxy/use-widget-api"; - -export default function Component({ service }) { - const { t } = useTranslation(); - - const { widget } = service; - - const { data: pipelineData, error: pipelineError } = useWidgetAPI(widget); - - if (pipelineError) { - return ; - } - - if (!pipelineData || !Array.isArray(pipelineData.value)) { - return ( - - - - - ); - } - - return ( - - {pipelineData.value[0].result ? - : - - } - - - ); -} diff --git a/src/widgets/azurePipelines/widget.js b/src/widgets/azurePipelines/widget.js deleted file mode 100644 index 708266d2..00000000 --- a/src/widgets/azurePipelines/widget.js +++ /dev/null @@ -1,8 +0,0 @@ -import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; - -const widget = { - api: "https://dev.azure.com/{organization}/{project}/_apis/build/Builds?branchName={branchName}&definitions={definitionId}", - proxyHandler: credentialedProxyHandler, -}; - -export default widget; \ No newline at end of file diff --git a/src/widgets/azuredevops/component.jsx b/src/widgets/azuredevops/component.jsx new file mode 100644 index 00000000..a9db4403 --- /dev/null +++ b/src/widgets/azuredevops/component.jsx @@ -0,0 +1,65 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const { userEmail, repositoryId } = widget; + const includePR = userEmail !== undefined && repositoryId !== undefined; + const { data: prData, error: prError } = useWidgetAPI(widget, includePR ? "pr" : null); + const { data: pipelineData, error: pipelineError } = useWidgetAPI(widget, "pipeline"); + + if ( + pipelineError || + (includePR && (prError || prData?.errorCode !== undefined)) + ) { + let finalError = pipelineError ?? prError; + if (includePR && prData?.errorCode !== null) { + // pr call failed possibly with more specific message + finalError = { message: prData?.message ?? 'Error communicating with Azure API' } + } + return ; + } + + if (!pipelineData || !Array.isArray(pipelineData.value) || (includePR && !prData)) { + return ( + + + + + + + ); + } + + return ( + + {pipelineData.value[0].result ? ( + + ) : ( + + )} + + {includePR && } + {includePR && item.createdBy.uniqueName.toLowerCase() === userEmail.toLowerCase()) + .length, + })} + />} + {includePR && item.createdBy.uniqueName.toLowerCase() === userEmail.toLowerCase()) + .filter((item) => item.reviewers.some((reviewer) => reviewer.vote === 10)).length, + })} + />} + + + ); +} diff --git a/src/widgets/azuredevops/widget.js b/src/widgets/azuredevops/widget.js new file mode 100644 index 00000000..84c9fdf3 --- /dev/null +++ b/src/widgets/azuredevops/widget.js @@ -0,0 +1,18 @@ +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; + +const widget = { + api: "https://dev.azure.com/{organization}/{project}/_apis/{endpoint}", + proxyHandler: credentialedProxyHandler, + + mappings: { + pr: { + endpoint: "git/repositories/{repositoryId}/pullrequests" + }, + + pipeline: { + endpoint: "build/Builds?branchName={branchName}&definitions={definitionId}&$top=1" + }, + }, +}; + +export default widget; diff --git a/src/widgets/components.js b/src/widgets/components.js index 4b7ef50c..0c372ce9 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -5,7 +5,7 @@ const components = { audiobookshelf: dynamic(() => import("./audiobookshelf/component")), authentik: dynamic(() => import("./authentik/component")), autobrr: dynamic(() => import("./autobrr/component")), - azurePipelines: dynamic(() => import("./azurePipelines/component")), + azuredevops: dynamic(() => import("./azuredevops/component")), bazarr: dynamic(() => import("./bazarr/component")), caddy: dynamic(() => import("./caddy/component")), changedetectionio: dynamic(() => import("./changedetectionio/component")), diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 6ae47efd..14dc2cd2 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -2,7 +2,7 @@ import adguard from "./adguard/widget"; import audiobookshelf from "./audiobookshelf/widget"; import authentik from "./authentik/widget"; import autobrr from "./autobrr/widget"; -import azurePipelines from "./azurePipelines/widget"; +import azuredevops from "./azuredevops/widget"; import bazarr from "./bazarr/widget"; import caddy from "./caddy/widget"; import changedetectionio from "./changedetectionio/widget"; @@ -93,7 +93,7 @@ const widgets = { audiobookshelf, authentik, autobrr, - azurePipelines, + azuredevops, bazarr, caddy, changedetectionio, From d2c565da2764eaa011309b3a57efcab9a91b1308 Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 30 Jul 2023 03:02:24 +0000 Subject: [PATCH 0058/1640] Translated using Weblate (Portuguese (Brazil)) Currently translated at 95.8% (467 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 124 +++++++++++++++---------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index acf7fa0a..8746c3f9 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -91,7 +91,7 @@ "transcoding": "Transcodificando", "bitrate": "Taxa de bits", "no_active": "Sem transmissões ativas", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Verifique a conexão do Plex" }, "nzbget": { "rate": "Taxa", @@ -114,21 +114,21 @@ "wanted": "Desejado", "queued": "Na fila", "series": "Séries", - "queue": "Queue", - "unknown": "Unknown" + "queue": "Fila", + "unknown": "Desconhecido" }, "radarr": { "wanted": "Desejado", "queued": "Na fila", "movies": "Filmes", "missing": "Faltando", - "queue": "Queue", - "unknown": "Unknown" + "queue": "Fila", + "unknown": "Desconhecido" }, "lidarr": { "wanted": "Desejado", "queued": "Na fila", - "artists": "Artists" + "artists": "Artistas" }, "readarr": { "wanted": "Desejado", @@ -159,7 +159,7 @@ "queries": "Consultas", "blocked": "Bloqueados", "gravity": "Gravidade", - "blocked_percent": "Blocked %" + "blocked_percent": "Bloqueado %" }, "adguard": { "queries": "Consultas", @@ -244,11 +244,11 @@ "uptime": "LIGADO", "days": "d", "hours": "h", - "load": "Load", - "warn": "Warn", + "load": "Carga", + "warn": "Aviso", "total": "Total", - "free": "Free", - "used": "Used" + "free": "Livre", + "used": "Usado" }, "changedetectionio": { "totalObserved": "Observados", @@ -524,8 +524,8 @@ "memoryusage": "Memória Utilizada", "freespace": "Espaço Livre", "activeusers": "Usuários Ativos", - "numfiles": "Files", - "numshares": "Shared Items" + "numfiles": "Arquivos", + "numshares": "Itens Compartilhados" }, "kopia": { "status": "Status", @@ -582,97 +582,97 @@ "switches_on": "Interruptores Ligados" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Assinaturas", + "unread": "Não lida" }, "channelsdvrserver": { "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", + "recordings": "Gravações", + "scheduled": "Agendado", "passes": "Passes" }, "whatsupdocker": { - "monitoring": "Monitoring", - "updates": "Updates" + "monitoring": "Monitorando", + "updates": "Atualizações" }, "tailscale": { - "address": "Address", - "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", - "years": "{{number}}y", - "weeks": "{{number}}w", + "address": "Endereço", + "expires": "Expira", + "never": "Nunca", + "last_seen": "Visto pela última vez", + "now": "Agora", + "years": "{{number}}a", + "weeks": "{{number}}s", "hours": "{{number}}h", "days": "{{number}}d", "minutes": "{{number}}m", "seconds": "{{number}}s", - "ago": "{{value}} Ago" + "ago": "{{value}} Atrás" }, "qnap": { - "systemTempC": "System Temp", - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", + "systemTempC": "Temp Sistema", + "cpuUsage": "Uso CPU", + "memUsage": "Uso MEM", "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "volumeUsage": "Uso Volume", + "invalid": "Invalido" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", + "load": "Média de carga", + "memory": "Uso Mem", "wanStatus": "WAN Status", "up": "Up", "down": "Down", "temp": "Temp", - "disk": "Disk Usage", + "disk": "Uso de disco", "wanIP": "WAN IP" }, "caddy": { "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "requests": "Solicitações atuais", + "requests_failed": "Solicitações com falha" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", + "pv_power": "Produção", + "battery_soc": "Bateria", + "grid_power": "Grade", + "home_power": "Consumo", + "charge_power": "Carregador", "watt_hour": "Wh" }, "pialert": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Conectado", + "new_devices": "Novos dispositivos", + "down_alerts": "Alertas de Quedas" }, "jdownloader": { - "downloadCount": "Queue Count", - "downloadSpeed": "Download Speed", - "downloadBytesRemaining": "Remaining", - "downloadTotalBytes": "Size" + "downloadCount": "Fila", + "downloadSpeed": "Velocidade de download", + "downloadBytesRemaining": "Restante", + "downloadTotalBytes": "Tamanho" }, "kavita": { "seriesCount": "Series", - "totalFiles": "Files" + "totalFiles": "Arquivos" }, "azurePipelines": { - "result": "Result", + "result": "Resultado", "status": "Status", "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" + "succeeded": "Sucesso", + "notStarted": "Não foi iniciado", + "failed": "Falhou", + "canceled": "Cancelado", + "inProgress": "Em Andamento" }, "gamedig": { - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", - "bots": "Bots", + "name": "Nome", + "map": "Mapa", + "currentPlayers": "Jogadores atuais", + "players": "Jogadores", + "maxPlayers": "Jogadores Max", + "bots": "Robos", "ping": "Ping" } } From 90545612123939911c8119e896c50ecbb10c9157 Mon Sep 17 00:00:00 2001 From: liimee Date: Sun, 30 Jul 2023 00:38:22 +0000 Subject: [PATCH 0059/1640] Translated using Weblate (Indonesian) Currently translated at 4.9% (24 of 487 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/ --- public/locales/id/common.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/public/locales/id/common.json b/public/locales/id/common.json index a0f17261..ec541847 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -494,9 +494,9 @@ }, "weather": { "wait": "Harap tunggu", - "current": "Current Location", - "allow": "Click to allow", - "updating": "Updating" + "current": "Lokasi Saat Ini", + "allow": "Klik untuk mengizinkan", + "updating": "Memperbarui" }, "search": { "placeholder": "Telusuri…" @@ -590,11 +590,11 @@ "cpu": "CPU", "mem": "MEM", "total": "Total", - "free": "Free", - "used": "Used", + "free": "Luang", + "used": "Digunakan", "load": "Load", "temp": "TEMP", - "max": "Max", + "max": "Maks", "uptime": "UP", "months": "mo", "hours": "h", From 556cb0f0394353e423a5febdfdc2cd22bcdeba7c Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 30 Jul 2023 07:17:41 +0200 Subject: [PATCH 0060/1640] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ --- public/locales/ar/common.json | 10 ---------- public/locales/bg/common.json | 10 ---------- public/locales/ca/common.json | 10 ---------- public/locales/cs/common.json | 10 ---------- public/locales/da/common.json | 10 ---------- public/locales/de/common.json | 10 ---------- public/locales/el/common.json | 10 ---------- public/locales/eo/common.json | 10 ---------- public/locales/es/common.json | 10 ---------- public/locales/eu/common.json | 10 ---------- public/locales/fi/common.json | 10 ---------- public/locales/fr/common.json | 10 ---------- public/locales/he/common.json | 10 ---------- public/locales/hi/common.json | 10 ---------- public/locales/hr/common.json | 10 ---------- public/locales/hu/common.json | 10 ---------- public/locales/id/common.json | 10 ---------- public/locales/it/common.json | 10 ---------- public/locales/ja/common.json | 10 ---------- public/locales/ko/common.json | 10 ---------- public/locales/lv/common.json | 10 ---------- public/locales/ms/common.json | 10 ---------- public/locales/nb-NO/common.json | 10 ---------- public/locales/nl/common.json | 10 ---------- public/locales/pl/common.json | 10 ---------- public/locales/pt-BR/common.json | 10 ---------- public/locales/pt/common.json | 10 ---------- public/locales/ro/common.json | 10 ---------- public/locales/ru/common.json | 10 ---------- public/locales/sk/common.json | 10 ---------- public/locales/sl/common.json | 10 ---------- public/locales/sr/common.json | 10 ---------- public/locales/sv/common.json | 10 ---------- public/locales/te/common.json | 10 ---------- public/locales/th/common.json | 10 ---------- public/locales/tr/common.json | 10 ---------- public/locales/uk/common.json | 10 ---------- public/locales/vi/common.json | 10 ---------- public/locales/yue/common.json | 10 ---------- public/locales/zh-CN/common.json | 10 ---------- public/locales/zh-Hant/common.json | 10 ---------- 41 files changed, 410 deletions(-) diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 376cb1fe..510d1bcb 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 192002a5..b3f77b74 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 8849d7c7..a4e9bc01 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 73ce54ac..8c2ef694 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "map": "Map", "currentPlayers": "Current players", diff --git a/public/locales/da/common.json b/public/locales/da/common.json index bb45619d..5b2910a3 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index a173355c..69a12cef 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 661e36ac..65d922fe 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index ccc953d0..4745402e 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index d0f7025e..c52e8859 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -656,16 +656,6 @@ "seriesCount": "Serie", "totalFiles": "Archivos" }, - "azurePipelines": { - "result": "Resultado", - "status": "Estado", - "buildId": "ID de la compilación", - "succeeded": "Con éxito", - "notStarted": "No iniciado", - "failed": "Fallido", - "canceled": "Cancelado", - "inProgress": "En proceso" - }, "gamedig": { "name": "Nombre", "map": "Mapa", diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 2b99e769..3302d8be 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "currentPlayers": "Current players", "name": "Name", diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index e276fb98..c62247cb 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 9bf6d6ef..2664e0dc 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -656,16 +656,6 @@ "seriesCount": "Séries", "totalFiles": "Fichiers" }, - "azurePipelines": { - "result": "Résultat", - "status": "Statut", - "buildId": "Build ID", - "succeeded": "Réussi", - "notStarted": "Non démarré", - "failed": "Échoué", - "canceled": "Annulé", - "inProgress": "En cours" - }, "gamedig": { "name": "Nom", "map": "Carte", diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 335ee8fc..e7b742c5 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 3ab11d3c..8fc94e29 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 3dd31841..9eef834e 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -656,16 +656,6 @@ "seriesCount": "Serije", "totalFiles": "Datoteke" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 2ee5c2d4..a0a60666 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -656,16 +656,6 @@ "seriesCount": "Sorozatok", "totalFiles": "Fájlok" }, - "azurePipelines": { - "result": "Eredmény", - "status": "Állapot", - "buildId": "Build ID", - "succeeded": "Sikeres", - "notStarted": "Nincs elindítva", - "failed": "Sikertelen", - "canceled": "Megszakítva", - "inProgress": "Folyamatban" - }, "gamedig": { "ping": "Ping", "name": "Name", diff --git a/public/locales/id/common.json b/public/locales/id/common.json index ec541847..974857b4 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 663b9f90..5281fe24 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -656,16 +656,6 @@ "seriesCount": "Serie", "totalFiles": "File" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index ec84d85a..279fd0fa 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 92b18b49..8e9af0e1 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index f6aeba06..70d1fafc 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "result": "Result", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 4d729745..6ad8ab4d 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index 5619ba90..d3007a3a 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Filer" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index b01e40cd..ddc8547c 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 4853224d..9889f245 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 8746c3f9..a58220f5 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Arquivos" }, - "azurePipelines": { - "result": "Resultado", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Sucesso", - "notStarted": "Não foi iniciado", - "failed": "Falhou", - "canceled": "Cancelado", - "inProgress": "Em Andamento" - }, "gamedig": { "name": "Nome", "map": "Mapa", diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 0cedbe01..ac21d6e2 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -665,16 +665,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index ec4016cd..af5a3e0e 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 4f73ea7e..fad75cc2 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "inProgress": "In Progress", - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 29595948..44ac0e7f 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index c727bcf8..d95f1192 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -656,16 +656,6 @@ "seriesCount": "Serije", "totalFiles": "Datoteke" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index dcdbce18..caac0934 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 814d5534..7f24a767 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -656,16 +656,6 @@ "totalFiles": "Files", "seriesCount": "Series" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 60c0c70c..a5de0ec0 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -656,16 +656,6 @@ "totalFiles": "Files", "seriesCount": "Series" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/th/common.json b/public/locales/th/common.json index d6c1d48e..292a3992 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 8ef13783..7e3ab04a 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index b532eccd..06d3c8a4 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -656,16 +656,6 @@ "seriesCount": "Серій", "totalFiles": "Файлів" }, - "azurePipelines": { - "failed": "Невдача", - "result": "Результат", - "status": "Стан", - "buildId": "ID збірки", - "succeeded": "Успішно", - "notStarted": "Не розпочато", - "canceled": "Скасовано", - "inProgress": "В процесі" - }, "gamedig": { "name": "Назва", "map": "Мапа", diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 4ea3945e..64fbd5ec 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 37cfeeba..f08d6075 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index ae3c8ccb..0c780e9b 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 0adcba93..f5c9a570 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -656,16 +656,6 @@ "seriesCount": "Series", "totalFiles": "Files" }, - "azurePipelines": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress" - }, "gamedig": { "name": "Name", "map": "Map", From 59c7bcb392a84fc7e85560af1ea98c0e2976f6de Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:44 +0000 Subject: [PATCH 0061/1640] Translated using Weblate (German) Currently translated at 93.2% (457 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/ --- public/locales/de/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 69a12cef..079ba76a 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -664,5 +664,18 @@ "bots": "Bots", "ping": "Ping", "maxPlayers": "Max players" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved", + "inProgress": "In Progress" } } From 19c56de8b0da880f7ab2685d2178f59892eac99a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:45 +0000 Subject: [PATCH 0062/1640] Translated using Weblate (Spanish) Currently translated at 97.7% (479 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index c52e8859..788dd60f 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Jugadores máximos", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 99a55c85bbcf8b7154cc29c32a960ae2022b5839 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:46 +0000 Subject: [PATCH 0063/1640] Translated using Weblate (French) Currently translated at 97.7% (479 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 2664e0dc..0b59f5aa 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Joueurs max", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 7fbac755bc9c8392c3be2920bc921c8fe20c1939 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:47 +0000 Subject: [PATCH 0064/1640] Translated using Weblate (Portuguese) Currently translated at 84.6% (415 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/ --- public/locales/pt/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index ac21d6e2..8b645644 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -673,5 +673,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "approved": "Approved", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs" } } From fcecdd3c4a287c79328bb450c9d045688ece7c46 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:32 +0000 Subject: [PATCH 0065/1640] Translated using Weblate (Russian) Currently translated at 86.9% (426 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/ --- public/locales/ru/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index fad75cc2..f33f112a 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 9058613b97efabc8f38aff1d3e69f09214cf8997 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:34 +0000 Subject: [PATCH 0066/1640] Translated using Weblate (Chinese (Simplified)) Currently translated at 90.6% (444 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 0c780e9b..1cf467d2 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "canceled": "Canceled", + "inProgress": "In Progress", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From cf8efb38f7aef58900cc0143803ba3275fc5ea88 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:25 +0000 Subject: [PATCH 0067/1640] Translated using Weblate (Italian) Currently translated at 95.9% (470 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/ --- public/locales/it/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 5281fe24..67d19847 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "myPrs": "My PRs", + "approved": "Approved", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs" } } From 1590029aecac08f7526791bafaf39bc2ebd89014 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:26 +0000 Subject: [PATCH 0068/1640] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?= =?UTF-8?q?gian=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 16.3% (80 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/ --- public/locales/nb-NO/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index d3007a3a..d1d13c59 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From f66a4e4a425287e0a377e79311353c8c2b70466f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:51 +0000 Subject: [PATCH 0069/1640] Translated using Weblate (Vietnamese) Currently translated at 8.9% (44 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/ --- public/locales/vi/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 64fbd5ec..7be92570 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 4545b785f0744653a4fc1256583170cc4006a078 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:29 +0000 Subject: [PATCH 0070/1640] Translated using Weblate (Dutch) Currently translated at 49.1% (241 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/ --- public/locales/nl/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index ddc8547c..2f80472b 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From b5ec54b3196a5848642564ddadbede21bfa856a8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:37 +0000 Subject: [PATCH 0071/1640] Translated using Weblate (Chinese (Traditional)) Currently translated at 93.8% (460 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/ --- public/locales/zh-Hant/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index f5c9a570..2a8c7474 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 76ff3d142c8642036372fc7b5f0736c7d97f93d3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:30 +0000 Subject: [PATCH 0072/1640] Translated using Weblate (Catalan) Currently translated at 53.0% (260 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/ --- public/locales/ca/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index a4e9bc01..0f8507a3 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From f5855514fa9f5e8e781cc13a46cecaf51b0ffd81 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:16 +0000 Subject: [PATCH 0073/1640] Translated using Weblate (Polish) Currently translated at 76.3% (374 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/ --- public/locales/pl/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 9889f245..9543cc08 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "myPrs": "My PRs", + "approved": "Approved", + "result": "Result", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs" } } From 5a3f141f9daad9d234ad334d9e533a2a5f7d9c2e Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:32 +0000 Subject: [PATCH 0074/1640] Translated using Weblate (Swedish) Currently translated at 26.9% (132 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/ --- public/locales/sv/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 7f24a767..9a236530 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "approved": "Approved", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs" } } From 84cca259a64cd621763616d8a421b30f0fc7b711 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:34 +0000 Subject: [PATCH 0075/1640] Translated using Weblate (Croatian) Currently translated at 95.9% (470 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/ --- public/locales/hr/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 9eef834e..c90d87fe 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 771f5493fd60c3d89bcccc705dd32ceee94a8f07 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:41 +0000 Subject: [PATCH 0076/1640] Translated using Weblate (Hungarian) Currently translated at 96.1% (471 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/ --- public/locales/hu/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index a0a60666..f98ca9d3 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -664,5 +664,18 @@ "players": "Players", "maxPlayers": "Max players", "bots": "Bots" + }, + "azuredevops": { + "status": "Status", + "myPrs": "My PRs", + "approved": "Approved", + "result": "Result", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs" } } From 36f48cf8632f6b7dacf5b4bcfa471e28917c7fc8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:40 +0000 Subject: [PATCH 0077/1640] Translated using Weblate (Hebrew) Currently translated at 20.4% (100 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/ --- public/locales/he/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/he/common.json b/public/locales/he/common.json index e7b742c5..cf504e8a 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "myPrs": "My PRs", + "totalPrs": "Total PRs", + "approved": "Approved" } } From 6bdad763666877b0234afab879679174593974b7 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:36 +0000 Subject: [PATCH 0078/1640] Translated using Weblate (Romanian) Currently translated at 30.6% (150 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/ --- public/locales/ro/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index af5a3e0e..87e7620a 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed" } } From 61aac831cb721456e62d01dfb963294cb5569ffa Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:35 +0000 Subject: [PATCH 0079/1640] Translated using Weblate (Portuguese (Brazil)) Currently translated at 94.0% (461 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index a58220f5..278e2167 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Jogadores Max", "bots": "Robos", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 8d347d8b266b63f7738e55637a0f254895e659ac Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:50 +0000 Subject: [PATCH 0080/1640] Translated using Weblate (Yue (Traditional)) Currently translated at 23.8% (117 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/ --- public/locales/yue/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index f08d6075..c7216daa 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 04ff0593798d4a51bcd4036fbdcf4a2ba03636a5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:48 +0000 Subject: [PATCH 0081/1640] Translated using Weblate (Finnish) Currently translated at 36.1% (177 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/ --- public/locales/fi/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index c62247cb..6d0f62c1 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 25d7fb893008dff5dbf7a7071fe0391398bc3314 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:49 +0000 Subject: [PATCH 0082/1640] Translated using Weblate (Telugu) Currently translated at 43.8% (215 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index a5de0ec0..adee9c1f 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "myPrs": "My PRs", + "approved": "Approved", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs" } } From 634e169d0dfb14e3be8fd39931391fdf196f4847 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:27 +0000 Subject: [PATCH 0083/1640] Translated using Weblate (Bulgarian) Currently translated at 9.3% (46 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index b3f77b74..f6a5a60a 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 40d6afcec2a866a13ff15f0cb5e763f61bd00a17 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:28 +0000 Subject: [PATCH 0084/1640] Translated using Weblate (Turkish) Currently translated at 80.2% (393 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/ --- public/locales/tr/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 7e3ab04a..c4c24e43 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed" } } From 6d403511ceb564f252dcdfcabc4cc488912796be Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:38 +0000 Subject: [PATCH 0085/1640] Translated using Weblate (Serbian) Currently translated at 1.8% (9 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/ --- public/locales/sr/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index caac0934..6af0ee76 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From c142991a21000b39ca94fdf43e42d94e49114ecf Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:39 +0000 Subject: [PATCH 0086/1640] Translated using Weblate (Arabic) Currently translated at 53.4% (262 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/ --- public/locales/ar/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 510d1bcb..b92975a0 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "approved": "Approved" } } From eb08d989adf54685f3a9cd82729963164877a62b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:20 +0000 Subject: [PATCH 0087/1640] Translated using Weblate (Czech) Currently translated at 90.6% (444 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/ --- public/locales/cs/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 8c2ef694..284431b8 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 8e41853d58e1ad8dd88437ad9d8bfb1c597b7454 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:17 +0000 Subject: [PATCH 0088/1640] Translated using Weblate (Danish) Currently translated at 40.2% (197 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/ --- public/locales/da/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 5b2910a3..2e6b2642 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From cc7b5350ac6653cf0a05a18a345b2042999fd655 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:18 +0000 Subject: [PATCH 0089/1640] Translated using Weblate (Malay) Currently translated at 51.2% (251 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/ --- public/locales/ms/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 6ad8ab4d..43cc59e2 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 291baa97b72a9074a6025cc841da13c99f58b8a2 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:19 +0000 Subject: [PATCH 0090/1640] Translated using Weblate (Hindi) Currently translated at 1.8% (9 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/ --- public/locales/hi/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 8fc94e29..c2d059cb 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "myPrs": "My PRs", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "approved": "Approved" } } From 0996cba02e5c710e94df7a7208a359fc3d64c606 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:21 +0000 Subject: [PATCH 0091/1640] Translated using Weblate (Esperanto) Currently translated at 29.5% (145 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/ --- public/locales/eo/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 4745402e..bc88d8ca 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From f6484bb23c38e3e70acdc46f72396696a30ce1fb Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:22 +0000 Subject: [PATCH 0092/1640] Translated using Weblate (Ukrainian) Currently translated at 97.7% (479 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/ --- public/locales/uk/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 06d3c8a4..ecdd721f 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Максимум гравців", "bots": "Ботів", "ping": "Пінг" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 5ec8a1204da87569ec24939d853c99f479313ac4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:20 +0000 Subject: [PATCH 0093/1640] Translated using Weblate (Japanese) Currently translated at 78.5% (385 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/ --- public/locales/ja/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 279fd0fa..93619bdc 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From e4e822a1e293101bebee700e9f8db9c7a43894e8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:23 +0000 Subject: [PATCH 0094/1640] Translated using Weblate (Latvian) Currently translated at 24.0% (118 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/ --- public/locales/lv/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 70d1fafc..d7f92ab6 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed" } } From 8aeff333d800aa71c27629ed01f59d53c3362b2d Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:12 +0000 Subject: [PATCH 0095/1640] Translated using Weblate (Thai) Currently translated at 9.5% (47 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/ --- public/locales/th/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 292a3992..5aab1684 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 9bbb28dbc2f6b1ae7d152e849bd9982a13fe8b74 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:42 +0000 Subject: [PATCH 0096/1640] Translated using Weblate (Slovak) Currently translated at 1.8% (9 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/ --- public/locales/sk/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 44ac0e7f..6c381759 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "succeeded": "Succeeded", + "notStarted": "Not Started", + "inProgress": "In Progress", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "failed": "Failed", + "canceled": "Canceled", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From fbf20d5b8e14ba75b7d6b5854f58916e13028f27 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:43 +0000 Subject: [PATCH 0097/1640] Translated using Weblate (Korean) Currently translated at 35.3% (173 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/ --- public/locales/ko/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 8e9af0e1..3eaeff63 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -664,5 +664,18 @@ "players": "Players", "maxPlayers": "Max players", "bots": "Bots" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 523909f63b9a2de1e4f8539beb785f4cb4677adb Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:14 +0000 Subject: [PATCH 0098/1640] Translated using Weblate (Greek) Currently translated at 29.1% (143 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/ --- public/locales/el/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 65d922fe..9329908d 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "myPrs": "My PRs", + "approved": "Approved", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs" } } From d3c0ad21900f75f95e2e45e5d09538fd2a3d3c27 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:24 +0000 Subject: [PATCH 0099/1640] Translated using Weblate (Slovenian) Currently translated at 96.1% (471 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/ --- public/locales/sl/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index d95f1192..31003e2c 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 1f0d1bc393764fd4e2c4a864ba55d3642dfd6300 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:15 +0000 Subject: [PATCH 0100/1640] Translated using Weblate (Indonesian) Currently translated at 4.8% (24 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/ --- public/locales/id/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 974857b4..80702d0a 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 2f4d4e52bede538f7a597932a90a263aa00349dd Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 05:18:52 +0000 Subject: [PATCH 0101/1640] Translated using Weblate (Basque) Currently translated at 6.7% (33 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eu/ --- public/locales/eu/common.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 3302d8be..6c1a495c 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -664,5 +664,18 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "azuredevops": { + "notStarted": "Not Started", + "result": "Result", + "status": "Status", + "buildId": "Build ID", + "succeeded": "Succeeded", + "failed": "Failed", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", + "approved": "Approved" } } From 992516cebdc7efeaaed375d60e47762d776d993a Mon Sep 17 00:00:00 2001 From: Stephen Donchez Date: Sun, 30 Jul 2023 10:19:31 -0400 Subject: [PATCH 0102/1640] Feature: UrBackup Widget (#1735) * Add initial UrBackup widget with counts of ok, errored, and out-of date clients * Add configurable number of days since last backup before a client is considered out-of-date * Don't count a lack of recent (or error free) image backup if image backup isn't supported. * Add support for reporting total disk usage * add support for "fields" from services.yaml * fix field filtering, syntax * Consolidate urbackup code, syntax changes * Revert pnpm changes * re-add urbackup-server-api --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- package.json | 1 + pnpm-lock.yaml | 45 +++++++++++++++ public/locales/en/common.json | 6 ++ src/widgets/components.js | 1 + src/widgets/urbackup/component.jsx | 93 ++++++++++++++++++++++++++++++ src/widgets/urbackup/proxy.js | 33 +++++++++++ src/widgets/urbackup/widget.js | 7 +++ src/widgets/widgets.js | 2 + 8 files changed, 188 insertions(+) create mode 100644 src/widgets/urbackup/component.jsx create mode 100644 src/widgets/urbackup/proxy.js create mode 100644 src/widgets/urbackup/widget.js diff --git a/package.json b/package.json index 8c774188..14fedf03 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "swr": "^1.3.0", "systeminformation": "^5.17.12", "tough-cookie": "^4.1.2", + "urbackup-server-api": "^0.8.9", "winston": "^3.8.2", "xml-js": "^1.6.11" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78cff342..a1231d8c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,6 +73,9 @@ dependencies: tough-cookie: specifier: ^4.1.2 version: 4.1.2 + urbackup-server-api: + specifier: ^0.8.9 + version: 0.8.9 winston: specifier: ^3.8.2 version: 3.8.2 @@ -659,6 +662,12 @@ packages: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} dev: true + /async-mutex@0.3.2: + resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} + dependencies: + tslib: 2.5.0 + dev: false + /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false @@ -2691,6 +2700,18 @@ packages: - babel-plugin-macros dev: false + /node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false @@ -3719,6 +3740,10 @@ packages: url-parse: 1.5.10 dev: false + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + /triple-beam@1.3.0: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} dev: false @@ -3822,6 +3847,15 @@ packages: picocolors: 1.0.0 dev: true + /urbackup-server-api@0.8.9: + resolution: {integrity: sha512-Igu6A0xSZeMsiN6PWT7zG4aD+iJR5fXT/j5+xwAvnD/vCNfvVrettIsXv6MftxOajvTmtlgaYu8KDoH1EJQ6DQ==} + dependencies: + async-mutex: 0.3.2 + node-fetch: 2.6.12 + transitivePeerDependencies: + - encoding + dev: false + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -3867,6 +3901,17 @@ packages: engines: {node: '>=0.10.0'} dev: false + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 66aa19ab..46d8e991 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -686,5 +686,11 @@ "maxPlayers": "Max players", "bots": "Bots", "ping": "Ping" + }, + "urbackup": { + "ok" : "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 0c372ce9..ddaca4cf 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -90,6 +90,7 @@ const components = { unifi: dynamic(() => import("./unifi/component")), unmanic: dynamic(() => import("./unmanic/component")), uptimekuma: dynamic(() => import("./uptimekuma/component")), + urbackup: dynamic(() => import("./urbackup/component")), watchtower: dynamic(() => import("./watchtower/component")), whatsupdocker: dynamic(() => import("./whatsupdocker/component")), xteve: dynamic(() => import("./xteve/component")), diff --git a/src/widgets/urbackup/component.jsx b/src/widgets/urbackup/component.jsx new file mode 100644 index 00000000..9b03b595 --- /dev/null +++ b/src/widgets/urbackup/component.jsx @@ -0,0 +1,93 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const Status = Object.freeze({ + ok: Symbol("Ok"), + errored: Symbol("Errored"), + noRecent: Symbol("No Recent Backups") +}); + +function hasRecentBackups(client, maxDays){ + const days = maxDays || 3; + const diffTime = days*24*60*60 // 7 days + const recentFile = (client.lastbackup > (Date.now() / 1000 - diffTime)); + const recentImage = ((client.lastbackup_image > (Date.now() / 1000 - diffTime)||client.image_not_supported)); + return (recentFile && recentImage); +} + +function determineStatuses(urbackupData) { + let ok = 0; + let errored = 0; + let noRecent = 0; + let status; + urbackupData.clientStatuses.forEach((client) => { + status = Status.noRecent; + if (hasRecentBackups(client, urbackupData.maxDays)) { + status = (client.file_ok && (client.image_ok || client.image_not_supported)) ? Status.ok : Status.errored; + } + switch (status) { + case Status.ok: + ok += 1; + break; + case Status.errored: + errored += 1; + break; + case Status.noRecent: + noRecent += 1; + break; + default: + break; + } + }); + + let totalUsage = false; + + // calculate total disk space if provided + if (urbackupData.diskUsage) { + totalUsage = 0.0; + urbackupData.diskUsage.forEach((client) => { + totalUsage += client.used; + }); + } + + return { ok, errored, noRecent, totalUsage }; +} + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const showDiskUsage = widget.fields?.includes('totalUsed') + + const { data: urbackupData, error: urbackupError } = useWidgetAPI(widget, "status"); + + if (urbackupError) { + return ; + } + + if (!urbackupData) { + return ( + + + + + {showDiskUsage && } + + ); + } + + const statusData = determineStatuses(urbackupData, widget); + + return ( + + + + + {showDiskUsage && } + + ); +} diff --git a/src/widgets/urbackup/proxy.js b/src/widgets/urbackup/proxy.js new file mode 100644 index 00000000..3075afd0 --- /dev/null +++ b/src/widgets/urbackup/proxy.js @@ -0,0 +1,33 @@ +import {UrbackupServer} from "urbackup-server-api"; + +import getServiceWidget from "utils/config/service-helpers"; + +export default async function urbackupProxyHandler(req, res) { + const {group, service} = req.query; + const serviceWidget = await getServiceWidget(group, service); + + const server = new UrbackupServer({ + url: serviceWidget.url, + username: serviceWidget.username, + password: serviceWidget.password + }); + +await (async () => { + try { + const allClients = await server.getStatus({includeRemoved: false}); + let diskUsage = false + if (serviceWidget.fields?.includes("totalUsed")) { + diskUsage = await server.getUsage(); + } + res.status(200).send({ + clientStatuses: allClients, + diskUsage, + maxDays: serviceWidget.maxDays + }); + } catch (error) { + res.status(500).json({ error: "Something Broke" }) + } + })(); + + +} diff --git a/src/widgets/urbackup/widget.js b/src/widgets/urbackup/widget.js new file mode 100644 index 00000000..5eac66d0 --- /dev/null +++ b/src/widgets/urbackup/widget.js @@ -0,0 +1,7 @@ +import urbackupProxyHandler from "./proxy"; + +const widget = { + proxyHandler: urbackupProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 14dc2cd2..46143447 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -87,6 +87,7 @@ import uptimekuma from "./uptimekuma/widget"; import watchtower from "./watchtower/widget"; import whatsupdocker from "./whatsupdocker/widget"; import xteve from "./xteve/widget"; +import urbackup from "./urbackup/widget"; const widgets = { adguard, @@ -177,6 +178,7 @@ const widgets = { unifi_console: unifi, unmanic, uptimekuma, + urbackup, watchtower, whatsupdocker, xteve, From 31ec795c610036598ff3fff7ffae78541c9efd42 Mon Sep 17 00:00:00 2001 From: Nonoss117 Date: Sun, 30 Jul 2023 05:30:50 +0000 Subject: [PATCH 0103/1640] Translated using Weblate (French) Currently translated at 100.0% (490 of 490 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 0b59f5aa..434483c4 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -666,16 +666,16 @@ "ping": "Ping" }, "azuredevops": { - "result": "Result", - "status": "Status", + "result": "Résultat", + "status": "Statut", "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", - "approved": "Approved" + "succeeded": "Réussi", + "notStarted": "Arrêté", + "failed": "Échoué", + "canceled": "Annulé", + "inProgress": "En cours", + "totalPrs": "PRs Total", + "myPrs": "Mes PRs", + "approved": "Approuvé" } } From e64a4108b2e9367bc2c49fd57468a42bead2b913 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:21 +0000 Subject: [PATCH 0104/1640] Translated using Weblate (German) Currently translated at 92.5% (457 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/ --- public/locales/de/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 079ba76a..2f6cc296 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -677,5 +677,11 @@ "myPrs": "My PRs", "approved": "Approved", "inProgress": "In Progress" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e957a033343fb044f5e386fa7eedd978edde162f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:21 +0000 Subject: [PATCH 0105/1640] Translated using Weblate (Spanish) Currently translated at 96.9% (479 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 788dd60f..69151731 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From ec12139da296fed16f58626a41a56baf842096bd Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:22 +0000 Subject: [PATCH 0106/1640] Translated using Weblate (French) Currently translated at 99.1% (490 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 434483c4..1f2ac278 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -677,5 +677,11 @@ "totalPrs": "PRs Total", "myPrs": "Mes PRs", "approved": "Approuvé" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From c3dce716ee0930d3afbb0f76672f7287fbb96592 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:22 +0000 Subject: [PATCH 0107/1640] Translated using Weblate (Portuguese) Currently translated at 84.0% (415 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/ --- public/locales/pt/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 8b645644..47644342 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -686,5 +686,11 @@ "inProgress": "In Progress", "totalPrs": "Total PRs", "myPrs": "My PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e4a4c64c2b2306c8d0232f53612ebcc22b02a99b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:16 +0000 Subject: [PATCH 0108/1640] Translated using Weblate (Russian) Currently translated at 86.2% (426 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/ --- public/locales/ru/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index f33f112a..879f4e2a 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From f1ad45a0101ac4ce6604c6ea90794a4f9b03a204 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:16 +0000 Subject: [PATCH 0109/1640] Translated using Weblate (Chinese (Simplified)) Currently translated at 89.8% (444 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/ --- public/locales/zh-CN/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 1cf467d2..404b7b79 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 791e9fd95a33c246c4be40b888c3c800d35a7ff3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:13 +0000 Subject: [PATCH 0110/1640] Translated using Weblate (Italian) Currently translated at 95.1% (470 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/ --- public/locales/it/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 67d19847..a59e1b51 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -677,5 +677,11 @@ "canceled": "Canceled", "inProgress": "In Progress", "totalPrs": "Total PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 0071cadfac5ece707bbadc57543e58c550b670d6 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:13 +0000 Subject: [PATCH 0111/1640] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?= =?UTF-8?q?gian=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 16.1% (80 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/ --- public/locales/nb-NO/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index d1d13c59..cfe46c8b 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 9053ef53f377cf38d14f1183d02b898a68fb5838 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:24 +0000 Subject: [PATCH 0112/1640] Translated using Weblate (Vietnamese) Currently translated at 8.9% (44 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/ --- public/locales/vi/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 7be92570..821a76e7 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 16ecd7b42600bcb62b0a1c3a5f203198ee3c9a53 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:14 +0000 Subject: [PATCH 0113/1640] Translated using Weblate (Dutch) Currently translated at 48.7% (241 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/ --- public/locales/nl/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 2f80472b..a595171d 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e5490fd5e8364116ff74c4d28ac39430187bfd88 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:18 +0000 Subject: [PATCH 0114/1640] Translated using Weblate (Chinese (Traditional)) Currently translated at 93.1% (460 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/ --- public/locales/zh-Hant/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 2a8c7474..ec8262e8 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 1a63587ceb244fde354dcae7343143d51088fc9b Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:15 +0000 Subject: [PATCH 0115/1640] Translated using Weblate (Catalan) Currently translated at 52.6% (260 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/ --- public/locales/ca/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 0f8507a3..c147aca3 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "totalUsed": "Used Storage", + "noRecent": "Out of Date" } } From 8138dd832d6f44fd8deecdb79b261e9ab1b9aad8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:08 +0000 Subject: [PATCH 0116/1640] Translated using Weblate (Polish) Currently translated at 75.7% (374 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/ --- public/locales/pl/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 9543cc08..9d02a103 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -677,5 +677,11 @@ "canceled": "Canceled", "inProgress": "In Progress", "totalPrs": "Total PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e338328c23ae103503dc015d124c0cd482e7b05c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:15 +0000 Subject: [PATCH 0117/1640] Translated using Weblate (Swedish) Currently translated at 26.7% (132 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/ --- public/locales/sv/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 9a236530..b570ad19 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -677,5 +677,11 @@ "inProgress": "In Progress", "totalPrs": "Total PRs", "myPrs": "My PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From ea8514fc19e2783b6bb2e2b4418f15cd3ff4e30a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:17 +0000 Subject: [PATCH 0118/1640] Translated using Weblate (Croatian) Currently translated at 95.1% (470 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/ --- public/locales/hr/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index c90d87fe..a8207463 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "noRecent": "Out of Date", + "totalUsed": "Used Storage", + "ok": "Ok", + "errored": "Errors" } } From aecf77c0ef957db880c9645c59ca0e668855867f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:19 +0000 Subject: [PATCH 0119/1640] Translated using Weblate (Hungarian) Currently translated at 95.3% (471 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/ --- public/locales/hu/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index f98ca9d3..d3afc9dc 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -677,5 +677,11 @@ "canceled": "Canceled", "inProgress": "In Progress", "totalPrs": "Total PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 1ae33d6925d1957e2a07ba882c749aedc7351b6c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:19 +0000 Subject: [PATCH 0120/1640] Translated using Weblate (Hebrew) Currently translated at 20.2% (100 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/ --- public/locales/he/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/he/common.json b/public/locales/he/common.json index cf504e8a..d7a9abb2 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -677,5 +677,11 @@ "myPrs": "My PRs", "totalPrs": "Total PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 59520e4a694c082c972e0c3cffb24ea99ac03147 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:17 +0000 Subject: [PATCH 0121/1640] Translated using Weblate (Romanian) Currently translated at 30.3% (150 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/ --- public/locales/ro/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 87e7620a..6378ef98 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -677,5 +677,11 @@ "succeeded": "Succeeded", "notStarted": "Not Started", "failed": "Failed" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 67608ef79fd157556be38b395defbe682cd71e72 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:17 +0000 Subject: [PATCH 0122/1640] Translated using Weblate (Portuguese (Brazil)) Currently translated at 93.3% (461 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/ --- public/locales/pt-BR/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 278e2167..63294bfa 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 0482e86cd18d574b8e281d52da761b096901b1d6 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:24 +0000 Subject: [PATCH 0123/1640] Translated using Weblate (Yue (Traditional)) Currently translated at 23.6% (117 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/ --- public/locales/yue/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index c7216daa..ac44d34f 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From f5d1ae2c4e3c4f8860e04d7570d988826f367072 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:23 +0000 Subject: [PATCH 0124/1640] Translated using Weblate (Finnish) Currently translated at 35.8% (177 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/ --- public/locales/fi/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index 6d0f62c1..b4f3eead 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From d935cb35bf96c75f4c458d0fa203544839aeb962 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:23 +0000 Subject: [PATCH 0125/1640] Translated using Weblate (Telugu) Currently translated at 43.5% (215 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/ --- public/locales/te/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/te/common.json b/public/locales/te/common.json index adee9c1f..8a430982 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -677,5 +677,11 @@ "canceled": "Canceled", "inProgress": "In Progress", "totalPrs": "Total PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 1666034f1f109be680855b9e8fd41ec5b3564d1f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:13 +0000 Subject: [PATCH 0126/1640] Translated using Weblate (Bulgarian) Currently translated at 9.3% (46 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/ --- public/locales/bg/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index f6a5a60a..630136f2 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 7a18ec05f18e24e6099db6f82d6df0ffc8444d21 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:14 +0000 Subject: [PATCH 0127/1640] Translated using Weblate (Turkish) Currently translated at 79.5% (393 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/ --- public/locales/tr/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index c4c24e43..206d1a6b 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -677,5 +677,11 @@ "succeeded": "Succeeded", "notStarted": "Not Started", "failed": "Failed" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 4b752bb63a0c7aa0457d897ceb2a18840add0422 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:18 +0000 Subject: [PATCH 0128/1640] Translated using Weblate (Serbian) Currently translated at 1.8% (9 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/ --- public/locales/sr/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 6af0ee76..2a50f318 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 70ab3984320883232e3b160ccf4abf9253d486b5 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:19 +0000 Subject: [PATCH 0129/1640] Translated using Weblate (Arabic) Currently translated at 53.0% (262 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/ --- public/locales/ar/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index b92975a0..e4fc6b74 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -677,5 +677,11 @@ "failed": "Failed", "canceled": "Canceled", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From ee4b0ca450e5aeb8880af5ef9c3050a97cd712d4 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:11 +0000 Subject: [PATCH 0130/1640] Translated using Weblate (Czech) Currently translated at 89.8% (444 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/ --- public/locales/cs/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 284431b8..a74e5633 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 94b2c9c8228266016baa0adb9560e8336a1147f7 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:09 +0000 Subject: [PATCH 0131/1640] Translated using Weblate (Danish) Currently translated at 39.8% (197 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/ --- public/locales/da/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 2e6b2642..ba89a64f 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From c987df8f81253be6f1d7fdc24c2edbbc95429b28 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:09 +0000 Subject: [PATCH 0132/1640] Translated using Weblate (Malay) Currently translated at 50.8% (251 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/ --- public/locales/ms/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 43cc59e2..ca587492 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 00b0265350931bfa1cecfd37454d1e5ea8c6da7d Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:10 +0000 Subject: [PATCH 0133/1640] Translated using Weblate (Hindi) Currently translated at 1.8% (9 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/ --- public/locales/hi/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index c2d059cb..649daf0c 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -677,5 +677,11 @@ "inProgress": "In Progress", "totalPrs": "Total PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e884707bfc02e2b498a57a225507b1ae27f5a34c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:11 +0000 Subject: [PATCH 0134/1640] Translated using Weblate (Esperanto) Currently translated at 29.3% (145 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/ --- public/locales/eo/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index bc88d8ca..072f964a 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 32d803c54b97c8b820161c7ca305db19b2a09fc2 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:11 +0000 Subject: [PATCH 0135/1640] Translated using Weblate (Ukrainian) Currently translated at 96.9% (479 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/ --- public/locales/uk/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index ecdd721f..f781b020 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 34bea0c0768d6a65c34f35be4b75c97a24b7abc0 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:10 +0000 Subject: [PATCH 0136/1640] Translated using Weblate (Japanese) Currently translated at 77.9% (385 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/ --- public/locales/ja/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 93619bdc..9b0dd6cf 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 962c34508370d0637dcb543ff0419d888c4a3e00 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:12 +0000 Subject: [PATCH 0137/1640] Translated using Weblate (Latvian) Currently translated at 23.8% (118 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/ --- public/locales/lv/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index d7f92ab6..c0774218 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -677,5 +677,11 @@ "succeeded": "Succeeded", "notStarted": "Not Started", "failed": "Failed" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From d2d2041dd197b69bc8613ca43d9e16bef37b255a Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:07 +0000 Subject: [PATCH 0138/1640] Translated using Weblate (Thai) Currently translated at 9.5% (47 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/ --- public/locales/th/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 5aab1684..7bd69133 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From f3eefd917c93a40a6931fc7d502b2ea43f4bea28 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:20 +0000 Subject: [PATCH 0139/1640] Translated using Weblate (Slovak) Currently translated at 1.8% (9 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/ --- public/locales/sk/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 6c381759..0479ae26 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From a4b5cb490c3a1d15ae239a09a25e2894d3a8767f Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:20 +0000 Subject: [PATCH 0140/1640] Translated using Weblate (Korean) Currently translated at 35.0% (173 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/ --- public/locales/ko/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 3eaeff63..c1f86678 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 43ee714fb06552a0649bd4bd5e628a50e22fa268 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:07 +0000 Subject: [PATCH 0141/1640] Translated using Weblate (Greek) Currently translated at 28.9% (143 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/ --- public/locales/el/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 9329908d..96b593ce 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -677,5 +677,11 @@ "canceled": "Canceled", "inProgress": "In Progress", "totalPrs": "Total PRs" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From e9c7118e53d532eb63858c72130d57fdafc1af01 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:12 +0000 Subject: [PATCH 0142/1640] Translated using Weblate (Slovenian) Currently translated at 95.3% (471 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/ --- public/locales/sl/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 31003e2c..ff0b6a16 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From f7aa4f13c8e3c4decf640dfc0fc23dff49cf0e84 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:08 +0000 Subject: [PATCH 0143/1640] Translated using Weblate (Indonesian) Currently translated at 4.8% (24 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/ --- public/locales/id/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 80702d0a..2e7682c9 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 62e294a715757ead084677e9e4a2341ab473f0d8 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Sun, 30 Jul 2023 14:20:24 +0000 Subject: [PATCH 0144/1640] Translated using Weblate (Basque) Currently translated at 6.6% (33 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eu/ --- public/locales/eu/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 6c1a495c..2c709217 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -677,5 +677,11 @@ "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Approved" + }, + "urbackup": { + "ok": "Ok", + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" } } From 206e5034c509d67b47e53e0fac456d70a0215684 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:22:30 -0700 Subject: [PATCH 0145/1640] Include default resource refresh rate --- src/components/widgets/resources/resources.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx index 7b226ecb..1a88157e 100644 --- a/src/components/widgets/resources/resources.jsx +++ b/src/components/widgets/resources/resources.jsx @@ -10,6 +10,7 @@ import Uptime from "./uptime"; export default function Resources({ options }) { const { expanded, units } = options; let { refresh } = options; + if (!refresh) refresh = 1500; refresh = Math.max(refresh, 1000); return From 45ee37c86d3bfc584e85ab5495ad806f73699fcb Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 31 Jul 2023 08:31:15 -0700 Subject: [PATCH 0146/1640] Fix for usage bar percent is 0 --- src/components/widgets/widget/resource.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/widgets/widget/resource.jsx b/src/components/widgets/widget/resource.jsx index 18e7c800..7ca50367 100644 --- a/src/components/widgets/widget/resource.jsx +++ b/src/components/widgets/widget/resource.jsx @@ -15,7 +15,7 @@ export default function Resource({ children, icon, value, label, expandedValue =
{expandedLabel}
} - { percentage && } + { percentage >= 0 && } { children } ; From 804d9f66deca59b60a3dafbc48b6b6c17d99680a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 31 Jul 2023 09:01:55 -0700 Subject: [PATCH 0147/1640] Fix authentik queries --- src/widgets/authentik/widget.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/authentik/widget.js b/src/widgets/authentik/widget.js index 7a7b532f..051c2514 100644 --- a/src/widgets/authentik/widget.js +++ b/src/widgets/authentik/widget.js @@ -9,10 +9,10 @@ const widget = { endpoint: "core/users?page_size=1", }, login: { - endpoint: "events/events/per_month/?action=login&query={}", + endpoint: "events/events/per_month/?action=login", }, login_failed: { - endpoint: "events/events/per_month/?action=login_failed&query={}", + endpoint: "events/events/per_month/?action=login_failed", }, }, }; From 302bff865c24c0ca1ca012f05434d20228c428d7 Mon Sep 17 00:00:00 2001 From: Nonoss117 Date: Sun, 30 Jul 2023 15:12:12 +0000 Subject: [PATCH 0148/1640] Translated using Weblate (French) Currently translated at 100.0% (494 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/ --- public/locales/fr/common.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 1f2ac278..29c563c2 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -680,8 +680,8 @@ }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Erreurs", + "noRecent": "Obsolète", + "totalUsed": "Esp. Utilisé" } } From 9aba70d214d7f3a5b7c66b58fd1482ed19f9d17a Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 1 Aug 2023 03:54:19 +0300 Subject: [PATCH 0149/1640] glances widget test 1 --- package.json | 1 + pnpm-lock.yaml | 260 ++++++++++++++++++++++- public/locales/en/common.json | 5 +- src/components/services/item.jsx | 10 +- src/utils/config/service-helpers.js | 6 +- src/utils/proxy/handlers/credentialed.js | 2 + src/widgets/components.js | 1 + src/widgets/glances/chart.jsx | 46 ++++ src/widgets/glances/chart_dual.jsx | 61 ++++++ src/widgets/glances/component.jsx | 34 +++ src/widgets/glances/cpu.jsx | 100 +++++++++ src/widgets/glances/custom_tooltip.jsx | 15 ++ src/widgets/glances/disk.jsx | 113 ++++++++++ src/widgets/glances/memory.jsx | 96 +++++++++ src/widgets/glances/net.jsx | 96 +++++++++ src/widgets/glances/process.jsx | 72 +++++++ src/widgets/glances/sensor.jsx | 99 +++++++++ src/widgets/glances/widget.js | 8 + src/widgets/widgets.js | 2 + 19 files changed, 1018 insertions(+), 9 deletions(-) create mode 100644 src/widgets/glances/chart.jsx create mode 100644 src/widgets/glances/chart_dual.jsx create mode 100644 src/widgets/glances/component.jsx create mode 100644 src/widgets/glances/cpu.jsx create mode 100644 src/widgets/glances/custom_tooltip.jsx create mode 100644 src/widgets/glances/disk.jsx create mode 100644 src/widgets/glances/memory.jsx create mode 100644 src/widgets/glances/net.jsx create mode 100644 src/widgets/glances/process.jsx create mode 100644 src/widgets/glances/sensor.jsx create mode 100644 src/widgets/glances/widget.js diff --git a/package.json b/package.json index 14fedf03..fd9965fd 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.4.0", + "recharts": "^2.7.2", "shvl": "^3.0.0", "swr": "^1.3.0", "systeminformation": "^5.17.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1231d8c..d5f41294 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: '@headlessui/react': specifier: ^1.7.2 @@ -61,6 +65,9 @@ dependencies: react-icons: specifier: ^4.4.0 version: 4.8.0(react@18.2.0) + recharts: + specifier: ^2.7.2 + version: 2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) shvl: specifier: ^3.0.0 version: 3.0.0 @@ -435,6 +442,48 @@ packages: tailwindcss: 3.3.0(postcss@8.4.21) dev: true + /@types/d3-array@3.0.5: + resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==} + dev: false + + /@types/d3-color@3.1.0: + resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==} + dev: false + + /@types/d3-ease@3.0.0: + resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} + dev: false + + /@types/d3-interpolate@3.0.1: + resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==} + dependencies: + '@types/d3-color': 3.1.0 + dev: false + + /@types/d3-path@3.0.0: + resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==} + dev: false + + /@types/d3-scale@4.0.3: + resolution: {integrity: sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==} + dependencies: + '@types/d3-time': 3.0.0 + dev: false + + /@types/d3-shape@3.1.1: + resolution: {integrity: sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==} + dependencies: + '@types/d3-path': 3.0.0 + dev: false + + /@types/d3-time@3.0.0: + resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==} + dev: false + + /@types/d3-timer@3.0.0: + resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} + dev: false + /@types/hoist-non-react-statics@3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: @@ -785,6 +834,7 @@ packages: /buildcheck@0.0.3: resolution: {integrity: sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==} engines: {node: '>=10.0.0'} + requiresBuild: true dev: false optional: true @@ -1020,6 +1070,10 @@ packages: nth-check: 2.1.1 dev: false + /css-unit-converter@1.1.2: + resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} + dev: false + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -1034,6 +1088,77 @@ packages: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} dev: false + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true @@ -1067,6 +1192,10 @@ packages: dependencies: ms: 2.1.2 + /decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + dev: false + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -1175,6 +1304,12 @@ packages: esutils: 2.0.3 dev: true + /dom-helpers@3.4.0: + resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + dependencies: + '@babel/runtime': 7.21.0 + dev: false + /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -1654,6 +1789,10 @@ packages: deprecated: Use promise-toolbox/fromEvent instead dev: false + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + /execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -1685,6 +1824,11 @@ packages: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + dev: false + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -2158,6 +2302,11 @@ packages: side-channel: 1.0.4 dev: true + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -2361,6 +2510,7 @@ packages: /jose@4.13.1: resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} + requiresBuild: true dev: false optional: true @@ -2480,6 +2630,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + /logform@2.5.1: resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} dependencies: @@ -2623,6 +2777,7 @@ packages: /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + requiresBuild: true dev: false optional: true @@ -2755,11 +2910,11 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true /object-hash@2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} + requiresBuild: true dev: false optional: true @@ -2832,6 +2987,7 @@ packages: /oidc-token-hash@5.0.1: resolution: {integrity: sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==} engines: {node: ^10.13.0 || >=12.0.0} + requiresBuild: true dev: false optional: true @@ -3023,6 +3179,10 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-value-parser@3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} + dev: false + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -3077,7 +3237,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -3162,6 +3321,49 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + /react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + dev: false + + /react-resize-detector@8.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-smooth@2.0.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==} + peerDependencies: + prop-types: ^15.6.0 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + fast-equals: 5.0.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) + dev: false + + /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + peerDependencies: + react: '>=15.0.0' + react-dom: '>=15.0.0' + dependencies: + dom-helpers: 3.4.0 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -3212,6 +3414,34 @@ packages: picomatch: 2.3.1 dev: true + /recharts-scale@0.4.5: + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} + dependencies: + decimal.js-light: 2.5.1 + dev: false + + /recharts@2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==} + engines: {node: '>=12'} + peerDependencies: + prop-types: ^15.6.0 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + classnames: 2.3.2 + eventemitter3: 4.0.7 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 16.13.1 + react-resize-detector: 8.1.0(react-dom@18.2.0)(react@18.2.0) + react-smooth: 2.0.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + recharts-scale: 0.4.5 + reduce-css-calc: 2.1.8 + victory-vendor: 36.6.11 + dev: false + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -3219,6 +3449,13 @@ packages: resolve: 1.22.1 dev: false + /reduce-css-calc@2.1.8: + resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==} + dependencies: + css-unit-converter: 1.1.2 + postcss-value-parser: 3.3.1 + dev: false + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} @@ -3896,6 +4133,25 @@ packages: extsprintf: 1.3.0 dev: false + /victory-vendor@36.6.11: + resolution: {integrity: sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==} + dependencies: + '@types/d3-array': 3.0.5 + '@types/d3-ease': 3.0.0 + '@types/d3-interpolate': 3.0.1 + '@types/d3-scale': 4.0.3 + '@types/d3-shape': 3.1.1 + '@types/d3-time': 3.0.0 + '@types/d3-timer': 3.0.0 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + dev: false + /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 46d8e991..7a8fe023 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -371,7 +371,10 @@ "free": "Free", "used": "Used", "days": "d", - "hours": "h" + "hours": "h", + "crit": "Crit", + "read": "Read", + "write": "Write" }, "quicklaunch": { "bookmark": "Bookmark", diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 36e454ce..a5743fb1 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -34,9 +34,9 @@ export default function Item({ service, group }) {
-
+
{service.icon && (hasLink ? ( -
+
{service.name}

{service.description}

) : (
-
+
{service.name}

{service.description}

)} -
+
{service.ping && (
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 92fa7b22..1e241e46 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -294,7 +294,8 @@ export function cleanServiceGroups(groups) { snapshotHost, // kopia snapshotPath, userEmail, // azuredevops - repositoryId + repositoryId, + metric, // glances } = cleanedService.widget; let fieldsList = fields; @@ -358,6 +359,9 @@ export function cleanServiceGroups(groups) { if (snapshotHost) cleanedService.widget.snapshotHost = snapshotHost; if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath; } + if (type === "glances") { + if (metric) cleanedService.widget.metric = metric; + } } return cleanedService; diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 498c0d6d..d0321cb8 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -64,6 +64,8 @@ export default async function credentialedProxyHandler(req, res, map) { } else if (widget.type === "azuredevops") { headers.Authorization = `Basic ${Buffer.from(`$:${widget.key}`).toString("base64")}`; + } else if (widget.type === "glances") { + headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`; } else { headers["X-API-Key"] = `${widget.key}`; } diff --git a/src/widgets/components.js b/src/widgets/components.js index ddaca4cf..851322e7 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -24,6 +24,7 @@ const components = { freshrss: dynamic(() => import("./freshrss/component")), gamedig: dynamic(() => import("./gamedig/component")), ghostfolio: dynamic(() => import("./ghostfolio/component")), + glances: dynamic(() => import("./glances/component")), gluetun: dynamic(() => import("./gluetun/component")), gotify: dynamic(() => import("./gotify/component")), grafana: dynamic(() => import("./grafana/component")), diff --git a/src/widgets/glances/chart.jsx b/src/widgets/glances/chart.jsx new file mode 100644 index 00000000..448bb99b --- /dev/null +++ b/src/widgets/glances/chart.jsx @@ -0,0 +1,46 @@ +import { PureComponent } from "react"; +import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; + +import CustomTooltip from "./custom_tooltip"; + +class Chart extends PureComponent { + render() { + const { dataPoints, formatter, label } = this.props; + + return ( +
+ + + + + + + + + + } + classNames="rounded-md text-xs p-0.5" + contentStyle={{ + backgroundColor: "rgb(var(--color-800))", + color: "rgb(var(--color-100))" + }} + /> + + +
+ ); + } +} + +export default Chart; diff --git a/src/widgets/glances/chart_dual.jsx b/src/widgets/glances/chart_dual.jsx new file mode 100644 index 00000000..ceecacba --- /dev/null +++ b/src/widgets/glances/chart_dual.jsx @@ -0,0 +1,61 @@ +import { PureComponent } from "react"; +import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; + +import CustomTooltip from "./custom_tooltip"; + +class ChartDual extends PureComponent { + render() { + const { dataPoints, formatter, stack, label } = this.props; + + return ( +
+ + + + + + + + + + + + + + + + } + classNames="rounded-md text-xs p-0.5" + contentStyle={{ + backgroundColor: "rgb(var(--color-800))", + color: "rgb(var(--color-100))" + }} + + /> + + +
+ ); + } +} + +export default ChartDual; diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx new file mode 100644 index 00000000..5eeff280 --- /dev/null +++ b/src/widgets/glances/component.jsx @@ -0,0 +1,34 @@ +import Memory from "./memory"; +import Cpu from "./cpu"; +import Sensor from "./sensor"; +import Net from "./net"; +import Process from "./process"; +import Disk from "./disk"; + +export default function Component({ service }) { + const { widget } = service; + + if (widget.metric === "memory") { + return ; + } + + if (widget.metric === "process") { + return ; + } + + if (widget.metric.match(/^network:/)) { + return ; + } + + if (widget.metric.match(/^sensor:/)) { + return ; + } + + if (widget.metric.match(/^disk:/)) { + return ; + } + + if (widget.metric === "cpu") { + return ; + } +} diff --git a/src/widgets/glances/cpu.jsx b/src/widgets/glances/cpu.jsx new file mode 100644 index 00000000..daec91e0 --- /dev/null +++ b/src/widgets/glances/cpu.jsx @@ -0,0 +1,100 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const Chart = dynamic(() => import("./chart"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'cpu', { + refreshInterval: 1000, + }); + + const { data: systemData, error: systemError } = useWidgetAPI(service.widget, 'system'); + + useEffect(() => { + if (data) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { value: data.total }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data]); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + + if (!data) { + return
+
+
+ - +
+
+
; + } + + return ( + <> +
+ t("common.number", { + value, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} + /> +
+
+ {systemData && !systemError && ( + <> + {systemData.linux_distro && ( +
+ {systemData.linux_distro} +
+ )} + {systemData.os_version && ( +
+ {systemData.os_version} +
+ )} + {systemData.hostname && ( +
+ {systemData.hostname} +
+ )} + + )} +
+
+ {t("common.number", { + value: data.total, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} {t("resources.used")} +
+
+ + ); +} diff --git a/src/widgets/glances/custom_tooltip.jsx b/src/widgets/glances/custom_tooltip.jsx new file mode 100644 index 00000000..ef3881ef --- /dev/null +++ b/src/widgets/glances/custom_tooltip.jsx @@ -0,0 +1,15 @@ +export default function Tooltip({ active, payload, formatter }) { + if (active && payload && payload.length) { + return ( +
+ {payload.map((pld, id) => ( +
+
{formatter(pld.value)} {payload[id].name}
+
+ ))} +
+ ); + } + + return null; +}; diff --git a/src/widgets/glances/disk.jsx b/src/widgets/glances/disk.jsx new file mode 100644 index 00000000..7ad783ac --- /dev/null +++ b/src/widgets/glances/disk.jsx @@ -0,0 +1,113 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const [, diskName] = widget.metric.split(':'); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ read_bytes: 0, write_bytes: 0, time_since_update: 0 }, 0, pointsLimit)); + const [ratePoints, setRatePoints] = useState(new Array(pointsLimit).fill({ a: 0, b: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'diskio', { + refreshInterval: 1000, + }); + + const calculateRates = (d) => d.map(item => ({ + a: item.read_bytes / item.time_since_update, + b: item.write_bytes / item.time_since_update + })); + + useEffect(() => { + if (data) { + const diskData = data.find((item) => item.disk_name === diskName); + + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, diskData]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data, diskName]); + + useEffect(() => { + setRatePoints(calculateRates(dataPoints)); + }, [dataPoints]); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + + if (!data) { + return
+
+
+ - +
+
+
; + } + + const diskData = data.find((item) => item.disk_name === diskName); + + if (!diskData) { + return
+
+
; + } + + const diskRates = calculateRates(dataPoints); + const currentRate = diskRates[diskRates.length - 1]; + + return ( + <> +
+ t("common.bitrate", { + value, + })} + /> +
+
+ {currentRate && !error && ( + <> +
+ {t("common.bitrate", { + value: currentRate.a, + })} {t("glances.read")} +
+
+ {t("common.bitrate", { + value: currentRate.b, + })} {t("glances.write")} +
+ + )} +
+
+ {t("common.bitrate", { + value: currentRate.a + currentRate.b, + })} +
+
+ + ); +} diff --git a/src/widgets/glances/memory.jsx b/src/widgets/glances/memory.jsx new file mode 100644 index 00000000..0e6002ee --- /dev/null +++ b/src/widgets/glances/memory.jsx @@ -0,0 +1,96 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'mem', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { a: data.used, b: data.free }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data]); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + if (!data) { + return
+
+
+ - +
+
+
; + } + + return ( + <> +
+ t("common.bytes", { + value, + maximumFractionDigits: 0, + })} + /> +
+
+ {data && !error && ( + <> + {data.free && ( +
+ {t("common.bytes", { + value: data.free, + maximumFractionDigits: 0, + })} {t("resources.free")} +
+ )} + + {data.total && ( +
+ {t("common.bytes", { + value: data.total, + maximumFractionDigits: 0, + })} {t("resources.total")} +
+ )} + + )} +
+
+ {t("common.bytes", { + value: data.used, + maximumFractionDigits: 0, + })} {t("resources.used")} +
+
+ + ); +} diff --git a/src/widgets/glances/net.jsx b/src/widgets/glances/net.jsx new file mode 100644 index 00000000..a630ae74 --- /dev/null +++ b/src/widgets/glances/net.jsx @@ -0,0 +1,96 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const [, interfaceName] = widget.metric.split(':'); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(widget, 'network', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + const interfaceData = data.find((item) => item[item.key] === interfaceName); + + if (interfaceData) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { a: interfaceData.tx, b: interfaceData.rx }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + } + }, [data, interfaceName]); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + if (!data) { + return
+
+
+ - +
+
+
; + } + const interfaceData = data.find((item) => item[item.key] === interfaceName); + + if (!interfaceData) { + return
+
+
; + } + + return ( + <> +
+ t("common.byterate", { + value, + maximumFractionDigits: 0, + })} + /> +
+
+ {interfaceData && interfaceData.interface_name && ( +
+ {interfaceData.interface_name} +
+ )} + {t("common.bitrate", { + value: interfaceData.tx, + maximumFractionDigits: 0, + })} {t("docker.tx")} +
+
+ {t("common.bitrate", { + value: interfaceData.rx, + maximumFractionDigits: 0, + })} {t("docker.rx")} +
+
+ + ); +} diff --git a/src/widgets/glances/process.jsx b/src/widgets/glances/process.jsx new file mode 100644 index 00000000..7d9785e6 --- /dev/null +++ b/src/widgets/glances/process.jsx @@ -0,0 +1,72 @@ +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; +import ResolvedIcon from "components/resolvedicon"; + +const statusMap = { + "R": , // running + "S": , // sleeping + "D": , // disk sleep + "Z": , // zombie + "T": , // traced + "t": , // traced + "X": , // dead +}; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { data, error } = useWidgetAPI(service.widget, 'processlist', { + refreshInterval: 1000, + }); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + + if (!data) { + return
+
+
+ - +
+
+
; + } + + data.splice(5); + + return ( + <> +
+
+
+
{t("resources.cpu")}
+
{t("resources.mem")}
+
+
+
+ { data.map((item) =>
+
+
+ {statusMap[item.status]} +
+
{item.name}
+
{item.cpu_percent.toFixed(1)}%
+
{t("common.bytes", { + value: item.memory_info[0], + maximumFractionDigits: 0, + })}
+
+
) } +
+
+ + ); +} diff --git a/src/widgets/glances/sensor.jsx b/src/widgets/glances/sensor.jsx new file mode 100644 index 00000000..32d01eb2 --- /dev/null +++ b/src/widgets/glances/sensor.jsx @@ -0,0 +1,99 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const Chart = dynamic(() => import("./chart"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const [, sensorName] = widget.metric.split(':'); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'sensors', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + const sensorData = data.find((item) => item.label === sensorName); + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { value: sensorData.value }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data, sensorName]); + + if (error) { + return
+
+
+ {t("widget.api_error")} +
+
+
; + } + + if (!data) { + return
+
+
+ - +
+
+
; + } + + const sensorData = data.find((item) => item.label === sensorName); + + if (!sensorData) { + return
+
+
; + } + + return ( + <> +
+ t("common.number", { + value, + })} + /> +
+
+ {sensorData && !error && ( + <> + {sensorData.warning && ( +
+ {sensorData.warning}{sensorData.unit} {t("glances.warn")} +
+ )} + {sensorData.critical && ( +
+ {sensorData.critical} {sensorData.unit} {t("glances.crit")} +
+ )} + + )} +
+
+ {t("common.number", { + value: sensorData.value, + })} {sensorData.unit} +
+
+ + ); +} diff --git a/src/widgets/glances/widget.js b/src/widgets/glances/widget.js new file mode 100644 index 00000000..3da1c6d1 --- /dev/null +++ b/src/widgets/glances/widget.js @@ -0,0 +1,8 @@ +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; + +const widget = { + api: "{url}/api/3/{endpoint}", + proxyHandler: credentialedProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 46143447..41a31253 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -19,6 +19,7 @@ import flood from "./flood/widget"; import freshrss from "./freshrss/widget"; import gamedig from "./gamedig/widget"; import ghostfolio from "./ghostfolio/widget"; +import glances from "./glances/widget"; import gluetun from "./gluetun/widget"; import gotify from "./gotify/widget"; import grafana from "./grafana/widget"; @@ -111,6 +112,7 @@ const widgets = { freshrss, gamedig, ghostfolio, + glances, gluetun, gotify, grafana, From b77909a360c3d4329fa4a3ec90c1f3add5f1c67b Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 1 Aug 2023 13:05:17 +0300 Subject: [PATCH 0150/1640] refactor widget --- src/widgets/glances/chart.jsx | 46 -------- src/widgets/glances/chart_dual.jsx | 61 ----------- src/widgets/glances/component.jsx | 12 +-- src/widgets/glances/components/block.jsx | 9 ++ src/widgets/glances/components/chart.jsx | 48 +++++++++ src/widgets/glances/components/chart_dual.jsx | 63 +++++++++++ src/widgets/glances/components/container.jsx | 8 ++ .../{ => components}/custom_tooltip.jsx | 0 src/widgets/glances/components/error.jsx | 9 ++ src/widgets/glances/cpu.jsx | 100 ------------------ src/widgets/glances/memory.jsx | 96 ----------------- src/widgets/glances/metrics/cpu.jsx | 91 ++++++++++++++++ src/widgets/glances/{ => metrics}/disk.jsx | 91 +++++++--------- src/widgets/glances/metrics/memory.jsx | 88 +++++++++++++++ src/widgets/glances/{ => metrics}/net.jsx | 84 +++++++-------- src/widgets/glances/{ => metrics}/process.jsx | 46 ++++---- src/widgets/glances/metrics/sensor.jsx | 88 +++++++++++++++ src/widgets/glances/sensor.jsx | 99 ----------------- 18 files changed, 510 insertions(+), 529 deletions(-) delete mode 100644 src/widgets/glances/chart.jsx delete mode 100644 src/widgets/glances/chart_dual.jsx create mode 100644 src/widgets/glances/components/block.jsx create mode 100644 src/widgets/glances/components/chart.jsx create mode 100644 src/widgets/glances/components/chart_dual.jsx create mode 100644 src/widgets/glances/components/container.jsx rename src/widgets/glances/{ => components}/custom_tooltip.jsx (100%) create mode 100644 src/widgets/glances/components/error.jsx delete mode 100644 src/widgets/glances/cpu.jsx delete mode 100644 src/widgets/glances/memory.jsx create mode 100644 src/widgets/glances/metrics/cpu.jsx rename src/widgets/glances/{ => metrics}/disk.jsx (50%) create mode 100644 src/widgets/glances/metrics/memory.jsx rename src/widgets/glances/{ => metrics}/net.jsx (50%) rename src/widgets/glances/{ => metrics}/process.jsx (60%) create mode 100644 src/widgets/glances/metrics/sensor.jsx delete mode 100644 src/widgets/glances/sensor.jsx diff --git a/src/widgets/glances/chart.jsx b/src/widgets/glances/chart.jsx deleted file mode 100644 index 448bb99b..00000000 --- a/src/widgets/glances/chart.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; - -import CustomTooltip from "./custom_tooltip"; - -class Chart extends PureComponent { - render() { - const { dataPoints, formatter, label } = this.props; - - return ( -
- - - - - - - - - - } - classNames="rounded-md text-xs p-0.5" - contentStyle={{ - backgroundColor: "rgb(var(--color-800))", - color: "rgb(var(--color-100))" - }} - /> - - -
- ); - } -} - -export default Chart; diff --git a/src/widgets/glances/chart_dual.jsx b/src/widgets/glances/chart_dual.jsx deleted file mode 100644 index ceecacba..00000000 --- a/src/widgets/glances/chart_dual.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; - -import CustomTooltip from "./custom_tooltip"; - -class ChartDual extends PureComponent { - render() { - const { dataPoints, formatter, stack, label } = this.props; - - return ( -
- - - - - - - - - - - - - - - - } - classNames="rounded-md text-xs p-0.5" - contentStyle={{ - backgroundColor: "rgb(var(--color-800))", - color: "rgb(var(--color-100))" - }} - - /> - - -
- ); - } -} - -export default ChartDual; diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx index 5eeff280..4fa1a9ff 100644 --- a/src/widgets/glances/component.jsx +++ b/src/widgets/glances/component.jsx @@ -1,9 +1,9 @@ -import Memory from "./memory"; -import Cpu from "./cpu"; -import Sensor from "./sensor"; -import Net from "./net"; -import Process from "./process"; -import Disk from "./disk"; +import Memory from "./metrics/memory"; +import Cpu from "./metrics/cpu"; +import Sensor from "./metrics/sensor"; +import Net from "./metrics/net"; +import Process from "./metrics/process"; +import Disk from "./metrics/disk"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/glances/components/block.jsx b/src/widgets/glances/components/block.jsx new file mode 100644 index 00000000..73cf86c9 --- /dev/null +++ b/src/widgets/glances/components/block.jsx @@ -0,0 +1,9 @@ +export default function Block({ position, children }) { + const positionClasses = Object.entries(position).map(([key, value]) => `${key}-${value}`).join(' '); + + return ( +
+ {children} +
+ ); +} diff --git a/src/widgets/glances/components/chart.jsx b/src/widgets/glances/components/chart.jsx new file mode 100644 index 00000000..2cd01107 --- /dev/null +++ b/src/widgets/glances/components/chart.jsx @@ -0,0 +1,48 @@ +import { PureComponent } from "react"; +import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; + +import CustomTooltip from "./custom_tooltip"; + +class Chart extends PureComponent { + render() { + const { dataPoints, formatter, label } = this.props; + + return ( +
+
+ + + + + + + + + + } + classNames="rounded-md text-xs p-0.5" + contentStyle={{ + backgroundColor: "rgb(var(--color-800))", + color: "rgb(var(--color-100))" + }} + /> + + +
+
+ ); + } +} + +export default Chart; diff --git a/src/widgets/glances/components/chart_dual.jsx b/src/widgets/glances/components/chart_dual.jsx new file mode 100644 index 00000000..14f5e4e6 --- /dev/null +++ b/src/widgets/glances/components/chart_dual.jsx @@ -0,0 +1,63 @@ +import { PureComponent } from "react"; +import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; + +import CustomTooltip from "./custom_tooltip"; + +class ChartDual extends PureComponent { + render() { + const { dataPoints, formatter, stack, label } = this.props; + + return ( +
+
+ + + + + + + + + + + + + + + + } + classNames="rounded-md text-xs p-0.5" + contentStyle={{ + backgroundColor: "rgb(var(--color-800))", + color: "rgb(var(--color-100))" + }} + + /> + + +
+
+ ); + } +} + +export default ChartDual; diff --git a/src/widgets/glances/components/container.jsx b/src/widgets/glances/components/container.jsx new file mode 100644 index 00000000..d141cab6 --- /dev/null +++ b/src/widgets/glances/components/container.jsx @@ -0,0 +1,8 @@ +export default function Container({ children }) { + return ( +
+ {children} +
+
+ ); +} diff --git a/src/widgets/glances/custom_tooltip.jsx b/src/widgets/glances/components/custom_tooltip.jsx similarity index 100% rename from src/widgets/glances/custom_tooltip.jsx rename to src/widgets/glances/components/custom_tooltip.jsx diff --git a/src/widgets/glances/components/error.jsx b/src/widgets/glances/components/error.jsx new file mode 100644 index 00000000..6e3b4da0 --- /dev/null +++ b/src/widgets/glances/components/error.jsx @@ -0,0 +1,9 @@ +import { useTranslation } from "next-i18next"; + +export default function Error() { + const { t } = useTranslation(); + + return
+ {t("widget.api_error")} +
; +} diff --git a/src/widgets/glances/cpu.jsx b/src/widgets/glances/cpu.jsx deleted file mode 100644 index daec91e0..00000000 --- a/src/widgets/glances/cpu.jsx +++ /dev/null @@ -1,100 +0,0 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; -import { useTranslation } from "next-i18next"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -const Chart = dynamic(() => import("./chart"), { ssr: false }); - -const pointsLimit = 15; - -export default function Component({ service }) { - const { t } = useTranslation(); - - const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - - const { data, error } = useWidgetAPI(service.widget, 'cpu', { - refreshInterval: 1000, - }); - - const { data: systemData, error: systemError } = useWidgetAPI(service.widget, 'system'); - - useEffect(() => { - if (data) { - setDataPoints((prevDataPoints) => { - const newDataPoints = [...prevDataPoints, { value: data.total }]; - if (newDataPoints.length > pointsLimit) { - newDataPoints.shift(); - } - return newDataPoints; - }); - } - }, [data]); - - if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; - } - - if (!data) { - return
-
-
- - -
-
-
; - } - - return ( - <> -
- t("common.number", { - value, - style: "unit", - unit: "percent", - maximumFractionDigits: 0, - })} - /> -
-
- {systemData && !systemError && ( - <> - {systemData.linux_distro && ( -
- {systemData.linux_distro} -
- )} - {systemData.os_version && ( -
- {systemData.os_version} -
- )} - {systemData.hostname && ( -
- {systemData.hostname} -
- )} - - )} -
-
- {t("common.number", { - value: data.total, - style: "unit", - unit: "percent", - maximumFractionDigits: 0, - })} {t("resources.used")} -
-
- - ); -} diff --git a/src/widgets/glances/memory.jsx b/src/widgets/glances/memory.jsx deleted file mode 100644 index 0e6002ee..00000000 --- a/src/widgets/glances/memory.jsx +++ /dev/null @@ -1,96 +0,0 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; -import { useTranslation } from "next-i18next"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); - -const pointsLimit = 15; - -export default function Component({ service }) { - const { t } = useTranslation(); - - const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - - const { data, error } = useWidgetAPI(service.widget, 'mem', { - refreshInterval: 1000, - }); - - useEffect(() => { - if (data) { - setDataPoints((prevDataPoints) => { - const newDataPoints = [...prevDataPoints, { a: data.used, b: data.free }]; - if (newDataPoints.length > pointsLimit) { - newDataPoints.shift(); - } - return newDataPoints; - }); - } - }, [data]); - - if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; - } - if (!data) { - return
-
-
- - -
-
-
; - } - - return ( - <> -
- t("common.bytes", { - value, - maximumFractionDigits: 0, - })} - /> -
-
- {data && !error && ( - <> - {data.free && ( -
- {t("common.bytes", { - value: data.free, - maximumFractionDigits: 0, - })} {t("resources.free")} -
- )} - - {data.total && ( -
- {t("common.bytes", { - value: data.total, - maximumFractionDigits: 0, - })} {t("resources.total")} -
- )} - - )} -
-
- {t("common.bytes", { - value: data.used, - maximumFractionDigits: 0, - })} {t("resources.used")} -
-
- - ); -} diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx new file mode 100644 index 00000000..a93abbc7 --- /dev/null +++ b/src/widgets/glances/metrics/cpu.jsx @@ -0,0 +1,91 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const Chart = dynamic(() => import("../components/chart"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'cpu', { + refreshInterval: 1000, + }); + + const { data: systemData, error: systemError } = useWidgetAPI(service.widget, 'system'); + + useEffect(() => { + if (data) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { value: data.total }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data]); + + if (error) { + return ; + } + + if (!data) { + return -; + } + + return ( + + t("common.number", { + value, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} + /> + + {systemData && !systemError && ( + + {systemData.linux_distro && ( +
+ {systemData.linux_distro} +
+ )} + {systemData.os_version && ( +
+ {systemData.os_version} +
+ )} + {systemData.hostname && ( +
+ {systemData.hostname} +
+ )} +
+ )} + + +
+ {t("common.number", { + value: data.total, + style: "unit", + unit: "percent", + maximumFractionDigits: 0, + })} {t("resources.used")} +
+
+
+ ); +} diff --git a/src/widgets/glances/disk.jsx b/src/widgets/glances/metrics/disk.jsx similarity index 50% rename from src/widgets/glances/disk.jsx rename to src/widgets/glances/metrics/disk.jsx index 7ad783ac..dcb1dc71 100644 --- a/src/widgets/glances/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -2,9 +2,13 @@ import dynamic from "next/dynamic"; import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + import useWidgetAPI from "utils/proxy/use-widget-api"; -const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); +const ChartDual = dynamic(() => import("../components/chart_dual"), { ssr: false }); const pointsLimit = 15; @@ -44,70 +48,55 @@ export default function Component({ service }) { }, [dataPoints]); if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; + return ; } if (!data) { - return
-
-
- - -
-
-
; + return -; } const diskData = data.find((item) => item.disk_name === diskName); if (!diskData) { - return
-
-
; + return -; } const diskRates = calculateRates(dataPoints); const currentRate = diskRates[diskRates.length - 1]; return ( - <> -
+ t("common.bitrate", { - value, - })} - /> -
-
- {currentRate && !error && ( - <> -
- {t("common.bitrate", { - value: currentRate.a, - })} {t("glances.read")} -
-
- {t("common.bitrate", { - value: currentRate.b, - })} {t("glances.write")} -
- - )} -
-
- {t("common.bitrate", { - value: currentRate.a + currentRate.b, - })} -
-
- + dataPoints={ratePoints} + label={[t("glances.read"), t("glances.write")]} + max={diskData.critical} + formatter={(value) => t("common.bitrate", { + value, + })} + /> + + {currentRate && !error && ( + +
+ {t("common.bitrate", { + value: currentRate.a, + })} {t("glances.read")} +
+
+ {t("common.bitrate", { + value: currentRate.b, + })} {t("glances.write")} +
+
+ )} + + +
+ {t("common.bitrate", { + value: currentRate.a + currentRate.b, + })} +
+
+ ); } diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx new file mode 100644 index 00000000..f9d0cd15 --- /dev/null +++ b/src/widgets/glances/metrics/memory.jsx @@ -0,0 +1,88 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const ChartDual = dynamic(() => import("../components/chart_dual"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'mem', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { a: data.used, b: data.free }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data]); + + if (error) { + return ; + } + + if (!data) { + return -; + } + + return ( + + t("common.bytes", { + value, + maximumFractionDigits: 0, + })} + /> + + {data && !error && ( + + {data.free && ( +
+ {t("common.bytes", { + value: data.free, + maximumFractionDigits: 0, + })} {t("resources.free")} +
+ )} + + {data.total && ( +
+ {t("common.bytes", { + value: data.total, + maximumFractionDigits: 0, + })} {t("resources.total")} +
+ )} +
+ )} + + +
+ {t("common.bytes", { + value: data.used, + maximumFractionDigits: 0, + })} {t("resources.used")} +
+
+
+ ); +} diff --git a/src/widgets/glances/net.jsx b/src/widgets/glances/metrics/net.jsx similarity index 50% rename from src/widgets/glances/net.jsx rename to src/widgets/glances/metrics/net.jsx index a630ae74..15233b42 100644 --- a/src/widgets/glances/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -2,9 +2,13 @@ import dynamic from "next/dynamic"; import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + import useWidgetAPI from "utils/proxy/use-widget-api"; -const ChartDual = dynamic(() => import("./chart_dual"), { ssr: false }); +const ChartDual = dynamic(() => import("../components/chart_dual"), { ssr: false }); const pointsLimit = 15; @@ -36,61 +40,53 @@ export default function Component({ service }) { }, [data, interfaceName]); if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; + return ; } + if (!data) { - return
-
-
- - -
-
-
; + return -; } + const interfaceData = data.find((item) => item[item.key] === interfaceName); if (!interfaceData) { - return
-
-
; + return -; } return ( - <> -
- t("common.byterate", { - value, - maximumFractionDigits: 0, - })} - /> -
-
+ + t("common.byterate", { + value, + maximumFractionDigits: 0, + })} + /> + + {interfaceData && interfaceData.interface_name && ( -
+
{interfaceData.interface_name}
)} - {t("common.bitrate", { - value: interfaceData.tx, - maximumFractionDigits: 0, - })} {t("docker.tx")} -
-
- {t("common.bitrate", { - value: interfaceData.rx, - maximumFractionDigits: 0, - })} {t("docker.rx")} -
-
- + +
+ {t("common.bitrate", { + value: interfaceData.tx, + maximumFractionDigits: 0, + })} {t("docker.tx")} +
+ + + +
+ {t("common.bitrate", { + value: interfaceData.rx, + maximumFractionDigits: 0, + })} {t("docker.rx")} +
+
+ ); } diff --git a/src/widgets/glances/process.jsx b/src/widgets/glances/metrics/process.jsx similarity index 60% rename from src/widgets/glances/process.jsx rename to src/widgets/glances/metrics/process.jsx index 7d9785e6..bf606a75 100644 --- a/src/widgets/glances/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -1,5 +1,9 @@ import { useTranslation } from "next-i18next"; +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + import useWidgetAPI from "utils/proxy/use-widget-api"; import ResolvedIcon from "components/resolvedicon"; @@ -21,52 +25,42 @@ export default function Component({ service }) { }); if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; + return ; } if (!data) { - return
-
-
- - -
-
-
; + return -; } data.splice(5); return ( - <> -
+ +
{t("resources.cpu")}
{t("resources.mem")}
-
-
- { data.map((item) =>
+ + + +
+ { data.map((item) =>
-
+
{statusMap[item.status]}
-
{item.name}
-
{item.cpu_percent.toFixed(1)}%
-
{t("common.bytes", { +
{item.name}
+
{item.cpu_percent.toFixed(1)}%
+
{t("common.bytes", { value: item.memory_info[0], maximumFractionDigits: 0, })}
) } -
-
- +
+ + ); } diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx new file mode 100644 index 00000000..9be5666f --- /dev/null +++ b/src/widgets/glances/metrics/sensor.jsx @@ -0,0 +1,88 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const Chart = dynamic(() => import("../components/chart"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const [, sensorName] = widget.metric.split(':'); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(service.widget, 'sensors', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + const sensorData = data.find((item) => item.label === sensorName); + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { value: sensorData.value }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + }, [data, sensorName]); + + if (error) { + return ; + } + + if (!data) { + return -; + } + + const sensorData = data.find((item) => item.label === sensorName); + + if (!sensorData) { + return -; + } + + return ( + + t("common.number", { + value, + })} + /> + + {sensorData && !error && ( + + {sensorData.warning && ( +
+ {sensorData.warning}{sensorData.unit} {t("glances.warn")} +
+ )} + {sensorData.critical && ( +
+ {sensorData.critical} {sensorData.unit} {t("glances.crit")} +
+ )} +
+ )} + + +
+ {t("common.number", { + value: sensorData.value, + })} {sensorData.unit} +
+
+
+ ); +} diff --git a/src/widgets/glances/sensor.jsx b/src/widgets/glances/sensor.jsx deleted file mode 100644 index 32d01eb2..00000000 --- a/src/widgets/glances/sensor.jsx +++ /dev/null @@ -1,99 +0,0 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; -import { useTranslation } from "next-i18next"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -const Chart = dynamic(() => import("./chart"), { ssr: false }); - -const pointsLimit = 15; - -export default function Component({ service }) { - const { t } = useTranslation(); - const { widget } = service; - const [, sensorName] = widget.metric.split(':'); - - const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - - const { data, error } = useWidgetAPI(service.widget, 'sensors', { - refreshInterval: 1000, - }); - - useEffect(() => { - if (data) { - const sensorData = data.find((item) => item.label === sensorName); - setDataPoints((prevDataPoints) => { - const newDataPoints = [...prevDataPoints, { value: sensorData.value }]; - if (newDataPoints.length > pointsLimit) { - newDataPoints.shift(); - } - return newDataPoints; - }); - } - }, [data, sensorName]); - - if (error) { - return
-
-
- {t("widget.api_error")} -
-
-
; - } - - if (!data) { - return
-
-
- - -
-
-
; - } - - const sensorData = data.find((item) => item.label === sensorName); - - if (!sensorData) { - return
-
-
; - } - - return ( - <> -
- t("common.number", { - value, - })} - /> -
-
- {sensorData && !error && ( - <> - {sensorData.warning && ( -
- {sensorData.warning}{sensorData.unit} {t("glances.warn")} -
- )} - {sensorData.critical && ( -
- {sensorData.critical} {sensorData.unit} {t("glances.crit")} -
- )} - - )} -
-
- {t("common.number", { - value: sensorData.value, - })} {sensorData.unit} -
-
- - ); -} From cd2c24d47bf69ca08d85cab9369c9170b6eb2e30 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 1 Aug 2023 16:39:46 +0300 Subject: [PATCH 0151/1640] rework position prop --- src/widgets/glances/components/block.jsx | 4 +--- src/widgets/glances/components/chart_dual.jsx | 8 ++++---- src/widgets/glances/metrics/cpu.jsx | 4 ++-- src/widgets/glances/metrics/disk.jsx | 4 ++-- src/widgets/glances/metrics/memory.jsx | 4 ++-- src/widgets/glances/metrics/net.jsx | 4 ++-- src/widgets/glances/metrics/process.jsx | 4 ++-- src/widgets/glances/metrics/sensor.jsx | 4 ++-- 8 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/widgets/glances/components/block.jsx b/src/widgets/glances/components/block.jsx index 73cf86c9..1243771a 100644 --- a/src/widgets/glances/components/block.jsx +++ b/src/widgets/glances/components/block.jsx @@ -1,8 +1,6 @@ export default function Block({ position, children }) { - const positionClasses = Object.entries(position).map(([key, value]) => `${key}-${value}`).join(' '); - return ( -
+
{children}
); diff --git a/src/widgets/glances/components/chart_dual.jsx b/src/widgets/glances/components/chart_dual.jsx index 14f5e4e6..e5b7e9f8 100644 --- a/src/widgets/glances/components/chart_dual.jsx +++ b/src/widgets/glances/components/chart_dual.jsx @@ -5,13 +5,13 @@ import CustomTooltip from "./custom_tooltip"; class ChartDual extends PureComponent { render() { - const { dataPoints, formatter, stack, label } = this.props; + const { dataPoints, formatter, stack, label, stackOffset } = this.props; return (
- + @@ -25,7 +25,7 @@ class ChartDual extends PureComponent { {systemData && !systemError && ( - + {systemData.linux_distro && (
{systemData.linux_distro} @@ -76,7 +76,7 @@ export default function Component({ service }) { )} - +
{t("common.number", { value: data.total, diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx index dcb1dc71..da5b7240 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -76,7 +76,7 @@ export default function Component({ service }) { /> {currentRate && !error && ( - +
{t("common.bitrate", { value: currentRate.a, @@ -90,7 +90,7 @@ export default function Component({ service }) { )} - +
{t("common.bitrate", { value: currentRate.a + currentRate.b, diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx index f9d0cd15..81e64791 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -54,7 +54,7 @@ export default function Component({ service }) { /> {data && !error && ( - + {data.free && (
{t("common.bytes", { @@ -75,7 +75,7 @@ export default function Component({ service }) { )} - +
{t("common.bytes", { value: data.used, diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx index 15233b42..0c65ee64 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -64,7 +64,7 @@ export default function Component({ service }) { })} /> - + {interfaceData && interfaceData.interface_name && (
{interfaceData.interface_name} @@ -79,7 +79,7 @@ export default function Component({ service }) {
- +
{t("common.bitrate", { value: interfaceData.rx, diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index bf606a75..1b331566 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -36,7 +36,7 @@ export default function Component({ service }) { return ( - +
{t("resources.cpu")}
@@ -44,7 +44,7 @@ export default function Component({ service }) {
- +
{ data.map((item) =>
diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx index 9be5666f..80e8be96 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -62,7 +62,7 @@ export default function Component({ service }) { /> {sensorData && !error && ( - + {sensorData.warning && (
{sensorData.warning}{sensorData.unit} {t("glances.warn")} @@ -76,7 +76,7 @@ export default function Component({ service }) { )} - +
{t("common.number", { value: sensorData.value, From 0c8131f27e2acfd7788fbf6a02c9f426de46a9ed Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Tue, 1 Aug 2023 16:45:09 +0300 Subject: [PATCH 0152/1640] add gpu metric --- public/locales/en/common.json | 4 +- src/widgets/glances/component.jsx | 5 ++ src/widgets/glances/metrics/gpu.jsx | 104 ++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/widgets/glances/metrics/gpu.jsx diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 7a8fe023..45402ce0 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -374,7 +374,9 @@ "hours": "h", "crit": "Crit", "read": "Read", - "write": "Write" + "write": "Write", + "gpu": "GPU", + "mem": "Mem" }, "quicklaunch": { "bookmark": "Bookmark", diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx index 4fa1a9ff..310fae5a 100644 --- a/src/widgets/glances/component.jsx +++ b/src/widgets/glances/component.jsx @@ -4,6 +4,7 @@ import Sensor from "./metrics/sensor"; import Net from "./metrics/net"; import Process from "./metrics/process"; import Disk from "./metrics/disk"; +import GPU from "./metrics/gpu"; export default function Component({ service }) { const { widget } = service; @@ -28,6 +29,10 @@ export default function Component({ service }) { return ; } + if (widget.metric.match(/^gpu:/)) { + return ; + } + if (widget.metric === "cpu") { return ; } diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx new file mode 100644 index 00000000..edd603e3 --- /dev/null +++ b/src/widgets/glances/metrics/gpu.jsx @@ -0,0 +1,104 @@ +import dynamic from "next/dynamic"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; + +import Error from "../components/error"; +import Container from "../components/container"; +import Block from "../components/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const ChartDual = dynamic(() => import("../components/chart_dual"), { ssr: false }); + +const pointsLimit = 15; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const [, gpuName] = widget.metric.split(':'); + + const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ a: 0, b: 0 }, 0, pointsLimit)); + + const { data, error } = useWidgetAPI(widget, 'gpu', { + refreshInterval: 1000, + }); + + useEffect(() => { + if (data) { + // eslint-disable-next-line eqeqeq + const gpuData = data.find((item) => item[item.key] == gpuName); + + if (gpuData) { + setDataPoints((prevDataPoints) => { + const newDataPoints = [...prevDataPoints, { a: gpuData.mem, b: gpuData.proc }]; + if (newDataPoints.length > pointsLimit) { + newDataPoints.shift(); + } + return newDataPoints; + }); + } + } + }, [data, gpuName]); + + if (error) { + return ; + } + + if (!data) { + return -; + } + + // eslint-disable-next-line eqeqeq + const gpuData = data.find((item) => item[item.key] == gpuName); + + if (!gpuData) { + return -; + } + + return ( + + t("common.percent", { + value, + maximumFractionDigits: 1, + })} + /> + + + {gpuData && gpuData.name && ( +
+ {gpuData.name} +
+ )} + +
+ {t("common.number", { + value: gpuData.mem, + maximumFractionDigits: 1, + })}% {t("glances.mem")} {t("resources.used")} +
+
+ + +
+ {t("common.number", { + value: gpuData.proc, + maximumFractionDigits: 1, + })}% {t("glances.gpu")} +
+
+ + +
+ {t("common.number", { + value: gpuData.temperature, + maximumFractionDigits: 1, + })}° +
+
+
+ ); +} From 3e8a8c649b5e685cf0f6fad05a31f9e34820ccb9 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Mon, 31 Jul 2023 17:52:37 +0000 Subject: [PATCH 0153/1640] Translated using Weblate (Spanish) Currently translated at 100.0% (494 of 494 strings) Translation: Homepage/Homepage Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/ --- public/locales/es/common.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 69151731..097029f7 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -666,22 +666,22 @@ "ping": "Ping" }, "azuredevops": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", - "approved": "Approved" + "result": "Resultado", + "status": "Estado", + "buildId": "Identificador de la construcción", + "succeeded": "Exitoso", + "notStarted": "Sin empezar", + "failed": "Fallido", + "canceled": "Cancelado", + "inProgress": "En curso", + "totalPrs": "RP totales", + "myPrs": "Mis logros", + "approved": "Aprobados" }, "urbackup": { - "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "ok": "De acuerdo", + "errored": "Errores", + "noRecent": "Caducado", + "totalUsed": "Almacenamiento usado" } } From a0ffb46a6f7cbe69c9af9f9523973290e0f71c80 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Wed, 2 Aug 2023 03:54:34 +0300 Subject: [PATCH 0154/1640] bump up quicklook z --- src/components/quicklaunch.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index 229b2f4d..c371ccf6 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -145,7 +145,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear return (