From 1c456b70c00946a0af643a4f49d1da94c10c900c Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 7 Nov 2022 11:35:13 -0800
Subject: [PATCH 001/300] Re-create service ping, docker status changes

See #388
---
 public/locales/en/common.json      |  8 +++++-
 src/components/services/item.jsx   | 32 ++++++++++++++--------
 src/components/services/ping.jsx   | 44 ++++++++++++++++++++++++++++++
 src/components/services/status.jsx | 27 ++++++++++++++----
 src/pages/api/ping.js              | 28 +++++++++++++++++++
 src/utils/proxy/http.js            |  2 +-
 6 files changed, 123 insertions(+), 18 deletions(-)
 create mode 100644 src/components/services/ping.jsx
 create mode 100644 src/pages/api/ping.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 8784443a..24177db6 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -52,7 +52,13 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     },
     "emby": {
         "playing": "Playing",
diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx
index 56ed2b4b..3f9df930 100644
--- a/src/components/services/item.jsx
+++ b/src/components/services/item.jsx
@@ -3,6 +3,7 @@ import { useContext, useState } from "react";
 
 import Status from "./status";
 import Widget from "./widget";
+import Ping from "./ping";
 
 import Docker from "widgets/docker/component";
 import { SettingsContext } from "utils/contexts/settings";
@@ -30,7 +31,7 @@ export default function Item({ service }) {
       <div
         className={`${
           hasLink ? "cursor-pointer " : " "
-        }transition-all h-15 mb-3 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10`}
+        }transition-all h-15 mb-3 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative`}
       >
         <div className="flex select-none">
           {service.icon &&
@@ -70,16 +71,25 @@ export default function Item({ service }) {
             </div>
           )}
 
-          {service.container && (
-            <button
-              type="button"
-              onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
-              className="flex-shrink-0 flex items-center justify-center w-12 cursor-pointer"
-            >
-              <Status service={service} />
-              <span className="sr-only">View container stats</span>
-            </button>
-          )}
+          <div className="absolute top-0 right-0 w-1/2 flex flex-row justify-end gap-2 mr-2">
+              {service.ping && (
+                <div className="flex-shrink-0 flex items-center justify-center cursor-pointer">
+                  <Ping service={service} />
+                  <span className="sr-only">Ping status</span>
+                </div>
+              )}
+
+              {service.container && (
+                <button
+                  type="button"
+                  onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
+                  className="flex-shrink-0 flex items-center justify-center cursor-pointer"
+                >
+                  <Status service={service} />
+                  <span className="sr-only">View container stats</span>
+                </button>
+              )}
+          </div>
         </div>
 
         {service.container && service.server && (
diff --git a/src/components/services/ping.jsx b/src/components/services/ping.jsx
new file mode 100644
index 00000000..e3056232
--- /dev/null
+++ b/src/components/services/ping.jsx
@@ -0,0 +1,44 @@
+import { useTranslation } from "react-i18next";
+import useSWR from "swr";
+
+export default function Ping({ service }) {
+  const { t } = useTranslation();
+  const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ping: service.ping}).toString()}`, {
+    refreshInterval: 30000
+  });
+
+  if (error) {
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden">
+        <div className="text-[8px] font-bold text-rose-500 uppercase">{t("ping.error")}</div>
+      </div>
+    );
+  }
+  
+  if (!data) {
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden">
+        <div className="text-[8px] font-bold text-black/20 dark:text-white/40 uppercase">{t("ping.ping")}</div>
+      </div>
+    );
+  }
+
+  const statusText = `${service.ping}: HTTP status ${data.status}`;
+  
+  if (data && data.status !== 200) {
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={statusText}>
+        <div className="text-[8px] font-bold text-rose-500/80">{data.status}</div>
+      </div>
+    );
+  }
+  
+  if (data && data.status === 200) {
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={statusText}>
+        <div className="text-[8px] font-bold text-emerald-500/80">{t("common.ms", { value: data.latency, style: "unit", unit: "millisecond", unitDisplay: "narrow", maximumFractionDigits: 0 })}</div>
+      </div>
+    );
+  }
+
+}
diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx
index dc903408..2d07e49e 100644
--- a/src/components/services/status.jsx
+++ b/src/components/services/status.jsx
@@ -1,19 +1,36 @@
+import { useTranslation } from "react-i18next";
 import useSWR from "swr";
 
 export default function Status({ service }) {
+  const { t } = useTranslation();
+
   const { data, error } = useSWR(`/api/docker/status/${service.container}/${service.server || ""}`);
 
   if (error) {
-    return <div className="w-3 h-3 bg-rose-300 dark:bg-rose-500 rounded-full" />;
+    <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
+      <div className="text-[8px] font-bold text-rose-500/80 uppercase">{t("docker.error")}</div>
+    </div>
   }
 
   if (data && data.status === "running") {
-    return <div className="w-3 h-3 bg-emerald-300 dark:bg-emerald-500 rounded-full" />;
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
+        <div className="text-[8px] font-bold text-emerald-500/80 uppercase">{data.status}</div>
+      </div>
+    );
   }
 
-  if (data && data.status === "not found") {
-    return <div className="h-2.5 w-2.5 bg-orange-400/50 dark:bg-yellow-200/40 -rotate-45" />;
+  if (data && (data.status === "not found" || data.status === "exited")) {
+    return (
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
+        <div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{data.status}</div>
+      </div>
+    );
   }
 
-  return <div className="w-3 h-3 bg-black/20 dark:bg-white/40 rounded-full" />;
+  return (
+    <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden">
+      <div className="text-[8px] font-bold text-black/20 dark:text-white/40 uppercase">{t("docker.unknown")}</div>
+    </div>
+  );
 }
diff --git a/src/pages/api/ping.js b/src/pages/api/ping.js
new file mode 100644
index 00000000..79c7da0c
--- /dev/null
+++ b/src/pages/api/ping.js
@@ -0,0 +1,28 @@
+import { performance } from "perf_hooks";
+
+import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
+
+const logger = createLogger("ping");
+
+export default async function handler(req, res) {
+    const { ping: pingURL } = req.query;
+
+    if (!pingURL) {
+        logger.debug("No ping URL specified");
+        return res.status(400).send({
+        error: "No ping URL given",
+        });
+    }
+    
+    const startTime = performance.now();
+    const [status] = await httpProxy(pingURL, {
+      method: "HEAD"
+    });
+    const endTime = performance.now();
+
+    return res.status(200).json({
+      status,
+      latency: endTime - startTime
+    });
+}
diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js
index 4eba83f3..8f180a7f 100644
--- a/src/utils/proxy/http.js
+++ b/src/utils/proxy/http.js
@@ -96,7 +96,7 @@ export async function httpProxy(url, params = {}) {
     return [status, contentType, data, responseHeaders];
   }
   catch (err) {
-    logger.error("Error calling %s//%s%s...", url.protocol, url.hostname, url.pathname);
+    logger.error("Error calling %s//%s%s...", constructedUrl.protocol, constructedUrl.hostname, constructedUrl.pathname);
     logger.error(err);
     return [500, "application/json", { error: "Unexpected error" }, null];
   }

From 83a3a06386672ee5125b36fa8ffc582ed8071632 Mon Sep 17 00:00:00 2001
From: Rat <atkinson21@gmail.com>
Date: Fri, 18 Nov 2022 15:32:59 -0800
Subject: [PATCH 002/300] Added configurable setting for log folder, falls back
 to config path if not set

---
 src/utils/logger.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/utils/logger.js b/src/utils/logger.js
index 5ad93546..19c6a71e 100644
--- a/src/utils/logger.js
+++ b/src/utils/logger.js
@@ -1,6 +1,7 @@
 /* eslint-disable no-console */
 import { join } from "path";
 import { format as utilFormat } from "node:util";
+import checkAndCopyConfig, { getSettings } from "utils/config/config";
 
 import winston from "winston";
 
@@ -8,6 +9,9 @@ let winstonLogger;
 
 function init() {
   const configPath = join(process.cwd(), "config");
+  checkAndCopyConfig("settings.yaml");
+  const settings = getSettings();
+  const logpath = settings.logpath || configPath;
 
   function combineMessageAndSplat() {
     return {
@@ -57,7 +61,7 @@ function init() {
           winston.format.timestamp(),
           winston.format.printf(messageFormatter)
         ),
-        filename: `${configPath}/logs/homepage.log`,
+        filename: `${logpath}/logs/homepage.log`,
         handleExceptions: true,
         handleRejections: true,
       }),

From c8806a87755157991462c0ffd33b26e2cbeb9140 Mon Sep 17 00:00:00 2001
From: Rat <atkinson21@gmail.com>
Date: Sat, 19 Nov 2022 12:10:29 -0800
Subject: [PATCH 003/300] lint fix

---
 src/utils/logger.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/utils/logger.js b/src/utils/logger.js
index 19c6a71e..048c5356 100644
--- a/src/utils/logger.js
+++ b/src/utils/logger.js
@@ -1,10 +1,11 @@
 /* eslint-disable no-console */
 import { join } from "path";
 import { format as utilFormat } from "node:util";
-import checkAndCopyConfig, { getSettings } from "utils/config/config";
 
 import winston from "winston";
 
+import checkAndCopyConfig, { getSettings } from "utils/config/config";
+
 let winstonLogger;
 
 function init() {

From b5bb9c027279c4880b48784132960ae2d7577200 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 19 Nov 2022 21:11:38 -0800
Subject: [PATCH 004/300] Fix rutorrent widget always uses port 80

Closes #538
---
 src/widgets/rutorrent/proxy.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js
index dae50c35..604b0896 100644
--- a/src/widgets/rutorrent/proxy.js
+++ b/src/widgets/rutorrent/proxy.js
@@ -13,7 +13,7 @@ export default async function rutorrentProxyHandler(req, res) {
 
       const rutorrent = new RuTorrent({
         host: constructedUrl.hostname,
-        port: constructedUrl.port,
+        port: constructedUrl.port !== '' ? constructedUrl.port : (constructedUrl.protocol === "https:" ? 443 : 80),
         path: constructedUrl.pathname,
         ssl: constructedUrl.protocol === "https:",
         username: widget.username,

From c57d980558794f3e708466d99d14e302094f4c66 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 19 Nov 2022 21:19:30 -0800
Subject: [PATCH 005/300] fix rutorrent lint

---
 src/widgets/rutorrent/proxy.js | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js
index 604b0896..c7bb5d45 100644
--- a/src/widgets/rutorrent/proxy.js
+++ b/src/widgets/rutorrent/proxy.js
@@ -11,9 +11,14 @@ export default async function rutorrentProxyHandler(req, res) {
     if (widget) {
       const constructedUrl = new URL(widget.url);
 
+      let rtPort = constructedUrl.port;
+      if (rtPort === '') {
+        rtPort = constructedUrl.protocol === "https:" ? 443 : 80;
+      }
+
       const rutorrent = new RuTorrent({
         host: constructedUrl.hostname,
-        port: constructedUrl.port !== '' ? constructedUrl.port : (constructedUrl.protocol === "https:" ? 443 : 80),
+        port: rtPort,
         path: constructedUrl.pathname,
         ssl: constructedUrl.protocol === "https:",
         username: widget.username,

From 0653b121042d1e79f46b62b0eadb9131863ff85e Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 19 Nov 2022 22:10:39 -0800
Subject: [PATCH 006/300] fix quicklaunch sometimes mislabels bookmarks

---
 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 1836e9b7..f2c09db2 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -147,7 +147,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
                         }
                       </div>
                     </div>
-                    <div className="text-xs text-theme-600 font-bold pointer-events-none">{r.abbr ? t("quicklaunch.bookmark") : t("quicklaunch.service")}</div>
+                    <div className="text-xs text-theme-600 font-bold pointer-events-none">{r.type === 'service' ? t("quicklaunch.service") : t("quicklaunch.bookmark")}</div>
                   </button>
                 </li>
               ))}

From e3725b02c88c30273a6fadf95b6d57e318595f18 Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Sat, 19 Nov 2022 10:27:38 +0000
Subject: [PATCH 007/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (240 of 240 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 e348d534..b015c31f 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -3,10 +3,10 @@
         "missing_type": "Falta el tipo de widget: {{type}}",
         "api_error": "Error de API",
         "status": "Estado",
-        "information": "Information",
+        "information": "Información",
         "url": "URL",
-        "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "raw_error": "Error sin procesar",
+        "response_data": "Datos de respuesta"
     },
     "search": {
         "placeholder": "Buscar…"
@@ -325,7 +325,7 @@
         "country": "País"
     },
     "hdhomerun": {
-        "channels": "Channels",
-        "hd": "HD"
+        "channels": "Canales",
+        "hd": "Alta definición"
     }
 }

From ab0cb6145fe1449bf653bb6c78d1b0c88815d035 Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Sat, 19 Nov 2022 08:56:12 +0000
Subject: [PATCH 008/300] Translated using Weblate (French)

Currently translated at 100.0% (240 of 240 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index e56e056a..6a211bc6 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -325,7 +325,7 @@
         "country": "Pays"
     },
     "hdhomerun": {
-        "channels": "Channels",
+        "channels": "Canaux",
         "hd": "HD"
     }
 }

From 4a21ad647ff4bf385875ec0ce0c46f01c8f49e8b Mon Sep 17 00:00:00 2001
From: retmas-gh <github@oppai.ovh>
Date: Sat, 19 Nov 2022 14:50:32 +0000
Subject: [PATCH 009/300] Translated using Weblate (Polish)

Currently translated at 97.5% (234 of 240 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 108 +++++++++++++++++-----------------
 1 file changed, 54 insertions(+), 54 deletions(-)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 6754fcda..064aa016 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -53,16 +53,16 @@
         "missing_type": "Brakujący typ widżetu: {{type}}",
         "api_error": "Błąd API",
         "status": "Stan",
-        "url": "URL",
-        "information": "Information",
-        "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "url": "Adres URL",
+        "information": "Informacje",
+        "raw_error": "Niesformatowany błąd",
+        "response_data": "Dane odpowiedzi"
     },
     "docker": {
-        "rx": "RX",
-        "tx": "TX",
-        "mem": "MEM",
-        "cpu": "CPU",
+        "rx": "Rx",
+        "tx": "Tx",
+        "mem": "Pamięć",
+        "cpu": "Procesor",
         "offline": "Offline"
     },
     "nzbget": {
@@ -95,7 +95,7 @@
         "wanted": "Poszukiwane",
         "queued": "W kolejce",
         "movies": "Filmy",
-        "missing": "Missing"
+        "missing": "Brakujące"
     },
     "lidarr": {
         "wanted": "Poszukiwane",
@@ -166,14 +166,14 @@
     },
     "mastodon": {
         "user_count": "Użytkownicy",
-        "status_count": "Posts",
+        "status_count": "Posty",
         "domain_count": "Domeny"
     },
     "strelaysrv": {
         "numActiveSessions": "Sesje",
         "numConnections": "Połączenia",
-        "dataRelayed": "Relayed",
-        "transferRate": "Rate"
+        "dataRelayed": "Przekazane",
+        "transferRate": "Przesył"
     },
     "authentik": {
         "users": "Użytkownicy",
@@ -181,10 +181,10 @@
         "failedLoginsLast24H": "Nieudane logowania (24h)"
     },
     "proxmox": {
-        "mem": "MEM",
-        "cpu": "CPU",
-        "lxc": "LXC",
-        "vms": "VMs"
+        "mem": "Pamięć",
+        "cpu": "Procesor",
+        "lxc": "Kontenery LXC",
+        "vms": "Maszyn wirtualnych"
     },
     "unifi": {
         "users": "Użytkownicy",
@@ -203,25 +203,25 @@
         "wlan_devices": "Urządzenia WLAN"
     },
     "plex": {
-        "streams": "Active Streams",
+        "streams": "Aktywne strumienie",
         "movies": "Filmy",
         "tv": "Seriale"
     },
     "glances": {
-        "cpu": "CPU",
-        "mem": "MEM",
+        "cpu": "Procesor",
+        "mem": "Pamięć",
         "wait": "Proszę czekać"
     },
     "changedetectionio": {
-        "diffsDetected": "Diffs Detected",
-        "totalObserved": "Total Observed"
+        "diffsDetected": "Wykryto różnic",
+        "totalObserved": "Obserwowanych ogółem"
     },
     "wmo": {
-        "77-day": "Snow Grains",
+        "77-day": "Ziarnisty śnieg",
         "0-day": "Słoneczny",
-        "0-night": "Clear",
-        "1-day": "Mainly Sunny",
-        "1-night": "Mainly Clear",
+        "0-night": "Bezchmurny",
+        "1-day": "Głównie słoneczny",
+        "1-night": "Głównie bezchmurny",
         "2-day": "Częściowo pochmurnie",
         "2-night": "Częściowo pochmurnie",
         "3-day": "Pochmurnie",
@@ -236,10 +236,10 @@
         "53-night": "Mżawka",
         "55-day": "Ciężka mżawka",
         "55-night": "Ciężka mżawka",
-        "56-day": "Light Freezing Drizzle",
-        "56-night": "Light Freezing Drizzle",
-        "57-day": "Freezing Drizzle",
-        "57-night": "Freezing Drizzle",
+        "56-day": "Lekko chłodna mżawka",
+        "56-night": "Lekko chłodna mżawka",
+        "57-day": "Chłodna mżawka",
+        "57-night": "Chłodna mżawka",
         "61-day": "Lekki deszcz",
         "61-night": "Lekki deszcz",
         "63-day": "Deszcz",
@@ -256,7 +256,7 @@
         "73-night": "Śnieg",
         "75-day": "Ciężki śnieg",
         "75-night": "Ciężki śnieg",
-        "77-night": "Snow Grains",
+        "77-night": "Ziarnisty śnieg",
         "80-day": "Lekkie opady",
         "80-night": "Lekkie opady",
         "81-day": "Opady",
@@ -275,7 +275,7 @@
         "99-night": "Burza z gradobiciem"
     },
     "quicklaunch": {
-        "bookmark": "Bookmark",
+        "bookmark": "Zakładka",
         "service": "Usługi"
     },
     "homebridge": {
@@ -287,45 +287,45 @@
         "child_bridges_status": "{{ok}}/{{total}}"
     },
     "autobrr": {
-        "approvedPushes": "Approved",
-        "rejectedPushes": "Rejected",
-        "filters": "Filters",
-        "indexers": "Indexers"
+        "approvedPushes": "Zaakceptowane",
+        "rejectedPushes": "Odrzucone",
+        "filters": "Filtry",
+        "indexers": "Indeksery"
     },
     "watchtower": {
-        "containers_scanned": "Scanned",
-        "containers_updated": "Updated",
-        "containers_failed": "Failed"
+        "containers_scanned": "Zeskanowane",
+        "containers_updated": "Zaktualizowane",
+        "containers_failed": "Niepowodzenie"
     },
     "tubearchivist": {
-        "downloads": "Queue",
-        "videos": "Videos",
-        "channels": "Channels",
-        "playlists": "Playlists"
+        "downloads": "Kolejka",
+        "videos": "Pliki wideo",
+        "channels": "Kanały",
+        "playlists": "Playlisty"
     },
     "truenas": {
-        "load": "System Load",
-        "uptime": "Uptime",
-        "alerts": "Alerts",
+        "load": "Obciążenie systemu",
+        "uptime": "Czas działania",
+        "alerts": "Ostrzeżenia",
         "time": "{{value, number(style: unit; unitDisplay: long;)}}"
     },
     "navidrome": {
-        "please_wait": "Please Wait",
-        "nothing_streaming": "No Active Streams"
+        "please_wait": "Proszę czekać",
+        "nothing_streaming": "Brak aktywnych strumieni"
     },
     "pyload": {
-        "speed": "Speed",
-        "active": "Active",
-        "queue": "Queue",
-        "total": "Total"
+        "speed": "Prędkość",
+        "active": "Aktywne",
+        "queue": "Kolejka",
+        "total": "Razem"
     },
     "gluetun": {
-        "public_ip": "Public IP",
+        "public_ip": "Adres publiczny",
         "region": "Region",
-        "country": "Country"
+        "country": "Państwo"
     },
     "hdhomerun": {
-        "channels": "Channels",
+        "channels": "Kanały",
         "hd": "HD"
     }
 }

From eab2cce41f38d3cce64bcc084bbda342626efdae Mon Sep 17 00:00:00 2001
From: Milo Ivir <mail@milotype.de>
Date: Sun, 20 Nov 2022 15:39:31 +0000
Subject: [PATCH 010/300] Translated using Weblate (Croatian)

Currently translated at 100.0% (240 of 240 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 191a3d79..2ac5c3fb 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -59,10 +59,10 @@
         "missing_type": "Nedostajuća vrsta widgeta: {{type}}",
         "api_error": "API greška",
         "status": "Stanje",
-        "information": "Information",
+        "information": "Informacije",
         "url": "URL",
-        "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "raw_error": "Raw greška",
+        "response_data": "Podaci odgovora"
     },
     "docker": {
         "rx": "RX",
@@ -320,12 +320,12 @@
         "total": "Ukupno"
     },
     "gluetun": {
-        "public_ip": "Public IP",
-        "region": "Region",
-        "country": "Country"
+        "public_ip": "Javni IP",
+        "region": "Regija",
+        "country": "Zemlja"
     },
     "hdhomerun": {
-        "channels": "Channels",
+        "channels": "Kanali",
         "hd": "HD"
     }
 }

From 72374b3ae944fec2f611686cad302c3232178707 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 011/300] Translated using Weblate (German)

Currently translated at 92.2% (225 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
---
 public/locales/de/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index 22402020..ecc4141c 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -23,7 +23,9 @@
         "tx": "Tx",
         "mem": "Mem",
         "cpu": "Prozessor",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Spielen",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "ping": "Ping",
+        "error": "Error"
     }
 }

From ff6a6c17b1a644231fd82a94c36c2be6363b3198 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 012/300] Translated using Weblate (Spanish)

Currently translated at 98.3% (240 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index b015c31f..5b9a7959 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -23,7 +23,9 @@
         "tx": "Transmitido",
         "mem": "Memoria",
         "cpu": "Procesador",
-        "offline": "Desconectado"
+        "offline": "Desconectado",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Reproduciendo",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Canales",
         "hd": "Alta definición"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 1a8a2b67a15e3b7418aa74676e3c7bef5f7222e2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 013/300] Translated using Weblate (French)

Currently translated at 98.3% (240 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 6a211bc6..e170b8a9 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -23,7 +23,9 @@
         "tx": "Tx",
         "mem": "Mém",
         "cpu": "Cpu",
-        "offline": "Hors ligne"
+        "offline": "Hors ligne",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "En lecture",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Canaux",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From cedd00c0548eb7741007a993bbdf343bca58b0b5 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 014/300] Translated using Weblate (Portuguese)

Currently translated at 47.1% (115 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
---
 public/locales/pt/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 1431ac43..654cdb7f 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -23,7 +23,9 @@
         "tx": "Tx",
         "mem": "Mem",
         "cpu": "CPU",
-        "offline": "Desligado"
+        "offline": "Desligado",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "A reproduzir",
@@ -338,5 +340,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 10b2772782d583a256298bb21b194159b73ba66d Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 015/300] Translated using Weblate (Russian)

Currently translated at 9.4% (23 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index ac9a9823..9e7fe526 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -23,7 +23,9 @@
         "tx": "Тx",
         "mem": "Память",
         "cpu": "Процессор",
-        "offline": "Не в сети"
+        "offline": "Не в сети",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Воспроизведение",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 65d7bcd4682302e83ae8bc7d74bb50471e772e16 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 016/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 67.6% (165 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
---
 public/locales/zh-CN/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index 2337bb02..1a25f9cd 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -23,7 +23,9 @@
         "tx": "发送",
         "mem": "内存",
         "cpu": "处理器",
-        "offline": "离线"
+        "offline": "离线",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "播放中",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 12300391e2e89676d1f216cc72e94e717ccffdf8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 017/300] Translated using Weblate (Italian)

Currently translated at 93.8% (229 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
---
 public/locales/it/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index 0bf60639..aa9c713a 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -4,7 +4,9 @@
         "mem": "MEM",
         "cpu": "CPU",
         "offline": "Offline",
-        "rx": "RX"
+        "rx": "RX",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "In riproduzione",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 3e126824ff13875840ea9d91bd619216dc5dc5d5 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 018/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 32.3% (79 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
---
 public/locales/nb-NO/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json
index 813422e2..5982f463 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -23,7 +23,9 @@
         "tx": "Sendt",
         "mem": "Minne",
         "cpu": "Prosessor",
-        "offline": "Frakoblet"
+        "offline": "Frakoblet",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Spiller",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 4f0adea0da340a46879ff69e5b04cc64772ce9d7 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 019/300] Translated using Weblate (Vietnamese)

Currently translated at 18.0% (44 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
---
 public/locales/vi/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index 228e7d93..5ab0537e 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -23,7 +23,9 @@
         "tx": "TX",
         "mem": "BỘ NHỚ",
         "cpu": "CPU",
-        "offline": "Ngoại tuyến"
+        "offline": "Ngoại tuyến",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Đang chơi",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From e7c4254bb68c629adad253f8c6d6b01c2000e042 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 020/300] Translated using Weblate (Dutch)

Currently translated at 25.8% (63 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
---
 public/locales/nl/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index 5502dd8b..172edfd2 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -20,7 +20,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "speedtest": {
         "upload": "Upload",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 17cb8ffd0b7fb007235373768ccd7a9751dedba8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:08 +0000
Subject: [PATCH 021/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.6% (9 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
---
 public/locales/zh-Hant/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index cd508662..3c61740a 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -19,7 +19,9 @@
         "offline": "Offline",
         "tx": "TX",
         "mem": "MEM",
-        "cpu": "CPU"
+        "cpu": "CPU",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Playing",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 1843c588b8b872d96f9d7053bf78654148f8cd50 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 022/300] Translated using Weblate (Catalan)

Currently translated at 53.6% (131 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
---
 public/locales/ca/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index f9aa5969..1656dcc8 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -45,7 +45,9 @@
         "tx": "Transmès",
         "mem": "Memòria",
         "cpu": "Processador",
-        "offline": "Fora de línia"
+        "offline": "Fora de línia",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Reproduint",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 7b2b56ff0cc797a3cf82187bd0730f1131fd275c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 023/300] Translated using Weblate (Polish)

Currently translated at 95.9% (234 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 064aa016..809fc7c3 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -63,7 +63,9 @@
         "tx": "Tx",
         "mem": "Pamięć",
         "cpu": "Procesor",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "nzbget": {
         "rate": "Szybkość",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Kanały",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From b8c61f18ef8c306ec7b823724add6f9a8fe6cb50 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:03 +0000
Subject: [PATCH 024/300] Translated using Weblate (Swedish)

Currently translated at 53.2% (130 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
---
 public/locales/sv/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index 6bdc8ee0..a151bf35 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -26,7 +26,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "search": {
         "placeholder": "Sök…"
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 44477a9e1c4872b2f265787f6769a970a17f199f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:03 +0000
Subject: [PATCH 025/300] Translated using Weblate (Croatian)

Currently translated at 98.3% (240 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 2ac5c3fb..adb84f37 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -69,7 +69,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Nepovezan"
+        "offline": "Nepovezan",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Reprodukcija",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Kanali",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From eb525e8ea57287e5f00cdefd003a8aecde4437bd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 026/300] Translated using Weblate (Hungarian)

Currently translated at 44.2% (108 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
---
 public/locales/hu/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index 6ba895ae..39f88a6e 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -11,7 +11,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "lidarr": {
         "albums": "Albumok",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 27542befdd965f64240aa2d3bccdbefd3fdc96a1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 027/300] Translated using Weblate (Hebrew)

Currently translated at 41.3% (101 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
---
 public/locales/he/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index 5c89ac33..cb61cc0e 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -29,7 +29,9 @@
         "tx": "TX",
         "mem": "זיכרון",
         "cpu": "מעבד",
-        "offline": "כבוי"
+        "offline": "כבוי",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "מנגן",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 36a153c6c3517bbb9dabd2a85bdc43206a2c5f17 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 028/300] Translated using Weblate (Romanian)

Currently translated at 56.1% (137 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
---
 public/locales/ro/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index c98705f2..bd302227 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -11,7 +11,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "jellyseerr": {
         "approved": "Aprobate",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 45c6501dd5a78924f7ea288b359c7636b30afd5b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 029/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 47.9% (117 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
---
 public/locales/pt-BR/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json
index f6101ee0..ca4f39ef 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -57,7 +57,9 @@
         "tx": "Tx",
         "mem": "Mem",
         "cpu": "CPU",
-        "offline": "Desligado"
+        "offline": "Desligado",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Reproduzindo",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 4be7f15e7d3d29c84b1458ab055bef731009d069 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 030/300] Translated using Weblate (Yue)

Currently translated at 48.3% (118 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 public/locales/yue/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index 6c7d84de..09f8ea7c 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -47,7 +47,9 @@
         "tx": "發送",
         "mem": "內存",
         "cpu": "處理器",
-        "offline": "離線"
+        "offline": "離線",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "nzbget": {
         "rate": "速度",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 3f1890f32fae4c6c044b42f4dbee2e9a5bfcfece Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 031/300] Translated using Weblate (Finnish)

Currently translated at 50.4% (123 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
---
 public/locales/fi/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index d35449e8..916b8bc5 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -29,7 +29,9 @@
         "tx": "TX",
         "mem": "RAM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Toistaa",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 8cfa6d6ef3b6487d47c1f3dacd8cb28cc62d6e43 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 032/300] Translated using Weblate (Telugu)

Currently translated at 88.9% (217 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
---
 public/locales/te/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index d6ab211f..85fb5846 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -46,7 +46,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "సీపియూ",
-        "offline": "ఆఫ్‌లైన్"
+        "offline": "ఆఫ్‌లైన్",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "ఆడుతున్నారు",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 9b4054f7cc4ebe05526f0d36d21c7f3672050e02 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 033/300] Translated using Weblate (Bulgarian)

Currently translated at 18.8% (46 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
---
 public/locales/bg/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index c7824518..5bdc7191 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -55,7 +55,9 @@
         "rx": "RX",
         "tx": "TX",
         "mem": "MEM",
-        "cpu": "CPU"
+        "cpu": "CPU",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Възпроизвежда",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "ping": "Ping",
+        "error": "Error"
     }
 }

From 972210b184549cdd798e87a72ce7c48d9302013a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 034/300] Translated using Weblate (Turkish)

Currently translated at 94.6% (231 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
---
 public/locales/tr/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 053bd1b6..687ee14f 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -45,7 +45,9 @@
         "tx": "Giden Veri",
         "mem": "Bellek",
         "cpu": "İşlemci",
-        "offline": "Çevrimdışı"
+        "offline": "Çevrimdışı",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Oynatılıyor",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 6af10c50c52c7dfdb4dfa4dbf5fb5a954f789d17 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 035/300] Translated using Weblate (Serbian)

Currently translated at 3.6% (9 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
---
 public/locales/sr/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index ed646d45..94ab9462 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -45,7 +45,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Playing",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 6c986c7b32ecf3147bcf14fbf6724648e6c54e29 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:05 +0000
Subject: [PATCH 036/300] Translated using Weblate (Arabic)

Currently translated at 18.0% (44 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
---
 public/locales/ar/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index b099cf51..06932fe8 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -103,7 +103,9 @@
         "tx": "TX",
         "mem": "الرام",
         "cpu": "المعالج",
-        "offline": "غير متصل"
+        "offline": "غير متصل",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "يعمل الان",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 411f6c31523d881566ae8bccdd375f0d2c8e2f10 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 037/300] Translated using Weblate (Czech)

Currently translated at 92.2% (225 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
---
 public/locales/cs/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index fd11ea9d..eaad12be 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -57,7 +57,9 @@
         "tx": "TX",
         "mem": "RAM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Přehrává",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From d6e7451a13222bf544a40dcbacf2091a64b638c4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:06 +0000
Subject: [PATCH 038/300] Translated using Weblate (Danish)

Currently translated at 81.1% (198 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
---
 public/locales/da/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index de0ac1d2..0350d7a2 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -181,7 +181,9 @@
         "rx": "RX",
         "tx": "TX",
         "mem": "RAM",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Afspiller",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 553e629ae9be98dc66abc467be655abd7efdabdd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:07 +0000
Subject: [PATCH 039/300] Translated using Weblate (Malay)

Currently translated at 94.6% (231 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
---
 public/locales/ms/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index cb6bbb2a..fa9cf98a 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -150,7 +150,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Luar talian"
+        "offline": "Luar talian",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "changedetectionio": {
         "totalObserved": "Jumlah Diperhatikan",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 24814ec6e4b14ccc53dac697f11268860ff13484 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sun, 20 Nov 2022 18:04:04 +0000
Subject: [PATCH 040/300] Translated using Weblate (Hindi)

Currently translated at 3.6% (9 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
---
 public/locales/hi/common.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index 7289852f..6b3ff4a9 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -79,7 +79,9 @@
         "tx": "TX",
         "mem": "MEM",
         "cpu": "CPU",
-        "offline": "Offline"
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
     },
     "emby": {
         "playing": "Playing",
@@ -327,5 +329,9 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
     }
 }

From 44da4e93170349900a5ef2655076bd73945de71d Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Sun, 20 Nov 2022 18:17:29 +0000
Subject: [PATCH 041/300] Translated using Weblate (French)

Currently translated at 100.0% (244 of 244 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 e170b8a9..fc1ab208 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -24,8 +24,8 @@
         "mem": "Mém",
         "cpu": "Cpu",
         "offline": "Hors ligne",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Erreur",
+        "unknown": "Inconnu"
     },
     "emby": {
         "playing": "En lecture",
@@ -331,7 +331,7 @@
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
+        "error": "Erreur",
         "ping": "Ping"
     }
 }

From 0c0bbe93170ce22379677e2f0cdb5eab69e5eaf2 Mon Sep 17 00:00:00 2001
From: retmas-gh <github@oppai.ovh>
Date: Sun, 20 Nov 2022 21:43:11 +0000
Subject: [PATCH 042/300] Translated using Weblate (Polish)

Currently translated at 97.5% (238 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 809fc7c3..c12e044c 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -64,8 +64,8 @@
         "mem": "Pamięć",
         "cpu": "Procesor",
         "offline": "Offline",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Błąd",
+        "unknown": "Nieznany"
     },
     "nzbget": {
         "rate": "Szybkość",
@@ -331,7 +331,7 @@
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
+        "error": "Błąd",
         "ping": "Ping"
     }
 }

From b393318084aecd8cd30b7a64ed4969e72aaaf824 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 20 Nov 2022 23:59:10 -0800
Subject: [PATCH 043/300] fix group sorting bug

---
 src/utils/config/api-response.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js
index d3561a55..645f45c6 100644
--- a/src/utils/config/api-response.js
+++ b/src/utils/config/api-response.js
@@ -90,12 +90,12 @@ export async function servicesResponse() {
 
     if (definedLayouts) {
       const layoutIndex = definedLayouts.findIndex(layout => layout === mergedGroup.name);
-      if (layoutIndex > -1) mergedGroups.splice(layoutIndex, 0, mergedGroup);
+      if (layoutIndex > -1) mergedGroups[layoutIndex] = mergedGroup;
       else mergedGroups.push(mergedGroup);
     } else {
       mergedGroups.push(mergedGroup);
     }
   });
 
-  return mergedGroups;
+  return mergedGroups.filter(g => g);
 }

From 92d456dbf4fab4c5b19da9730da5560ff55fbbdc Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 21 Nov 2022 00:29:20 -0800
Subject: [PATCH 044/300] fix group sort to prevent possible loss

---
 src/utils/config/api-response.js | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js
index 645f45c6..b8de959f 100644
--- a/src/utils/config/api-response.js
+++ b/src/utils/config/api-response.js
@@ -76,7 +76,8 @@ export async function servicesResponse() {
     ...new Set([discoveredServices.map((group) => group.name), configuredServices.map((group) => group.name)].flat()),
   ];
 
-  const mergedGroups = [];
+  const sortedGroups = [];
+  const unsortedGroups = [];
   const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
 
   mergedGroupsNames.forEach((groupName) => {
@@ -90,12 +91,12 @@ export async function servicesResponse() {
 
     if (definedLayouts) {
       const layoutIndex = definedLayouts.findIndex(layout => layout === mergedGroup.name);
-      if (layoutIndex > -1) mergedGroups[layoutIndex] = mergedGroup;
-      else mergedGroups.push(mergedGroup);
+      if (layoutIndex > -1) sortedGroups[layoutIndex] = mergedGroup;
+      else unsortedGroups.push(mergedGroup);
     } else {
-      mergedGroups.push(mergedGroup);
+      unsortedGroups.push(mergedGroup);
     }
   });
 
-  return mergedGroups.filter(g => g);
+  return [...sortedGroups.filter(g => g), ...unsortedGroups];
 }

From 4584384bebbc275614a314989c0d5e84cd338725 Mon Sep 17 00:00:00 2001
From: Bruno Rossetto <bruno.rossetto@sottelli.com>
Date: Mon, 21 Nov 2022 17:06:11 -0300
Subject: [PATCH 045/300] Fix error on refresh sending DATA var undefined on
 first time

---
 src/widgets/changedetectionio/component.jsx | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx
index 0a4ce8d2..6f98df6b 100644
--- a/src/widgets/changedetectionio/component.jsx
+++ b/src/widgets/changedetectionio/component.jsx
@@ -14,6 +14,11 @@ export default function Component({ service }) {
   if (error) {
     return <Container error={error} />;
   }
+
+  if (!data) {
+    return <Container service={service} />;
+  }
+
   const totalObserved = Object.keys(data).length;
   let diffsDetected = 0;
 

From 8a2d00440b14af28a8a25de6e9e87d08133f970e Mon Sep 17 00:00:00 2001
From: John Hollowell <jhollowe@johnhollowell.com>
Date: Tue, 22 Nov 2022 03:36:23 +0000
Subject: [PATCH 046/300] Add devcontainer configuration

devcontainers can be used by IDEs like VSCode to build the whole development environment in a container.
This allows you to keep dependencies, build, and all development aspects separated from any development.
It also allows contributors to instantly have a working, standardized development environment.
It also allows cloud development tools like GitHub Codespaces be automatically setup with the desired environment.

See https://containers.dev/ for more details
---
 .devcontainer/Dockerfile        |  6 ++++++
 .devcontainer/devcontainer.json | 27 +++++++++++++++++++++++++++
 .devcontainer/setup.sh          | 11 +++++++++++
 3 files changed, 44 insertions(+)
 create mode 100644 .devcontainer/Dockerfile
 create mode 100644 .devcontainer/devcontainer.json
 create mode 100755 .devcontainer/setup.sh

diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 00000000..9f20426f
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,6 @@
+ARG VARIANT="16-buster"
+FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:${VARIANT}
+
+RUN npm install -g pnpm
+
+ENV PATH="${PATH}:./node_modules/.bin"
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000..e547dd7e
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,27 @@
+{
+	"name": "homepage",
+	"build": {
+		"dockerfile": "Dockerfile",
+		"args": {
+			"VARIANT": "18-buster"
+		}
+	},
+	"customizations": {
+		"vscode": {
+			"extensions": [
+				"dbaeumer.vscode-eslint",
+				"mhutchie.git-graph",
+				"streetsidesoftware.code-spell-checker",
+			],
+			"settings": {
+				"eslint.format.enable": true,
+				"eslint.lintTask.enable": true,
+				"eslint.packageManager": "pnpm"
+			}
+		}
+	},
+	"postCreateCommand": ".devcontainer/setup.sh",
+	"forwardPorts": [
+		3000
+	]
+}
diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh
new file mode 100755
index 00000000..70bf96cf
--- /dev/null
+++ b/.devcontainer/setup.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+# Install Node packages
+pnpm install
+
+# Copy in skeleton configuration if there is no existing configuration
+if [ ! -d "config/" ]; then
+  echo "Adding skeleton config"
+  mkdir config/
+  cp -r src/skeleton/* config
+fi

From cadc1748198a594ccd27ebd0946650ed2c8bdcd3 Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Mon, 21 Nov 2022 11:40:34 +0000
Subject: [PATCH 047/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (244 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 5b9a7959..90cbdc86 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -24,8 +24,8 @@
         "mem": "Memoria",
         "cpu": "Procesador",
         "offline": "Desconectado",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Fallo",
+        "unknown": "Desconocido"
     },
     "emby": {
         "playing": "Reproduciendo",

From 451a2e17535e25c440326d5914e6df15e42244f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=91=D0=B5=D1=81=D1=87?=
 =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=BD=D0=BE=D0=B2?=
 <beschastnovigor@gmail.com>
Date: Mon, 21 Nov 2022 16:27:51 +0000
Subject: [PATCH 048/300] Translated using Weblate (Russian)

Currently translated at 13.9% (34 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 9e7fe526..02266106 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -3,7 +3,7 @@
         "missing_type": "Отсутствует тип виджета: {{type}}",
         "api_error": "Ошибка API",
         "status": "Статус",
-        "information": "Information",
+        "information": "Информация",
         "url": "URL",
         "raw_error": "Raw Error",
         "response_data": "Response Data"
@@ -15,7 +15,7 @@
         "total": "Всего",
         "free": "Свободно",
         "used": "Использовано",
-        "load": "Load",
+        "load": "Загрузка",
         "cpu": "CPU"
     },
     "docker": {
@@ -189,19 +189,19 @@
         "vms": "VMs"
     },
     "unifi": {
-        "users": "Users",
-        "uptime": "System Uptime",
-        "days": "Days",
+        "users": "Пользователи",
+        "uptime": "Время работы системы",
+        "days": "Дней",
         "wan": "WAN",
-        "lan_users": "LAN Users",
-        "wlan_users": "WLAN Users",
+        "lan_users": "Пользователи LAN",
+        "wlan_users": "Пользователи WLAN",
         "up": "UP",
         "down": "DOWN",
         "wait": "Please wait",
         "lan": "LAN",
         "wlan": "WLAN",
-        "devices": "Devices",
-        "lan_devices": "LAN Devices",
+        "devices": "Устройства",
+        "lan_devices": "Устройства подключённые по LAN",
         "wlan_devices": "WLAN Devices"
     },
     "plex": {

From c8d0b5ac4be232fc225252835f5c467ad0fc775a Mon Sep 17 00:00:00 2001
From: Milo Ivir <mail@milotype.de>
Date: Tue, 22 Nov 2022 22:41:06 +0000
Subject: [PATCH 049/300] Translated using Weblate (Croatian)

Currently translated at 100.0% (244 of 244 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index adb84f37..703f4e0a 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -70,8 +70,8 @@
         "mem": "MEM",
         "cpu": "CPU",
         "offline": "Nepovezan",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Greška",
+        "unknown": "Nepoznato"
     },
     "emby": {
         "playing": "Reprodukcija",
@@ -331,7 +331,7 @@
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
+        "error": "Greška",
         "ping": "Ping"
     }
 }

From 16561bac79e886a890fa2e36d2e85932dd7e5d9e Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Wed, 23 Nov 2022 15:27:04 +0100
Subject: [PATCH 050/300] Add scrutiny widget

---
 public/locales/en/common.json      |  5 ++++
 src/widgets/components.js          |  1 +
 src/widgets/scrutiny/component.jsx | 37 ++++++++++++++++++++++++++++++
 src/widgets/scrutiny/widget.js     | 17 ++++++++++++++
 src/widgets/widgets.js             |  2 ++
 5 files changed, 62 insertions(+)
 create mode 100644 src/widgets/scrutiny/component.jsx
 create mode 100644 src/widgets/scrutiny/widget.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 4d1b5774..0d1368a6 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -344,5 +344,10 @@
     "hdhomerun": {
         "channels": "Channels",
         "hd": "HD"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }
diff --git a/src/widgets/components.js b/src/widgets/components.js
index b781172b..d645d80d 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -34,6 +34,7 @@ const components = {
   readarr: dynamic(() => import("./readarr/component")),
   rutorrent: dynamic(() => import("./rutorrent/component")),
   sabnzbd: dynamic(() => import("./sabnzbd/component")),
+  scrutiny: dynamic(() => import("./scrutiny/component")),
   sonarr: dynamic(() => import("./sonarr/component")),
   speedtest: dynamic(() => import("./speedtest/component")),
   strelaysrv: dynamic(() => import("./strelaysrv/component")),
diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
new file mode 100644
index 00000000..2e44d778
--- /dev/null
+++ b/src/widgets/scrutiny/component.jsx
@@ -0,0 +1,37 @@
+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: scrutinyData, error: scrutinyError } = useWidgetAPI(widget, "summary");
+
+  if (scrutinyError) {
+    return <Container error={scrutinyError} />;
+  }
+
+  if (!scrutinyData) {
+    return (
+      <Container service={service}>
+        <Block label="scrutiny.passed" />
+        <Block label="scrutiny.failed" />
+        <Block label="scrutiny.unknown" />
+      </Container>
+    );
+  }
+
+  const deviceIds = Object.values(scrutinyData.data.summary);
+  
+  const passed = deviceIds.filter(deviceId => deviceId.device.device_status === 0)?.length || 0;
+  const failed = deviceIds.filter(deviceId => deviceId.device.device_status > 0 && deviceId.device.device_status <= 3)?.length || 0;
+  const unknown = deviceIds.length - (passed + failed) || 0;
+
+  return (
+    <Container service={service}>
+      <Block label="scrutiny.passed" value={passed} />
+      <Block label="scrutiny.failed" value={failed} />
+      <Block label="scrutiny.unknown" value={unknown} />
+    </Container>
+  );
+}
diff --git a/src/widgets/scrutiny/widget.js b/src/widgets/scrutiny/widget.js
new file mode 100644
index 00000000..8af7e04e
--- /dev/null
+++ b/src/widgets/scrutiny/widget.js
@@ -0,0 +1,17 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+  api: "{url}/api/{endpoint}",
+  proxyHandler: genericProxyHandler,
+
+  mappings: {
+    summary: {
+      endpoint: "summary",
+      validate: [
+        "data",
+      ]
+    },
+  },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index fe432832..3f1c6e08 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -29,6 +29,7 @@ import radarr from "./radarr/widget";
 import readarr from "./readarr/widget";
 import rutorrent from "./rutorrent/widget";
 import sabnzbd from "./sabnzbd/widget";
+import scrutiny from "./scrutiny/widget";
 import sonarr from "./sonarr/widget";
 import speedtest from "./speedtest/widget";
 import strelaysrv from "./strelaysrv/widget";
@@ -73,6 +74,7 @@ const widgets = {
   readarr,
   rutorrent,
   sabnzbd,
+  scrutiny,
   sonarr,
   speedtest,
   strelaysrv,

From 88201cc11ac3ce2334be98a41fac2807dcc7647f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 051/300] Translated using Weblate (German)

Currently translated at 91.0% (225 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
---
 public/locales/de/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index ecc4141c..ec57b3de 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "ping": "Ping",
         "error": "Error"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 7c587a9708fa48f74e4b482ed30170fa4371b573 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 052/300] Translated using Weblate (Spanish)

Currently translated at 98.7% (244 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 90cbdc86..06463aa9 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 9a558749512fbb8a85be95e5fb0413ffdbdfcd0f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 053/300] Translated using Weblate (French)

Currently translated at 98.7% (244 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index fc1ab208..15271c37 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Erreur",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 3332ba34fcaad6c30ca0448ccce72c20855a55f9 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 054/300] Translated using Weblate (Portuguese)

Currently translated at 46.5% (115 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
---
 public/locales/pt/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 654cdb7f..637610dd 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -344,5 +344,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From d6e6e57fa7664c92fad08e5b6d8f96a1ede3100c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 055/300] Translated using Weblate (Russian)

Currently translated at 13.7% (34 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 02266106..ebc73fe0 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "failed": "Failed",
+        "unknown": "Unknown",
+        "passed": "Passed"
     }
 }

From 4a885ec3a2e74bb0941e719c3fb1ff592fe97e54 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 056/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 66.8% (165 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
---
 public/locales/zh-CN/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index 1a25f9cd..b2438008 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 71d8fb63eb02d578376fa7e89acb3c295968c83b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:24 +0000
Subject: [PATCH 057/300] Translated using Weblate (Italian)

Currently translated at 92.7% (229 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
---
 public/locales/it/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index aa9c713a..8d632da5 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From c1d6653d227e66ed3dfd7f19a03568739d5db3b8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 058/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 31.9% (79 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
---
 public/locales/nb-NO/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json
index 5982f463..acdd7596 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 0c824dfb6783f8d29f57f31edf05c93e24795c5f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:25 +0000
Subject: [PATCH 059/300] Translated using Weblate (Vietnamese)

Currently translated at 17.8% (44 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
---
 public/locales/vi/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index 5ab0537e..19c0552b 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 0e5e7969234b2c80a26468df9aa4bea51f3a89f1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:25 +0000
Subject: [PATCH 060/300] Translated using Weblate (Dutch)

Currently translated at 25.5% (63 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
---
 public/locales/nl/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index 172edfd2..59133e3c 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 889643156b7725646973453c5835ccfa802011b4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:25 +0000
Subject: [PATCH 061/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.6% (9 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
---
 public/locales/zh-Hant/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index 3c61740a..db459342 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From ce909fd152a8a0022b61a51a8fb809446a86011c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 062/300] Translated using Weblate (Catalan)

Currently translated at 53.0% (131 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
---
 public/locales/ca/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index 1656dcc8..822b8e0c 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From ea4cfbcb03c21d12e44b2fd0591850fdf40d89c0 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 063/300] Translated using Weblate (Polish)

Currently translated at 96.3% (238 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index c12e044c..c4b86c3f 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Błąd",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 4dceb121aebe631b97a91d58ab787e88e6717704 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 064/300] Translated using Weblate (Swedish)

Currently translated at 52.6% (130 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
---
 public/locales/sv/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index a151bf35..0b12d73f 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 6166a3f7e222e47eb28202136b76af50ade646b4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 065/300] Translated using Weblate (Croatian)

Currently translated at 98.7% (244 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 703f4e0a..7d1c1809 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Greška",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From c6d28fb0e678d6af99b8e45daad416c1fd0daabd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 066/300] Translated using Weblate (Hungarian)

Currently translated at 43.7% (108 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
---
 public/locales/hu/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index 39f88a6e..6c5a0b13 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 4889dc100ecce16ad0d6269e8c7a39bb5565ba1e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 067/300] Translated using Weblate (Hebrew)

Currently translated at 40.8% (101 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
---
 public/locales/he/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index cb61cc0e..67feb2b5 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 4e92f0f55a784ed61c8285ab482402921b2c0617 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 068/300] Translated using Weblate (Romanian)

Currently translated at 55.4% (137 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
---
 public/locales/ro/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index bd302227..43c5d23e 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From f90c543afa6d506c006093197f3d7a6c2bf9fe32 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 069/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 47.3% (117 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
---
 public/locales/pt-BR/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json
index ca4f39ef..73c5dbd3 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 58c042249e377bccc8c73201c9e25c42b035eb03 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 070/300] Translated using Weblate (Yue)

Currently translated at 47.7% (118 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 public/locales/yue/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index 09f8ea7c..248abe21 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 8afb87aa6f27b533a39e0d24619cffc70fba6da6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 071/300] Translated using Weblate (Finnish)

Currently translated at 49.7% (123 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
---
 public/locales/fi/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index 916b8bc5..dc902d28 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 722aa4cf04db04b5c63ae195b4b58f9c8a9144e8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 072/300] Translated using Weblate (Telugu)

Currently translated at 87.8% (217 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
---
 public/locales/te/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index 85fb5846..3ce6c2fc 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 1e471c6ceda56fd875b439a00b0feaf252162e61 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 073/300] Translated using Weblate (Bulgarian)

Currently translated at 18.6% (46 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
---
 public/locales/bg/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index 5bdc7191..7c98c49f 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "ping": "Ping",
         "error": "Error"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 3caf6f7c2fb927672d0bb31c2f4fc944931ea781 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 074/300] Translated using Weblate (Turkish)

Currently translated at 93.5% (231 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
---
 public/locales/tr/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 687ee14f..383c0e9e 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 1aea5e177c0cdfd95f1c02ebd662969a8ec650a5 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 075/300] Translated using Weblate (Serbian)

Currently translated at 3.6% (9 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
---
 public/locales/sr/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index 94ab9462..8997a1c6 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 9f023f79425a31a082120d2f7f4926eac3be3d29 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:22 +0000
Subject: [PATCH 076/300] Translated using Weblate (Arabic)

Currently translated at 17.8% (44 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
---
 public/locales/ar/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index 06932fe8..b9370d8a 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 6cdf2a10494476cc1012d340ed0a91dfc6d28e97 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 077/300] Translated using Weblate (Czech)

Currently translated at 91.0% (225 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
---
 public/locales/cs/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index eaad12be..49f6c67d 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 52bb43a57391b965e456f5282848bdc219438fdc Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:23 +0000
Subject: [PATCH 078/300] Translated using Weblate (Danish)

Currently translated at 80.1% (198 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
---
 public/locales/da/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index 0350d7a2..698e902c 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 0299f0e4b7f3ed2a476a4b1104cbb3c8bb5a29b2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:25 +0000
Subject: [PATCH 079/300] Translated using Weblate (Malay)

Currently translated at 93.5% (231 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
---
 public/locales/ms/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index fa9cf98a..e720704d 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 7c06926aa76f3e0420459c72a331e1d8414ada94 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 23 Nov 2022 15:43:21 +0000
Subject: [PATCH 080/300] Translated using Weblate (Hindi)

Currently translated at 3.6% (9 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
---
 public/locales/hi/common.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index 6b3ff4a9..e43cf744 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -333,5 +333,10 @@
     "ping": {
         "error": "Error",
         "ping": "Ping"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
     }
 }

From 7266390491f9946d2aa415e4905514653ce2cb57 Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Wed, 23 Nov 2022 11:51:53 -0800
Subject: [PATCH 081/300] Add Deluge widget - Create semi-generic jsonrpc proxy
 handler - Refactor NZBGet to use jsonrpc proxy handler

closes #190
---
 public/locales/en/common.json       |  6 +++
 src/utils/proxy/handlers/jsonrpc.js | 82 +++++++++++++++++++++++++++++
 src/widgets/components.js           |  1 +
 src/widgets/deluge/component.jsx    | 52 ++++++++++++++++++
 src/widgets/deluge/proxy.js         | 63 ++++++++++++++++++++++
 src/widgets/deluge/widget.js        |  8 +++
 src/widgets/nzbget/proxy.js         | 40 --------------
 src/widgets/nzbget/widget.js        |  5 +-
 src/widgets/widgets.js              |  2 +
 9 files changed, 217 insertions(+), 42 deletions(-)
 create mode 100644 src/utils/proxy/handlers/jsonrpc.js
 create mode 100644 src/widgets/deluge/component.jsx
 create mode 100644 src/widgets/deluge/proxy.js
 create mode 100644 src/widgets/deluge/widget.js
 delete mode 100644 src/widgets/nzbget/proxy.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 4d1b5774..8098273e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -112,6 +112,12 @@
         "leech": "Leech",
         "seed": "Seed"
     },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
     "sonarr": {
         "wanted": "Wanted",
         "queued": "Queued",
diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js
new file mode 100644
index 00000000..9677fa50
--- /dev/null
+++ b/src/utils/proxy/handlers/jsonrpc.js
@@ -0,0 +1,82 @@
+import { JSONRPCClient, JSONRPCErrorException } from "json-rpc-2.0";
+
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
+import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+import widgets from "widgets/widgets";
+
+const logger = createLogger("jsonrpcProxyHandler");
+
+export async function sendJsonRpcRequest(url, method, params, username, password) {
+  const headers = {
+    "content-type": "application/json",
+    "accept": "application/json"
+  }
+
+  if (username && password) {
+    const authorization = Buffer.from(`${username}:${password}`).toString("base64");
+    headers.authorization = `Basic ${authorization}`;
+  }
+
+  const client = new JSONRPCClient(async (rpcRequest) => {
+    const httpRequestParams = {
+      method: "POST",
+      headers,
+      body: JSON.stringify(rpcRequest)
+    };
+
+    // eslint-disable-next-line no-unused-vars
+    const [status, contentType, data] = await httpProxy(url, httpRequestParams);
+    const dataString = data.toString();
+    if (status === 200) {
+      const json = JSON.parse(dataString);
+
+      // in order to get access to the underlying error object in the JSON response
+      // you must set `result` equal to undefined
+      if (json.error && (json.result === null)) {
+        json.result = undefined;
+      }
+      return client.receive(json);
+    }
+
+    return Promise.reject(new Error(dataString));
+  });
+
+  try {
+    const response = await client.request(method, params);
+    return [200, "application/json", JSON.stringify(response)];
+  }
+  catch (e) {
+    if (e instanceof JSONRPCErrorException) {
+      return [200, "application/json", JSON.stringify({result: null, error: {code: e.code, message: e.message}})];
+    }
+
+    logger.warn("Error calling JSONPRC endpoint: %s.  %s", url, e);
+    return [500, "application/json", JSON.stringify({result: null, error: {code: 2, message: e.toString()}})];
+  }
+}
+
+export default async function jsonrpcProxyHandler(req, res) {
+  const { group, service, endpoint: method } = req.query;
+
+  if (group && service) {
+    const widget = await getServiceWidget(group, service);
+    const api = widgets?.[widget.type]?.api;
+
+    if (!api) {
+      return res.status(403).json({ error: "Service does not support API calls" });
+    }
+
+    if (widget) {
+      const url = formatApiCall(api, { ...widget });
+
+      // eslint-disable-next-line no-unused-vars
+      const [status, contentType, data] = await sendJsonRpcRequest(url, method, null, widget.username, widget.password);
+      res.status(status).end(data);
+    }
+  }
+
+  logger.debug("Invalid or missing proxy service type '%s' in group '%s'", service, group);
+  return res.status(400).json({ error: "Invalid proxy service type" });
+}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index b781172b..e15ed4d8 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -7,6 +7,7 @@ const components = {
   bazarr: dynamic(() => import("./bazarr/component")),
   changedetectionio: dynamic(() => import("./changedetectionio/component")),
   coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
+  deluge: dynamic(() => import("./deluge/component")),
   docker: dynamic(() => import("./docker/component")),
   emby: dynamic(() => import("./emby/component")),
   gluetun: dynamic(() => import("./gluetun/component")),
diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx
new file mode 100644
index 00000000..40f8c672
--- /dev/null
+++ b/src/widgets/deluge/component.jsx
@@ -0,0 +1,52 @@
+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: torrentData, error: torrentError } = useWidgetAPI(widget);
+
+  if (torrentError) {
+    return <Container error={torrentError} />;
+  }
+
+  if (!torrentData) {
+    return (
+      <Container service={service}>
+        <Block label="deluge.leech" />
+        <Block label="deluge.download" />
+        <Block label="deluge.seed" />
+        <Block label="deluge.upload" />
+      </Container>
+    );
+  }
+
+  const { torrents } = torrentData;
+  let count = 0;
+  let rateDl = 0;
+  let rateUl = 0;
+  let completed = 0;
+  for (const key of Object.keys(torrents)) {
+    const torrent = torrents[key];
+    count += 1;
+    rateDl += torrent.download_payload_rate;
+    rateUl += torrent.upload_payload_rate;
+    completed += torrent.total_remaining === 0 ? 1 : 0;
+  }
+
+  const leech = count - completed || 0;
+
+  return (
+    <Container service={service}>
+      <Block label="deluge.leech" value={t("common.number", { value: leech })} />
+      <Block label="deluge.download" value={t("common.bitrate", { value: rateDl })} />
+      <Block label="deluge.seed" value={t("common.number", { value: completed })} />
+      <Block label="deluge.upload" value={t("common.bitrate", { value: rateUl })} />
+    </Container>
+  );
+}
diff --git a/src/widgets/deluge/proxy.js b/src/widgets/deluge/proxy.js
new file mode 100644
index 00000000..e9dac0d9
--- /dev/null
+++ b/src/widgets/deluge/proxy.js
@@ -0,0 +1,63 @@
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc";
+import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+import widgets from "widgets/widgets";
+
+const logger = createLogger("delugeProxyHandler");
+
+const dataMethod = "web.update_ui";
+const dataParams = [
+  ["queue", "name", "total_wanted", "state", "progress", "download_payload_rate", "upload_payload_rate", "total_remaining"],
+  {}
+];
+const loginMethod = "auth.login";
+
+async function sendRpc(url, method, params, username, password) {
+  const [status, contentType, data] = await sendJsonRpcRequest(url, method, params, username, password);
+  const json = JSON.parse(data.toString());
+  if (json?.error) {
+    if (json.error.code === 1) {
+      return [403, contentType, data];
+    }
+    return [500, contentType, data];
+  }
+
+  return [status, contentType, data];
+}
+
+function login(url, username, password) {
+  return sendRpc(url, loginMethod, [password], username, password);
+}
+
+export default async function delugeProxyHandler(req, res) {
+  const { group, service } = req.query;
+
+  if (!group || !service) {
+    logger.debug("Invalid or missing service '%s' or group '%s'", service, group);
+    return res.status(400).json({ error: "Invalid proxy service type" });
+  }
+
+  const widget = await getServiceWidget(group, service);
+
+  if (!widget) {
+    logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
+    return res.status(400).json({ error: "Invalid proxy service type" });
+  }
+
+  const api = widgets?.[widget.type]?.api
+  const url = new URL(formatApiCall(api, { ...widget }));
+
+  let [status, contentType, data] = await sendRpc(url, dataMethod, dataParams, widget.username, widget.password);
+  if (status === 403) {
+    [status, contentType, data] = await login(url, widget.username, widget.password);
+    if (status !== 200) {
+      return res.status(status).end(data);
+    }
+
+    // eslint-disable-next-line no-unused-vars
+    [status, contentType, data] = await sendRpc(url, dataMethod, dataParams, widget.username, widget.password);
+  }
+
+  return res.status(status).end(data);
+}
diff --git a/src/widgets/deluge/widget.js b/src/widgets/deluge/widget.js
new file mode 100644
index 00000000..b5518b66
--- /dev/null
+++ b/src/widgets/deluge/widget.js
@@ -0,0 +1,8 @@
+import delugeProxyHandler from "./proxy";
+
+const widget = {
+  api: "{url}/json",
+  proxyHandler: delugeProxyHandler,
+};
+
+export default widget;
diff --git a/src/widgets/nzbget/proxy.js b/src/widgets/nzbget/proxy.js
deleted file mode 100644
index 4feac781..00000000
--- a/src/widgets/nzbget/proxy.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { JSONRPCClient } from "json-rpc-2.0";
-
-import getServiceWidget from "utils/config/service-helpers";
-
-export default async function nzbgetProxyHandler(req, res) {
-  const { group, service, endpoint } = req.query;
-
-  if (group && service) {
-    const widget = await getServiceWidget(group, service);
-
-    if (widget) {
-      const constructedUrl = new URL(widget.url);
-      constructedUrl.pathname = "jsonrpc";
-
-      const authorization = Buffer.from(`${widget.username}:${widget.password}`).toString("base64");
-
-      const client = new JSONRPCClient((jsonRPCRequest) =>
-        fetch(constructedUrl.toString(), {
-          method: "POST",
-          headers: {
-            "content-type": "application/json",
-            authorization: `Basic ${authorization}`,
-          },
-          body: JSON.stringify(jsonRPCRequest),
-        }).then(async (response) => {
-          if (response.status === 200) {
-            const jsonRPCResponse = await response.json();
-            return client.receive(jsonRPCResponse);
-          }
-
-          return Promise.reject(new Error(response.statusText));
-        })
-      );
-
-      return res.send(await client.request(endpoint));
-    }
-  }
-
-  return res.status(400).json({ error: "Invalid proxy service type" });
-}
diff --git a/src/widgets/nzbget/widget.js b/src/widgets/nzbget/widget.js
index 975c8dea..841fb66c 100644
--- a/src/widgets/nzbget/widget.js
+++ b/src/widgets/nzbget/widget.js
@@ -1,7 +1,8 @@
-import nzbgetProxyHandler from "./proxy";
+import jsonrpcProxyHandler from "utils/proxy/handlers/jsonrpc";
 
 const widget = {
-  proxyHandler: nzbgetProxyHandler,
+  api: "{url}/jsonrpc",
+  proxyHandler: jsonrpcProxyHandler,
 };
 
 export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index fe432832..6d5c4088 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -4,6 +4,7 @@ import autobrr from "./autobrr/widget";
 import bazarr from "./bazarr/widget";
 import changedetectionio from "./changedetectionio/widget";
 import coinmarketcap from "./coinmarketcap/widget";
+import deluge from "./deluge/widget";
 import emby from "./emby/widget";
 import gluetun from "./gluetun/widget";
 import gotify from "./gotify/widget";
@@ -47,6 +48,7 @@ const widgets = {
   bazarr,
   changedetectionio,
   coinmarketcap,
+  deluge,
   emby,
   gluetun,
   gotify,

From bec62a09494916d81251c419e1d3916c5a820ff2 Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Wed, 23 Nov 2022 12:01:31 -0800
Subject: [PATCH 082/300] Fix linting errors

---
 src/widgets/deluge/component.jsx | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx
index 40f8c672..2e5296f1 100644
--- a/src/widgets/deluge/component.jsx
+++ b/src/widgets/deluge/component.jsx
@@ -27,19 +27,19 @@ export default function Component({ service }) {
   }
 
   const { torrents } = torrentData;
-  let count = 0;
+  const keys = Object.keys(torrents);
+
   let rateDl = 0;
   let rateUl = 0;
   let completed = 0;
-  for (const key of Object.keys(torrents)) {
-    const torrent = torrents[key];
-    count += 1;
+  for (let i = 0; i < keys.length; i += 1) {
+    const torrent = torrents[keys[i]];
     rateDl += torrent.download_payload_rate;
     rateUl += torrent.upload_payload_rate;
     completed += torrent.total_remaining === 0 ? 1 : 0;
   }
 
-  const leech = count - completed || 0;
+  const leech = keys.length - completed || 0;
 
   return (
     <Container service={service}>

From 165add7f53c0fbc1aebe02890456a4e1d25f7db2 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 23 Nov 2022 15:08:06 -0800
Subject: [PATCH 083/300] Handle deluge with 0 torrents

---
 src/widgets/deluge/component.jsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx
index 2e5296f1..6615cac0 100644
--- a/src/widgets/deluge/component.jsx
+++ b/src/widgets/deluge/component.jsx
@@ -27,7 +27,7 @@ export default function Component({ service }) {
   }
 
   const { torrents } = torrentData;
-  const keys = Object.keys(torrents);
+  const keys = torrents ? Object.keys(torrents) : [];
 
   let rateDl = 0;
   let rateUl = 0;

From ccfafe1b31d84b45082e14a8542fa4cff65b6de5 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 23 Nov 2022 20:07:34 -0800
Subject: [PATCH 084/300] fix fatal jsonrpc error, error handling, add
 content-length

---
 src/utils/proxy/handlers/jsonrpc.js | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js
index 9677fa50..5618d011 100644
--- a/src/utils/proxy/handlers/jsonrpc.js
+++ b/src/utils/proxy/handlers/jsonrpc.js
@@ -15,22 +15,22 @@ export async function sendJsonRpcRequest(url, method, params, username, password
   }
 
   if (username && password) {
-    const authorization = Buffer.from(`${username}:${password}`).toString("base64");
-    headers.authorization = `Basic ${authorization}`;
+    headers.authorization = `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`;
   }
 
   const client = new JSONRPCClient(async (rpcRequest) => {
+    const body = JSON.stringify(rpcRequest);
+    headers['content-length'] = Buffer.byteLength(body);
     const httpRequestParams = {
       method: "POST",
       headers,
-      body: JSON.stringify(rpcRequest)
+      body
     };
 
     // eslint-disable-next-line no-unused-vars
     const [status, contentType, data] = await httpProxy(url, httpRequestParams);
-    const dataString = data.toString();
     if (status === 200) {
-      const json = JSON.parse(dataString);
+      const json = JSON.parse(data.toString());
 
       // in order to get access to the underlying error object in the JSON response
       // you must set `result` equal to undefined
@@ -40,7 +40,7 @@ export async function sendJsonRpcRequest(url, method, params, username, password
       return client.receive(json);
     }
 
-    return Promise.reject(new Error(dataString));
+    return Promise.reject(data?.error ? data : new Error(data.toString()));
   });
 
   try {
@@ -49,6 +49,7 @@ export async function sendJsonRpcRequest(url, method, params, username, password
   }
   catch (e) {
     if (e instanceof JSONRPCErrorException) {
+      logger.warn("Error calling JSONPRC endpoint: %s.  %s", url, e.message);
       return [200, "application/json", JSON.stringify({result: null, error: {code: e.code, message: e.message}})];
     }
 
@@ -73,7 +74,7 @@ export default async function jsonrpcProxyHandler(req, res) {
 
       // eslint-disable-next-line no-unused-vars
       const [status, contentType, data] = await sendJsonRpcRequest(url, method, null, widget.username, widget.password);
-      res.status(status).end(data);
+      return res.status(status).end(data);
     }
   }
 

From 980a399516c5d37d18f6760c3b28988f03e71d20 Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Wed, 23 Nov 2022 19:04:15 +0000
Subject: [PATCH 085/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (247 of 247 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 06463aa9..a8cdb5f8 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -335,8 +335,8 @@
         "ping": "Ping"
     },
     "scrutiny": {
-        "passed": "Passed",
-        "failed": "Failed",
-        "unknown": "Unknown"
+        "passed": "Aprobado",
+        "failed": "Fallido",
+        "unknown": "Desconocido"
     }
 }

From 69af4286a967a4e440abd13ca02d54240241f419 Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Wed, 23 Nov 2022 17:55:15 +0000
Subject: [PATCH 086/300] Translated using Weblate (French)

Currently translated at 100.0% (247 of 247 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 15271c37..c20809a0 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -335,8 +335,8 @@
         "ping": "Ping"
     },
     "scrutiny": {
-        "passed": "Passed",
-        "failed": "Failed",
-        "unknown": "Unknown"
+        "passed": "Réussi",
+        "failed": "Échoué",
+        "unknown": "Inconnu"
     }
 }

From 9f03d18e49f6dd6a3a8df8c29b6c6dba2626c5e4 Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Thu, 24 Nov 2022 12:26:22 -0800
Subject: [PATCH 087/300] Move content-length calculation to http module -
 consolidate http / https functionality to single function

---
 src/utils/proxy/handlers/jsonrpc.js |  3 +--
 src/utils/proxy/http.js             | 41 +++++++++--------------------
 2 files changed, 14 insertions(+), 30 deletions(-)

diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js
index 5618d011..27427612 100644
--- a/src/utils/proxy/handlers/jsonrpc.js
+++ b/src/utils/proxy/handlers/jsonrpc.js
@@ -20,7 +20,6 @@ export async function sendJsonRpcRequest(url, method, params, username, password
 
   const client = new JSONRPCClient(async (rpcRequest) => {
     const body = JSON.stringify(rpcRequest);
-    headers['content-length'] = Buffer.byteLength(body);
     const httpRequestParams = {
       method: "POST",
       headers,
@@ -49,7 +48,7 @@ export async function sendJsonRpcRequest(url, method, params, username, password
   }
   catch (e) {
     if (e instanceof JSONRPCErrorException) {
-      logger.warn("Error calling JSONPRC endpoint: %s.  %s", url, e.message);
+      logger.debug("Error calling JSONPRC endpoint: %s.  %s", url, e.message);
       return [200, "application/json", JSON.stringify({result: null, error: {code: e.code, message: e.message}})];
     }
 
diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js
index 16b58bf7..e07f06ff 100644
--- a/src/utils/proxy/http.js
+++ b/src/utils/proxy/http.js
@@ -18,10 +18,15 @@ function addCookieHandler(url, params) {
   };
 }
 
-export function httpsRequest(url, params) {
+function handleRequest(requestor, url, params) {
   return new Promise((resolve, reject) => {
     addCookieHandler(url, params);
-    const request = https.request(url, params, (response) => {
+    if (params?.body) {
+      params.headers = params.headers ?? {};
+      params.headers['content-length'] = Buffer.byteLength(params.body);
+    }
+
+    const request = requestor.request(url, params, (response) => {
       const data = [];
 
       response.on("data", (chunk) => {
@@ -38,7 +43,7 @@ export function httpsRequest(url, params) {
       reject([500, error]);
     });
 
-    if (params.body) {
+    if (params?.body) {
       request.write(params.body);
     }
 
@@ -46,32 +51,12 @@ export function httpsRequest(url, params) {
   });
 }
 
+export function httpsRequest(url, params) {
+  return handleRequest(https, url, params);
+}
+
 export function httpRequest(url, params) {
-  return new Promise((resolve, reject) => {
-    addCookieHandler(url, params);
-    const request = http.request(url, params, (response) => {
-      const data = [];
-
-      response.on("data", (chunk) => {
-        data.push(chunk);
-      });
-
-      response.on("end", () => {
-        addCookieToJar(url, response.headers);
-        resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
-      });
-    });
-
-    request.on("error", (error) => {
-      reject([500, error]);
-    });
-
-    if (params.body) {
-      request.write(params.body);
-    }
-
-    request.end();
-  });
+  return handleRequest(http, url, params);
 }
 
 export async function httpProxy(url, params = {}) {

From a677a507b874a56468e5479b65d8f00e6728265a Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Fri, 25 Nov 2022 16:05:53 +0100
Subject: [PATCH 088/300] Added paperless-ngx widget

---
 public/locales/en/common.json          |  4 +++
 src/utils/config/service-helpers.js    |  3 ++
 src/widgets/components.js              |  1 +
 src/widgets/paperlessngx/component.jsx | 42 ++++++++++++++++++++++++++
 src/widgets/paperlessngx/widget.js     | 25 +++++++++++++++
 src/widgets/widgets.js                 |  2 ++
 6 files changed, 77 insertions(+)
 create mode 100644 src/widgets/paperlessngx/component.jsx
 create mode 100644 src/widgets/paperlessngx/widget.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 0d1368a6..063e33b5 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -349,5 +349,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index 15740d22..d8367de3 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -118,6 +118,7 @@ export function cleanServiceGroups(groups) {
           container,
           currency, // coinmarketcap widget
           symbols,
+          inboxTag, // paperlessngx widget
         } = cleanedService.widget;
 
         cleanedService.widget = {
@@ -129,6 +130,8 @@ export function cleanServiceGroups(groups) {
 
         if (currency) cleanedService.widget.currency = currency;
         if (symbols) cleanedService.widget.symbols = symbols;
+        
+        if (inboxTag) cleanedService.widget.inboxTag = inboxTag;
 
         if (type === "docker") {
           if (server) cleanedService.widget.server = server;
diff --git a/src/widgets/components.js b/src/widgets/components.js
index d645d80d..eb7c8127 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -23,6 +23,7 @@ const components = {
   nzbget: dynamic(() => import("./nzbget/component")),
   ombi: dynamic(() => import("./ombi/component")),
   overseerr: dynamic(() => import("./overseerr/component")),
+  paperlessngx: dynamic(() => import("./paperlessngx/component")),
   pihole: dynamic(() => import("./pihole/component")),
   plex: dynamic(() => import("./plex/component")),
   portainer: dynamic(() => import("./portainer/component")),
diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx
new file mode 100644
index 00000000..131c0419
--- /dev/null
+++ b/src/widgets/paperlessngx/component.jsx
@@ -0,0 +1,42 @@
+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: inboxData, error: inboxError } = useWidgetAPI(widget, "inbox",
+  {
+    query: `tag:${widget.inboxTag}`,
+    format: "json",
+    fields: "count"
+  });
+
+
+  const { data: documentData, error: documentError } = useWidgetAPI(widget, "documents",
+  {
+    fields: "count",
+    format: "json",
+  });
+
+  if (inboxError || documentError) {
+    const finalError = inboxError ?? documentError;
+    return <Container error={finalError} />;
+  }
+
+  if (!inboxData || !documentData) {
+    return (
+      <Container service={service}>
+        <Block label="paperlessngx.inbox" />
+        <Block label="paperlessngx.total" />
+      </Container>
+    );
+  }
+
+  return (
+    <Container service={service}>
+      <Block label="paperlessngx.inbox" value={inboxData.count} />
+      <Block label="paperlessngx.total" value={documentData.count} />
+    </Container>
+  );
+}
diff --git a/src/widgets/paperlessngx/widget.js b/src/widgets/paperlessngx/widget.js
new file mode 100644
index 00000000..9671a053
--- /dev/null
+++ b/src/widgets/paperlessngx/widget.js
@@ -0,0 +1,25 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+  api: "{url}/api/{endpoint}",
+  proxyHandler: genericProxyHandler,
+
+  mappings: {
+    "inbox": {
+      endpoint: "documents/",
+      params: ["format", "query", "fields"],
+      validate: [
+        "count"
+      ]
+    },
+    "documents": {
+      endpoint: "documents/",
+      params: ["format", "fields"],
+      validate: [
+        "count"
+      ]
+    },
+  },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 3f1c6e08..2d2f453d 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -18,6 +18,7 @@ import npm from "./npm/widget";
 import nzbget from "./nzbget/widget";
 import ombi from "./ombi/widget";
 import overseerr from "./overseerr/widget";
+import paperlessngx from "./paperlessngx/widget";
 import pihole from "./pihole/widget";
 import plex from "./plex/widget";
 import portainer from "./portainer/widget";
@@ -63,6 +64,7 @@ const widgets = {
   nzbget,
   ombi,
   overseerr,
+  paperlessngx,
   pihole,
   plex,
   portainer,

From a488cc0115f9a4b9da8d6b7bb5556140cfe745c3 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Fri, 25 Nov 2022 08:23:12 -0800
Subject: [PATCH 089/300] Use statistics endpoint for paperless-ngx

---
 src/utils/config/service-helpers.js    |  3 ---
 src/widgets/paperlessngx/component.jsx | 25 ++++++-------------------
 src/widgets/paperlessngx/widget.js     | 14 +++-----------
 3 files changed, 9 insertions(+), 33 deletions(-)

diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index d8367de3..15740d22 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -118,7 +118,6 @@ export function cleanServiceGroups(groups) {
           container,
           currency, // coinmarketcap widget
           symbols,
-          inboxTag, // paperlessngx widget
         } = cleanedService.widget;
 
         cleanedService.widget = {
@@ -130,8 +129,6 @@ export function cleanServiceGroups(groups) {
 
         if (currency) cleanedService.widget.currency = currency;
         if (symbols) cleanedService.widget.symbols = symbols;
-        
-        if (inboxTag) cleanedService.widget.inboxTag = inboxTag;
 
         if (type === "docker") {
           if (server) cleanedService.widget.server = server;
diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx
index 131c0419..d0c2e12f 100644
--- a/src/widgets/paperlessngx/component.jsx
+++ b/src/widgets/paperlessngx/component.jsx
@@ -5,26 +5,13 @@ import useWidgetAPI from "utils/proxy/use-widget-api";
 export default function Component({ service }) {
   const { widget } = service;
 
-  const { data: inboxData, error: inboxError } = useWidgetAPI(widget, "inbox",
-  {
-    query: `tag:${widget.inboxTag}`,
-    format: "json",
-    fields: "count"
-  });
+  const { data: statisticsData, error: statisticsError } = useWidgetAPI(widget, "statistics");
 
-
-  const { data: documentData, error: documentError } = useWidgetAPI(widget, "documents",
-  {
-    fields: "count",
-    format: "json",
-  });
-
-  if (inboxError || documentError) {
-    const finalError = inboxError ?? documentError;
-    return <Container error={finalError} />;
+  if (statisticsError) {
+    return <Container error={statisticsError} />;
   }
 
-  if (!inboxData || !documentData) {
+  if (!statisticsData) {
     return (
       <Container service={service}>
         <Block label="paperlessngx.inbox" />
@@ -35,8 +22,8 @@ export default function Component({ service }) {
 
   return (
     <Container service={service}>
-      <Block label="paperlessngx.inbox" value={inboxData.count} />
-      <Block label="paperlessngx.total" value={documentData.count} />
+      {statisticsData.documents_inbox !== undefined && <Block label="paperlessngx.inbox" value={statisticsData.documents_inbox} />}
+      <Block label="paperlessngx.total" value={statisticsData.documents_total} />
     </Container>
   );
 }
diff --git a/src/widgets/paperlessngx/widget.js b/src/widgets/paperlessngx/widget.js
index 9671a053..8af8079d 100644
--- a/src/widgets/paperlessngx/widget.js
+++ b/src/widgets/paperlessngx/widget.js
@@ -5,18 +5,10 @@ const widget = {
   proxyHandler: genericProxyHandler,
 
   mappings: {
-    "inbox": {
-      endpoint: "documents/",
-      params: ["format", "query", "fields"],
+    "statistics": {
+      endpoint: "statistics/?format=json",
       validate: [
-        "count"
-      ]
-    },
-    "documents": {
-      endpoint: "documents/",
-      params: ["format", "fields"],
-      validate: [
-        "count"
+        "documents_total"
       ]
     },
   },

From 17f6c15df5d9fd716ad3e463af2246d16af57e80 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 090/300] Translated using Weblate (German)

Currently translated at 90.3% (225 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
---
 public/locales/de/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index ec57b3de..fd9b1648 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From fb0c40bbac7f1ca9fced72cb577574b4c670a01e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 091/300] Translated using Weblate (Spanish)

Currently translated at 99.1% (247 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index a8cdb5f8..0ebde722 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -338,5 +338,9 @@
         "passed": "Aprobado",
         "failed": "Fallido",
         "unknown": "Desconocido"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 7137508287a6c0dd4ebebcdda8be4dd186d4feb6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 092/300] Translated using Weblate (French)

Currently translated at 99.1% (247 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index c20809a0..ae7a8a6a 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -338,5 +338,9 @@
         "passed": "Réussi",
         "failed": "Échoué",
         "unknown": "Inconnu"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 059fe69ff0e1c60fc446b6ca3baa6509eaf1de49 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 093/300] Translated using Weblate (Portuguese)

Currently translated at 46.1% (115 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
---
 public/locales/pt/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 637610dd..53889ec3 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -349,5 +349,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 318fc0c2d5b05cd031e1eb9a4f27d9fe71ee7595 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 094/300] Translated using Weblate (Russian)

Currently translated at 13.6% (34 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index ebc73fe0..9cef572a 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -338,5 +338,9 @@
         "failed": "Failed",
         "unknown": "Unknown",
         "passed": "Passed"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 60815e0f7dd194e966e51efdba9729d1b4f48474 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 095/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 66.2% (165 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
---
 public/locales/zh-CN/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index b2438008..4fe0901c 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 8dfa586e46549fb58ec7e3de358d2ba4e72a43a1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 096/300] Translated using Weblate (Italian)

Currently translated at 91.9% (229 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
---
 public/locales/it/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index 8d632da5..228f4a4b 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 5fe90708395639d79e548c2733bf0e116bb1cbed Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 097/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 31.7% (79 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
---
 public/locales/nb-NO/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json
index acdd7596..c7c4165b 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 9abc92f54e11d178f3199c8d535037f6f7cdd173 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 098/300] Translated using Weblate (Vietnamese)

Currently translated at 17.6% (44 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
---
 public/locales/vi/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index 19c0552b..f888dcc6 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 68245e71e9af85b3dd565df7e59c950f3a70109c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 099/300] Translated using Weblate (Dutch)

Currently translated at 25.3% (63 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
---
 public/locales/nl/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index 59133e3c..78d6242c 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From e4c315bfb94b0a3c6eb2412eab92f2ce727fd578 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 100/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.6% (9 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
---
 public/locales/zh-Hant/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index db459342..ab436b0f 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 8b57b34986bf531faf569a2003973c750368de85 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 101/300] Translated using Weblate (Catalan)

Currently translated at 52.6% (131 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
---
 public/locales/ca/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index 822b8e0c..7fa624e6 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 8cbe013fd43db4d67bc90bcbc21e2386374ae5d6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 102/300] Translated using Weblate (Polish)

Currently translated at 95.5% (238 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index c4b86c3f..9a354ac7 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 60c919dcfab6608ae3bd875b96ca0f452ec3ebdd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 103/300] Translated using Weblate (Swedish)

Currently translated at 52.2% (130 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
---
 public/locales/sv/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index 0b12d73f..0116e49a 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 4e310e513360ec5aba7265b7bab301dbacb81356 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 104/300] Translated using Weblate (Croatian)

Currently translated at 97.9% (244 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 7d1c1809..b3da36b2 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 763b9abda0ace8212b30009e1d71d4e0c1d6037e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 105/300] Translated using Weblate (Hungarian)

Currently translated at 43.3% (108 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
---
 public/locales/hu/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index 6c5a0b13..02fbc6e1 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 646555a215fa15af8d771f6d4176d039d6f117d2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 106/300] Translated using Weblate (Hebrew)

Currently translated at 40.5% (101 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
---
 public/locales/he/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index 67feb2b5..51f32a17 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From f48a755e715ed233a488deaafb9105c73095e19f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 107/300] Translated using Weblate (Romanian)

Currently translated at 55.0% (137 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
---
 public/locales/ro/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index 43c5d23e..1e4aa484 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From f7db29a51ffedccf60aa03cb1cdd91b1340b3353 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 108/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 46.9% (117 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
---
 public/locales/pt-BR/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json
index 73c5dbd3..ed86cc9a 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From c5461f51a7fe60ba57676e652c39d9175f70c837 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:16 +0000
Subject: [PATCH 109/300] Translated using Weblate (Yue)

Currently translated at 47.3% (118 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 public/locales/yue/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index 248abe21..d662e053 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 9c457bdcb92c943b8a2972b8309077efa067da66 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 110/300] Translated using Weblate (Finnish)

Currently translated at 49.3% (123 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
---
 public/locales/fi/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index dc902d28..ddb15085 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 76f4246161394a96987efe12e40509948724bdd6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 111/300] Translated using Weblate (Telugu)

Currently translated at 87.1% (217 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
---
 public/locales/te/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index 3ce6c2fc..f6d42c72 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 6aafebd2af2a7c980858bcf1f6a9b3bf443bd6c1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 112/300] Translated using Weblate (Bulgarian)

Currently translated at 18.4% (46 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
---
 public/locales/bg/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index 7c98c49f..741cb048 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 69dbcd40f366702048a9430a6ee5688e784b32e1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 113/300] Translated using Weblate (Turkish)

Currently translated at 92.7% (231 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
---
 public/locales/tr/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 383c0e9e..8ca0638d 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 3a78d44350ac2708f4aedf4cd5e4712cfa31eb79 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 114/300] Translated using Weblate (Serbian)

Currently translated at 3.6% (9 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
---
 public/locales/sr/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index 8997a1c6..6932c8df 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 0c87f0ce8649ab0d7d73926d58c5581744f0e820 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 115/300] Translated using Weblate (Arabic)

Currently translated at 17.6% (44 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
---
 public/locales/ar/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index b9370d8a..c82e5819 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From d313d398a2f3c0ea8807bfe55d99e059d68d46d5 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 116/300] Translated using Weblate (Czech)

Currently translated at 90.3% (225 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
---
 public/locales/cs/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index 49f6c67d..d153cb8f 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 6befcd521efa0124fc8061f99899c3ceb43659ce Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 117/300] Translated using Weblate (Danish)

Currently translated at 79.5% (198 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
---
 public/locales/da/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index 698e902c..1cc4a4a6 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From be39e50282f1af00bb951980eca55dfb72263b5f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:18 +0000
Subject: [PATCH 118/300] Translated using Weblate (Malay)

Currently translated at 92.7% (231 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
---
 public/locales/ms/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index e720704d..125e94ca 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 4406c650469afbfbef014ff35ff6ccbf90a65da4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 25 Nov 2022 16:44:17 +0000
Subject: [PATCH 119/300] Translated using Weblate (Hindi)

Currently translated at 3.6% (9 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
---
 public/locales/hi/common.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index e43cf744..891bbf28 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -338,5 +338,9 @@
         "passed": "Passed",
         "failed": "Failed",
         "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
     }
 }

From 034dbb956a7ee07583cc325859a715265213bb15 Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Fri, 25 Nov 2022 10:55:56 -0800
Subject: [PATCH 120/300] Change qBittorrent to no longer use fetch

---
 src/widgets/qbittorrent/proxy.js | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/src/widgets/qbittorrent/proxy.js b/src/widgets/qbittorrent/proxy.js
index 14271b65..e1ea7f90 100644
--- a/src/widgets/qbittorrent/proxy.js
+++ b/src/widgets/qbittorrent/proxy.js
@@ -1,30 +1,23 @@
 import { formatApiCall } from "utils/proxy/api-helpers";
-import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar";
 import { httpProxy } from "utils/proxy/http";
 import getServiceWidget from "utils/config/service-helpers";
 import createLogger from "utils/logger";
 
 const logger = createLogger("qbittorrentProxyHandler");
 
-async function login(widget, params) {
+async function login(widget) {
   logger.debug("qBittorrent is rejecting the request, logging in.");
   const loginUrl = new URL(`${widget.url}/api/v2/auth/login`).toString();
   const loginBody = `username=${encodeURI(widget.username)}&password=${encodeURI(widget.password)}`;
-
-  // using fetch intentionally, for login only, as the httpProxy method causes qBittorrent to
-  // complain about header encoding
-  return fetch(loginUrl, {
+  const loginParams = {
     method: "POST",
     headers: { "Content-Type": "application/x-www-form-urlencoded" },
     body: loginBody,
-  })
-  .then(async (response) => {
-    addCookieToJar(loginUrl, response.headers);
-    setCookieHeader(loginUrl, params);
-    const data = await response.text();
-    return [response.status, data];
-  })
-  .catch((err) => [500, err]);
+  }
+
+  // eslint-disable-next-line no-unused-vars
+  const [status, contentType, data] = await httpProxy(loginUrl, loginParams);
+  return [status, data];
 }
 
 export default async function qbittorrentProxyHandler(req, res) {
@@ -44,11 +37,10 @@ export default async function qbittorrentProxyHandler(req, res) {
 
   const url = new URL(formatApiCall("{url}/api/v2/{endpoint}", { endpoint, ...widget }));
   const params = { method: "GET", headers: {} };
-  setCookieHeader(url, params);
 
   let [status, contentType, data] = await httpProxy(url, params);
   if (status === 403) {
-    [status, data] = await login(widget, params);
+    [status, data] = await login(widget);
 
     if (status !== 200) {
       logger.error("HTTP %d logging in to qBittorrent.  Data: %s", status, data);
@@ -59,9 +51,9 @@ export default async function qbittorrentProxyHandler(req, res) {
       logger.error("Error logging in to qBittorrent: Data: %s", data);
       return res.status(401).end(data);
     }
-  }
 
-  [status, contentType, data] = await httpProxy(url, params);
+    [status, contentType, data] = await httpProxy(url, params);
+  }
 
   if (status !== 200) {
     logger.error("HTTP %d getting data from qBittorrent.  Data: %s", status, data);

From 7398b1d6abb9b4a4727c9488d7a5b42093a026ca Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Fri, 25 Nov 2022 19:57:51 +0000
Subject: [PATCH 121/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (249 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 0ebde722..608aa5c0 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -340,7 +340,7 @@
         "unknown": "Desconocido"
     },
     "paperlessngx": {
-        "inbox": "Inbox",
+        "inbox": "Bandeja de entrada",
         "total": "Total"
     }
 }

From f99f46d640bbeb0bb0ac697e19065c2cbb04789c Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Fri, 25 Nov 2022 18:06:06 +0000
Subject: [PATCH 122/300] Translated using Weblate (French)

Currently translated at 100.0% (249 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index ae7a8a6a..9dd21699 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -340,7 +340,7 @@
         "unknown": "Inconnu"
     },
     "paperlessngx": {
-        "inbox": "Inbox",
+        "inbox": "Boîte de réception",
         "total": "Total"
     }
 }

From c0e7130d627ac57783e7c461a85ae4007edfbfbb Mon Sep 17 00:00:00 2001
From: Milo Ivir <mail@milotype.de>
Date: Fri, 25 Nov 2022 23:54:03 +0000
Subject: [PATCH 123/300] Translated using Weblate (Croatian)

Currently translated at 100.0% (249 of 249 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index b3da36b2..a7fda2f7 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -335,12 +335,12 @@
         "ping": "Ping"
     },
     "scrutiny": {
-        "passed": "Passed",
-        "failed": "Failed",
-        "unknown": "Unknown"
+        "passed": "Prošlo",
+        "failed": "Neuspjelo",
+        "unknown": "Nepoznato"
     },
     "paperlessngx": {
-        "inbox": "Inbox",
-        "total": "Total"
+        "inbox": "Ulazni sandučić",
+        "total": "Ukupno"
     }
 }

From bf8fa65a5af15dcbf3e4a339a3a7743d2b6bcfeb Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 124/300] Translated using Weblate (German)

Currently translated at 88.9% (225 of 253 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 fd9b1648..d0c70378 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2272c87f856c2d8ec42dd7da692c3e9b34caaa3c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 125/300] Translated using Weblate (Spanish)

Currently translated at 98.4% (249 of 253 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 608aa5c0..ce44dfce 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Bandeja de entrada",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 35bc61b9549a569db9aa3bb2d4a9ae21185e2b16 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 126/300] Translated using Weblate (French)

Currently translated at 98.4% (249 of 253 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 9dd21699..634d4c11 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Boîte de réception",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 674230b19e18c710367be13e0571aa42de62a9e6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 127/300] Translated using Weblate (Portuguese)

Currently translated at 45.4% (115 of 253 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 53889ec3..39d76a52 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -353,5 +353,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2b0c77cfa31011d8e38763dfec71ec93aab7f816 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 128/300] Translated using Weblate (Russian)

Currently translated at 13.4% (34 of 253 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 9cef572a..9945e521 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 0e25f9043cb7a683a7686645695b57d933738fe3 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 129/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 65.2% (165 of 253 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 4fe0901c..d761ef4d 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2472596acdc2e6b62685f2db20ab74cf64810555 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:46 +0000
Subject: [PATCH 130/300] Translated using Weblate (Italian)

Currently translated at 90.5% (229 of 253 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 228f4a4b..eef21acb 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ac5e752db64aac0d9179d249e7a876e267e494e0 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:45 +0000
Subject: [PATCH 131/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 31.2% (79 of 253 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 c7c4165b..59dee10e 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "leech": "Leech",
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From bd73d8bffa593f668a8eaeb112dc003797a36a82 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:46 +0000
Subject: [PATCH 132/300] Translated using Weblate (Vietnamese)

Currently translated at 17.3% (44 of 253 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 f888dcc6..ae177a6c 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From eb7fa3760306a95f78a877559fee786e4d2adff4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:46 +0000
Subject: [PATCH 133/300] Translated using Weblate (Dutch)

Currently translated at 24.9% (63 of 253 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 78d6242c..acd09495 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 122a380bb9e1dfa0b45d9e284be3da52fc720d24 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:46 +0000
Subject: [PATCH 134/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.5% (9 of 253 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 ab436b0f..b09bcfc5 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 22f47e6db3b6247160d8ce868b139ba7e75c241f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 135/300] Translated using Weblate (Catalan)

Currently translated at 51.7% (131 of 253 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 7fa624e6..b445fd32 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "seed": "Seed",
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech"
     }
 }

From aa9284b2e0b65efae9195e3a950685033cb4ab77 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 136/300] Translated using Weblate (Polish)

Currently translated at 94.0% (238 of 253 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 9a354ac7..603255b8 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c6467e9dddd040d24df5822fcab88336910ae77a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:42 +0000
Subject: [PATCH 137/300] Translated using Weblate (Swedish)

Currently translated at 51.3% (130 of 253 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 0116e49a..d71eb6f7 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "leech": "Leech",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From 8af9474408bf8386c11b6aeedc10262a2983f498 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:42 +0000
Subject: [PATCH 138/300] Translated using Weblate (Croatian)

Currently translated at 98.4% (249 of 253 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 a7fda2f7..63d6055f 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Ulazni sandučić",
         "total": "Ukupno"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 9beb28037866eb82029f7687dc4b12c54e6f17d5 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 139/300] Translated using Weblate (Hungarian)

Currently translated at 42.6% (108 of 253 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 02fbc6e1..a760107c 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "seed": "Seed",
+        "upload": "Upload",
+        "leech": "Leech"
     }
 }

From b68f5a4be1756b77f65848b1015376ee3a13e0da Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:42 +0000
Subject: [PATCH 140/300] Translated using Weblate (Hebrew)

Currently translated at 39.9% (101 of 253 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 51f32a17..93d41df7 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 89861fe5fb4ea53d6915584389c45f4b31b09212 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:42 +0000
Subject: [PATCH 141/300] Translated using Weblate (Romanian)

Currently translated at 54.1% (137 of 253 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 1e4aa484..a0ccb743 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 4c28d366f09a53cd40b60ee030eae31edec1eed9 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 142/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 46.2% (117 of 253 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 ed86cc9a..9ec148b0 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 8856177959400b634f86775db5544763de4b60ca Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 143/300] Translated using Weblate (Yue)

Currently translated at 46.6% (118 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 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 d662e053..9d0a0dae 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 32c84e9f9e3635a47a9f223083b9f2f899192842 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 144/300] Translated using Weblate (Finnish)

Currently translated at 48.6% (123 of 253 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 ddb15085..a4051145 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed",
+        "download": "Download"
     }
 }

From 9f91fda6a6e0014006206316c3b9a6486fa61de8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 145/300] Translated using Weblate (Telugu)

Currently translated at 85.7% (217 of 253 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 f6d42c72..3046eb10 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "seed": "Seed",
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech"
     }
 }

From e902ffa1049c6b0ddaec241a19433d091fc03afd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 146/300] Translated using Weblate (Bulgarian)

Currently translated at 18.1% (46 of 253 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 741cb048..c2cf2e68 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 3de68fd4de8f33c7ef6ad6bbc18f35e57b6b7892 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 147/300] Translated using Weblate (Turkish)

Currently translated at 91.3% (231 of 253 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 8ca0638d..93e75d12 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 08c5c65b11dbb8c7f6002691a9c57089997d811a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 148/300] Translated using Weblate (Serbian)

Currently translated at 3.5% (9 of 253 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 6932c8df..94bff3c2 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 023da6e79a922cd14b974381d5cbcdaaca96e1e2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 149/300] Translated using Weblate (Arabic)

Currently translated at 17.3% (44 of 253 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 c82e5819..4d864dff 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From f6fc9c2450b72bfbb90d6ea16672b8fefe2f7c50 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 150/300] Translated using Weblate (Czech)

Currently translated at 88.9% (225 of 253 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 d153cb8f..6d91c628 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed",
+        "download": "Download"
     }
 }

From 7087809f748ac28dafcc3418e24b4c32907af9d0 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:44 +0000
Subject: [PATCH 151/300] Translated using Weblate (Danish)

Currently translated at 78.2% (198 of 253 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 1cc4a4a6..606cce69 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ed220a7dc4abf36beb30b762426e4754c505c981 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:46 +0000
Subject: [PATCH 152/300] Translated using Weblate (Malay)

Currently translated at 91.3% (231 of 253 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 125e94ca..ac887b62 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 7743335f9eb2884ce90d1c93c902bc623fe1aedf Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Sat, 26 Nov 2022 20:22:43 +0000
Subject: [PATCH 153/300] Translated using Weblate (Hindi)

Currently translated at 3.5% (9 of 253 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 891bbf28..3fef196c 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -342,5 +342,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Total"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From f16bd919788ac6d1fcd094da8eff8531437ccf98 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 26 Nov 2022 15:12:15 -0800
Subject: [PATCH 154/300] fix version number missing

---
 src/components/version.jsx | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/components/version.jsx b/src/components/version.jsx
index bc142e92..cbb83e36 100644
--- a/src/components/version.jsx
+++ b/src/components/version.jsx
@@ -36,17 +36,14 @@ export default function Version() {
             {version} ({revision.substring(0, 7)}, {formatDate(buildTime)})
           </>
         ) : (
-          releaseData &&
-          compareVersions(latestRelease.tag_name, version) > 0 && (
-            <a
-              href={`https://github.com/benphelps/homepage/releases/tag/${version}`}
-              target="_blank"
-              rel="noopener noreferrer"
-              className="ml-2 text-xs text-theme-500 dark:text-theme-400 flex flex-row items-center"
-            >
-              {version} ({revision.substring(0, 7)}, {formatDate(buildTime)})
-            </a>
-          )
+          <a
+            href={`https://github.com/benphelps/homepage/releases/tag/${version}`}
+            target="_blank"
+            rel="noopener noreferrer"
+            className="ml-2 text-xs text-theme-500 dark:text-theme-400 flex flex-row items-center"
+          >
+            {version} ({revision.substring(0, 7)}, {formatDate(buildTime)})
+          </a>
         )}
       </span>
       {version === "main" || version === "dev" || version === "nightly"

From c1291b43a467ba6a961fc4db4fb23dc46cee8b8f Mon Sep 17 00:00:00 2001
From: FunsKiTo <josemartinezc95@gmail.com>
Date: Sun, 27 Nov 2022 03:58:39 +0000
Subject: [PATCH 155/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (253 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index ce44dfce..190d939b 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -344,9 +344,9 @@
         "total": "Total"
     },
     "deluge": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Descarga",
+        "upload": "Subida",
         "leech": "Leech",
-        "seed": "Seed"
+        "seed": "Semilla"
     }
 }

From 4f3f25457e973abffd9ee9e3158f8003b734f675 Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Sat, 26 Nov 2022 20:27:51 +0000
Subject: [PATCH 156/300] Translated using Weblate (French)

Currently translated at 100.0% (253 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 634d4c11..88f07109 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -344,8 +344,8 @@
         "total": "Total"
     },
     "deluge": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Récep.",
+        "upload": "Envoi",
         "leech": "Leech",
         "seed": "Seed"
     }

From 2631e15275f244b7abe983df45d0500e60ebe970 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 27 Nov 2022 07:33:25 -0800
Subject: [PATCH 157/300] add optional logs to report

---
 .github/ISSUE_TEMPLATE/bug_report.yml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index fbeb7902..2972922b 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -59,6 +59,16 @@ body:
       label: Configuration
       description: Please provide any relevant service, widget or otherwise related configuration here
       render: yaml
+  - type: textarea
+    id: container-logs
+    attributes:
+      label: Container Logs
+      description: Please review and provide any logs from the container, if relevant
+  - type: textarea
+    id: browser-logs
+    attributes:
+      label: Browser Logs
+      description: Please review and provide any relevant logs from the browser, if relevant
   - type: textarea
     id: other
     attributes:

From 07385dc91e0ab2d923f23255631d06dd4fe3be06 Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Sun, 27 Nov 2022 09:46:18 -0800
Subject: [PATCH 158/300] Add container health details to status

---
 src/components/services/status.jsx          | 16 ++++++++++++++++
 src/pages/api/docker/status/[...service].js |  1 +
 2 files changed, 17 insertions(+)

diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx
index 2d07e49e..c5fb93c9 100644
--- a/src/components/services/status.jsx
+++ b/src/components/services/status.jsx
@@ -13,6 +13,22 @@ export default function Status({ service }) {
   }
 
   if (data && data.status === "running") {
+    if (data.health === "starting") {
+      return (
+        <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.health}>
+          <div className="text-[8px] font-bold text-blue-500/80 uppercase">{data.health}</div>
+        </div>
+      );
+    }
+
+    if (data.health === "unhealthy") {
+      return (
+        <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.health}>
+          <div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{data.health}</div>
+        </div>
+      );
+    }
+
     return (
       <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
         <div className="text-[8px] font-bold text-emerald-500/80 uppercase">{data.status}</div>
diff --git a/src/pages/api/docker/status/[...service].js b/src/pages/api/docker/status/[...service].js
index 8330ac3d..2861a1e5 100644
--- a/src/pages/api/docker/status/[...service].js
+++ b/src/pages/api/docker/status/[...service].js
@@ -40,6 +40,7 @@ export default async function handler(req, res) {
 
     return res.status(200).json({
       status: info.State.Status,
+      health: info.State.Health?.Status
     });
   } catch {
     return res.status(500).send({

From aadedd186402d6ef52a7ab1044bb16a9c93063d8 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 27 Nov 2022 14:26:36 -0800
Subject: [PATCH 159/300] Fix MiBps label

Closes https://github.com/benphelps/homepage/issues/562

See https://en.wikipedia.org/wiki/Kilobyte
---
 next-i18next.config.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/next-i18next.config.js b/next-i18next.config.js
index c6e1f2fe..da83ed70 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -103,7 +103,7 @@ module.exports = {
           const bits = options.bits ? value : value / 8;
           const k = 1024;
           const dm = options.decimals ? options.decimals : 0;
-          const sizes = ["Bps", "Kbps", "Mbps", "Gbps", "Tbps", "Pbps", "Ebps", "Zbps", "Ybps"];
+          const sizes = ["Bps", "Kbps", "MiBps", "Gbps", "Tbps", "Pbps", "Ebps", "Zbps", "Ybps"];
 
           const i = Math.floor(Math.log(bits) / Math.log(k));
 

From e1f217ad80c35cf21db1fc21e310a55377402249 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 27 Nov 2022 14:34:49 -0800
Subject: [PATCH 160/300] fix all the byte units display labels to binary

see https://en.wikipedia.org/wiki/Kilobyte
---
 next-i18next.config.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/next-i18next.config.js b/next-i18next.config.js
index da83ed70..ee6eaaa1 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -103,7 +103,7 @@ module.exports = {
           const bits = options.bits ? value : value / 8;
           const k = 1024;
           const dm = options.decimals ? options.decimals : 0;
-          const sizes = ["Bps", "Kbps", "MiBps", "Gbps", "Tbps", "Pbps", "Ebps", "Zbps", "Ybps"];
+          const sizes = ["Bps", "KiBps", "MiBps", "GiBps", "TiBps", "PiBps", "EiBps", "ZiBps", "YiBps"];
 
           const i = Math.floor(Math.log(bits) / Math.log(k));
 

From e0edc2735df1bae91d7a91678fe09022b3b3cefe Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Sun, 27 Nov 2022 14:54:29 -0800
Subject: [PATCH 161/300] Add healthy status if available

---
 src/components/services/status.jsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx
index c5fb93c9..eaf32030 100644
--- a/src/components/services/status.jsx
+++ b/src/components/services/status.jsx
@@ -30,8 +30,8 @@ export default function Status({ service }) {
     }
 
     return (
-      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
-        <div className="text-[8px] font-bold text-emerald-500/80 uppercase">{data.status}</div>
+      <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.health ?? data.status}>
+        <div className="text-[8px] font-bold text-emerald-500/80 uppercase">{data.health ?? data.status}</div>
       </div>
     );
   }

From 04fbf315ee7b20d9c700721fac54a5d99dc45a18 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 27 Nov 2022 19:35:45 -0800
Subject: [PATCH 162/300] Fix startup errors on completely empty settings file

Closes #564
---
 src/utils/config/config.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/utils/config/config.js b/src/utils/config/config.js
index 0003c589..57a63f7b 100644
--- a/src/utils/config/config.js
+++ b/src/utils/config/config.js
@@ -32,5 +32,5 @@ export function getSettings() {
 
   const settingsYaml = join(process.cwd(), "config", "settings.yaml");
   const fileContents = readFileSync(settingsYaml, "utf8");
-  return yaml.load(fileContents);
+  return yaml.load(fileContents) ?? {};
 }
\ No newline at end of file

From c9f508d321bcf56f4b64b225325b63c8958314c7 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 27 Nov 2022 22:52:57 -0800
Subject: [PATCH 163/300] deluge doesnt use username

---
 src/widgets/deluge/proxy.js | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/widgets/deluge/proxy.js b/src/widgets/deluge/proxy.js
index e9dac0d9..371f7759 100644
--- a/src/widgets/deluge/proxy.js
+++ b/src/widgets/deluge/proxy.js
@@ -13,8 +13,8 @@ const dataParams = [
 ];
 const loginMethod = "auth.login";
 
-async function sendRpc(url, method, params, username, password) {
-  const [status, contentType, data] = await sendJsonRpcRequest(url, method, params, username, password);
+async function sendRpc(url, method, params) {
+  const [status, contentType, data] = await sendJsonRpcRequest(url, method, params);
   const json = JSON.parse(data.toString());
   if (json?.error) {
     if (json.error.code === 1) {
@@ -26,8 +26,8 @@ async function sendRpc(url, method, params, username, password) {
   return [status, contentType, data];
 }
 
-function login(url, username, password) {
-  return sendRpc(url, loginMethod, [password], username, password);
+function login(url, password) {
+  return sendRpc(url, loginMethod, [password]);
 }
 
 export default async function delugeProxyHandler(req, res) {
@@ -48,15 +48,15 @@ export default async function delugeProxyHandler(req, res) {
   const api = widgets?.[widget.type]?.api
   const url = new URL(formatApiCall(api, { ...widget }));
 
-  let [status, contentType, data] = await sendRpc(url, dataMethod, dataParams, widget.username, widget.password);
+  let [status, contentType, data] = await sendRpc(url, dataMethod, dataParams);
   if (status === 403) {
-    [status, contentType, data] = await login(url, widget.username, widget.password);
+    [status, contentType, data] = await login(url, widget.password);
     if (status !== 200) {
       return res.status(status).end(data);
     }
 
     // eslint-disable-next-line no-unused-vars
-    [status, contentType, data] = await sendRpc(url, dataMethod, dataParams, widget.username, widget.password);
+    [status, contentType, data] = await sendRpc(url, dataMethod, dataParams);
   }
 
   return res.status(status).end(data);

From d26fbe589baa73e68cdee5e565a1017605f643c5 Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Sun, 27 Nov 2022 13:28:57 +0000
Subject: [PATCH 164/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (253 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 190d939b..9957e239 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -53,7 +53,7 @@
         "wanted": "Buscando",
         "queued": "En cola",
         "movies": "Películas",
-        "missing": "No Encontrado"
+        "missing": "Perdido"
     },
     "readarr": {
         "wanted": "Buscando",

From 9de82559ca646f830e864568fcb2debd0515e4d8 Mon Sep 17 00:00:00 2001
From: Den Coder <denis100703@gmail.com>
Date: Sun, 27 Nov 2022 07:47:23 +0000
Subject: [PATCH 165/300] Translated using Weblate (Russian)

Currently translated at 18.9% (48 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 9945e521..541c8df1 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -6,7 +6,7 @@
         "information": "Информация",
         "url": "URL",
         "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "response_data": "Данные ответа"
     },
     "search": {
         "placeholder": "Поиск…"
@@ -16,7 +16,7 @@
         "free": "Свободно",
         "used": "Использовано",
         "load": "Загрузка",
-        "cpu": "CPU"
+        "cpu": "Процессор"
     },
     "docker": {
         "rx": "Rx",
@@ -24,14 +24,14 @@
         "mem": "Память",
         "cpu": "Процессор",
         "offline": "Не в сети",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Ошибка",
+        "unknown": "Неизвестный"
     },
     "emby": {
         "playing": "Воспроизведение",
         "transcoding": "Транскодирование",
         "bitrate": "Битрейт",
-        "no_active": "No Active Streams"
+        "no_active": "Нет активных потоков"
     },
     "tautulli": {
         "playing": "Воспроизведение",
@@ -197,7 +197,7 @@
         "wlan_users": "Пользователи WLAN",
         "up": "UP",
         "down": "DOWN",
-        "wait": "Please wait",
+        "wait": "Подождите",
         "lan": "LAN",
         "wlan": "WLAN",
         "devices": "Устройства",
@@ -215,8 +215,8 @@
         "wait": "Please wait"
     },
     "changedetectionio": {
-        "totalObserved": "Total Observed",
-        "diffsDetected": "Diffs Detected"
+        "totalObserved": "Всего наблюдаемых",
+        "diffsDetected": "Обнаружены различия"
     },
     "wmo": {
         "0-day": "Sunny",
@@ -331,8 +331,8 @@
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
-        "ping": "Ping"
+        "error": "Ошибка",
+        "ping": "Пинг"
     },
     "scrutiny": {
         "failed": "Failed",

From 812eb3d70fd0f565665d04fe17d7e18ba8318156 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 28 Nov 2022 10:42:21 -0800
Subject: [PATCH 166/300] Fix datetime react render error

---
 src/components/widgets/datetime/datetime.jsx | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx
index dceaf06a..7bfb42bc 100644
--- a/src/components/widgets/datetime/datetime.jsx
+++ b/src/components/widgets/datetime/datetime.jsx
@@ -15,22 +15,21 @@ const textSizes = {
 export default function DateTime({ options }) {
   const { text_size: textSize, format } = options;
   const { i18n } = useTranslation();
-  const [date, setDate] = useState(new Date());
-
+  const dateFormat = new Intl.DateTimeFormat(i18n.language, { ...format });
+  const [date, setDate] = useState("");
+  
   useEffect(() => {
     const interval = setInterval(() => {
-      setDate(new Date());
+      setDate(dateFormat.format(new Date()));
     }, 1000);
     return () => clearInterval(interval);
-  }, [setDate]);
-
-  const dateFormat = new Intl.DateTimeFormat(i18n.language, { ...format });
+  }, [date, setDate]);
 
   return (
     <div className="flex flex-col justify-center first:ml-0 ml-4">
       <div className="flex flex-row items-center grow justify-end">
         <span className={`text-theme-800 dark:text-theme-200 ${textSizes[textSize || "lg"]}`}>
-          {dateFormat.format(date)}
+          {date}
         </span>
       </div>
     </div>

From b235a89dc7a8170aceddeb7447a5658d1e7d9dd6 Mon Sep 17 00:00:00 2001
From: FunsKiTo <josemartinezc95@gmail.com>
Date: Mon, 28 Nov 2022 10:11:06 +0000
Subject: [PATCH 167/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (253 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 9957e239..3292ae1f 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -53,7 +53,7 @@
         "wanted": "Buscando",
         "queued": "En cola",
         "movies": "Películas",
-        "missing": "Perdido"
+        "missing": "Faltan"
     },
     "readarr": {
         "wanted": "Buscando",

From d65e919f57564ee8147e66ce0dd07b7cc2630c0d Mon Sep 17 00:00:00 2001
From: nicedc <wdcgoole@gmail.com>
Date: Mon, 28 Nov 2022 15:33:08 +0000
Subject: [PATCH 168/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 66.4% (168 of 253 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, 3 insertions(+), 3 deletions(-)

diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index d761ef4d..d6bcb3e7 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -295,9 +295,9 @@
         "indexers": "Indexers"
     },
     "watchtower": {
-        "containers_scanned": "Scanned",
-        "containers_updated": "Updated",
-        "containers_failed": "Failed"
+        "containers_scanned": "以扫描",
+        "containers_updated": "以升级",
+        "containers_failed": "失败"
     },
     "tubearchivist": {
         "downloads": "Queue",

From 3e9e379712f00b7f3371edc750f8e440247d6f82 Mon Sep 17 00:00:00 2001
From: Aiman Jalil <aiman.jalil.91@gmail.com>
Date: Mon, 28 Nov 2022 16:20:48 +0000
Subject: [PATCH 169/300] Translated using Weblate (Malay)

Currently translated at 100.0% (253 of 253 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
---
 public/locales/ms/common.json | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index ac887b62..b60a4efa 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -126,10 +126,10 @@
         "missing_type": "Jenis Widget Hilang: {{type}}",
         "api_error": "Masalah API",
         "status": "Status",
-        "information": "Information",
+        "information": "Informasi",
         "url": "URL",
-        "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "raw_error": "Ralat Mentah",
+        "response_data": "Data Respon"
     },
     "weather": {
         "current": "Lokasi Sekarang",
@@ -151,8 +151,8 @@
         "mem": "MEM",
         "cpu": "CPU",
         "offline": "Luar talian",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Ralat",
+        "unknown": "Tidak Diketahui"
     },
     "changedetectionio": {
         "totalObserved": "Jumlah Diperhatikan",
@@ -322,30 +322,30 @@
         "total": "Jumlah"
     },
     "gluetun": {
-        "public_ip": "Public IP",
-        "region": "Region",
-        "country": "Country"
+        "public_ip": "IP Awam",
+        "region": "Rantau",
+        "country": "Negara"
     },
     "hdhomerun": {
-        "channels": "Channels",
+        "channels": "Saluran",
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
+        "error": "Ralat",
         "ping": "Ping"
     },
     "scrutiny": {
-        "passed": "Passed",
-        "failed": "Failed",
-        "unknown": "Unknown"
+        "passed": "Lulus",
+        "failed": "Gagal",
+        "unknown": "Tidak Diketahui"
     },
     "paperlessngx": {
-        "inbox": "Inbox",
-        "total": "Total"
+        "inbox": "Peti Masuk",
+        "total": "Jumlah"
     },
     "deluge": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Muat Turun",
+        "upload": "Muat Naik",
         "leech": "Leech",
         "seed": "Seed"
     }

From 4c70bff95247ee64a9c11d95704e3509e2731628 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 28 Nov 2022 17:35:04 -0800
Subject: [PATCH 170/300] Show memory up to 1 decimal place

---
 src/components/widgets/resources/memory.jsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/widgets/resources/memory.jsx b/src/components/widgets/resources/memory.jsx
index 45263456..2888f907 100644
--- a/src/components/widgets/resources/memory.jsx
+++ b/src/components/widgets/resources/memory.jsx
@@ -52,7 +52,7 @@ export default function Memory({ expanded }) {
       <div className="flex flex-col ml-3 text-left min-w-[85px]">
         <span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
           <div className="pl-0.5">
-            {t("common.bytes", { value: data.memory.freeMemMb * 1024 * 1024, maximumFractionDigits: 0, binary: true })}
+            {t("common.bytes", { value: data.memory.freeMemMb * 1024 * 1024, maximumFractionDigits: 1, binary: true })}
           </div>
           <div className="pr-1">{t("resources.free")}</div>
         </span>
@@ -61,7 +61,7 @@ export default function Memory({ expanded }) {
             <div className="pl-0.5">
               {t("common.bytes", {
                 value: data.memory.totalMemMb * 1024 * 1024,
-                maximumFractionDigits: 0,
+                maximumFractionDigits: 1,
                 binary: true,
               })}
             </div>

From 44c2a1ecbd1304f1b37c9e0e41c08b16df76eacc Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 29 Nov 2022 09:25:39 -0800
Subject: [PATCH 171/300] fix react dep warning

---
 src/components/widgets/datetime/datetime.jsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx
index 7bfb42bc..f4c99de9 100644
--- a/src/components/widgets/datetime/datetime.jsx
+++ b/src/components/widgets/datetime/datetime.jsx
@@ -23,7 +23,7 @@ export default function DateTime({ options }) {
       setDate(dateFormat.format(new Date()));
     }, 1000);
     return () => clearInterval(interval);
-  }, [date, setDate]);
+  }, [date, setDate, dateFormat]);
 
   return (
     <div className="flex flex-col justify-center first:ml-0 ml-4">

From 69b1049c1780e46c37a288e73026fca5bf7a9e5c Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 29 Nov 2022 10:11:03 -0800
Subject: [PATCH 172/300] Graceful fallback when build args not supplied

See #578
---
 src/components/version.jsx | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/components/version.jsx b/src/components/version.jsx
index cbb83e36..9b1d8cde 100644
--- a/src/components/version.jsx
+++ b/src/components/version.jsx
@@ -8,9 +8,9 @@ import cachedFetch from "utils/proxy/cached-fetch";
 export default function Version() {
   const { t, i18n } = useTranslation();
 
-  const buildTime = process.env.NEXT_PUBLIC_BUILDTIME ?? new Date().toISOString();
-  const revision = process.env.NEXT_PUBLIC_REVISION ?? "dev";
-  const version = process.env.NEXT_PUBLIC_VERSION ?? "dev";
+  const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length ? process.env.NEXT_PUBLIC_BUILDTIME : new Date().toISOString();
+  const revision = process.env.NEXT_PUBLIC_REVISION?.length ? process.env.NEXT_PUBLIC_REVISION : "dev";
+  const version = process.env.NEXT_PUBLIC_VERSION?.length ?  process.env.NEXT_PUBLIC_VERSION : "dev";
 
   const cachedFetcher = (resource) => cachedFetch(resource, 5).then((res) => res.json());
 

From 2f523abe9d9bc7efe8da23c30e7825ab447c755d Mon Sep 17 00:00:00 2001
From: Myztillx <samuel.geist@gmail.com>
Date: Tue, 29 Nov 2022 13:19:52 -0500
Subject: [PATCH 173/300] Added processing count to overseerr

---
 public/locales/en/common.json       | 5 +++--
 src/widgets/overseerr/component.jsx | 2 ++
 src/widgets/overseerr/widget.js     | 1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 2ab724a8..dbef3ed3 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -155,6 +155,7 @@
     },
     "overseerr": {
         "pending": "Pending",
+        "processing": "Processing",
         "approved": "Approved",
         "available": "Available"
     },
@@ -313,7 +314,7 @@
         "child_bridges": "Child Bridges",
         "child_bridges_status": "{{ok}}/{{total}}"
     },
-    "watchtower":{
+    "watchtower": {
         "containers_scanned": "Scanned",
         "containers_updated": "Updated",
         "containers_failed": "Failed"
@@ -360,4 +361,4 @@
         "inbox": "Inbox",
         "total": "Total"
     }
-}
+}
\ No newline at end of file
diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx
index 6f5ae8ff..230a166c 100644
--- a/src/widgets/overseerr/component.jsx
+++ b/src/widgets/overseerr/component.jsx
@@ -15,6 +15,7 @@ export default function Component({ service }) {
     return (
       <Container service={service}>
         <Block label="overseerr.pending" />
+        <Block label="overseerr.processing" />
         <Block label="overseerr.approved" />
         <Block label="overseerr.available" />
       </Container>
@@ -24,6 +25,7 @@ export default function Component({ service }) {
   return (
     <Container service={service}>
       <Block label="overseerr.pending" value={statsData.pending} />
+      <Block label="overseerr.processing" value={statsData.processing} />
       <Block label="overseerr.approved" value={statsData.approved} />
       <Block label="overseerr.available" value={statsData.available} />
     </Container>
diff --git a/src/widgets/overseerr/widget.js b/src/widgets/overseerr/widget.js
index 945af5ed..cc80cffa 100644
--- a/src/widgets/overseerr/widget.js
+++ b/src/widgets/overseerr/widget.js
@@ -9,6 +9,7 @@ const widget = {
       endpoint: "request/count",
       validate: [
         "pending",
+        "processing",
         "approved",
         "available",
       ],

From 9e41163d6658960561ca2f8930d9d0b0aa77351a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 174/300] Translated using Weblate (German)

Currently translated at 88.5% (225 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
---
 public/locales/de/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index d0c70378..df105602 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Ausstehend",
         "approved": "Genehmigt",
-        "available": "Verfügbar"
+        "available": "Verfügbar",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Geschwindigkeit",

From d02c2cb244fea49c6d4302459b982c7e06143779 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 175/300] Translated using Weblate (Spanish)

Currently translated at 99.6% (253 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 3292ae1f..dce9bf1a 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Pendiente",
         "approved": "Aprobado",
-        "available": "Disponible"
+        "available": "Disponible",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Tasa",

From ea96fdabd94105b709e732ce532731a340a13e8e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 176/300] Translated using Weblate (French)

Currently translated at 99.6% (253 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 88f07109..457c967a 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "En attente",
         "approved": "Demande",
-        "available": "Disponible"
+        "available": "Disponible",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Débit",

From 00e50283eed9e8fbc84fc7988612c6930957ba21 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 177/300] Translated using Weblate (Portuguese)

Currently translated at 45.2% (115 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
---
 public/locales/pt/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 39d76a52..a010ed37 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -115,7 +115,8 @@
     "overseerr": {
         "pending": "Pendente",
         "approved": "Aprovado",
-        "available": "Disponível"
+        "available": "Disponível",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Taxa",

From 4864eae23d6c1801f001966f2f9fc5c2b0b4fb3b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 178/300] Translated using Weblate (Russian)

Currently translated at 18.8% (48 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
---
 public/locales/ru/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 541c8df1..6f6f7215 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Rate",

From d0b198d5e5e3dd0d52a08af9a9baa9a4917f6c47 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 179/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 66.1% (168 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
---
 public/locales/zh-CN/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json
index d6bcb3e7..5824af50 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "待办",
         "approved": "已批准",
-        "available": "可用"
+        "available": "可用",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "速率",

From 541bb3cc2b3938561c56a531ff94c6b952b72702 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 180/300] Translated using Weblate (Italian)

Currently translated at 90.1% (229 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
---
 public/locales/it/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index eef21acb..5fa50f7b 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "In attesa",
         "approved": "Approvati",
-        "available": "Disponibili"
+        "available": "Disponibili",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Rapporto",

From 4a519233a27c4cbe5307283ba66ce4258c206f9d Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 181/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 31.1% (79 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
---
 public/locales/nb-NO/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json
index 59dee10e..029af22e 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Venter",
         "approved": "Godkjent",
-        "available": "Tilgjengelig"
+        "available": "Tilgjengelig",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Takt",

From 0ba956f68529a0cf04f9b40beeb95f703cfe2950 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 182/300] Translated using Weblate (Vietnamese)

Currently translated at 17.3% (44 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
---
 public/locales/vi/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index ae177a6c..783f024d 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Đã duyệt",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Rate",

From 66cd9729496d75da3ea7f7502a452b7c9dc73d4d Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 183/300] Translated using Weblate (Dutch)

Currently translated at 24.8% (63 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
---
 public/locales/nl/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index acd09495..04d8f20d 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "sabnzbd": {
         "rate": "Rate",

From d08458c8952c7d64cad72e8d0182e63f553ebcbc Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:48 +0000
Subject: [PATCH 184/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.5% (9 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
---
 public/locales/zh-Hant/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index b09bcfc5..dc7b232e 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -89,7 +89,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Queries",

From a7d37c559ebb036f4f148d50e3c1c9a5f7db8e42 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 185/300] Translated using Weblate (Catalan)

Currently translated at 51.5% (131 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
---
 public/locales/ca/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index b445fd32..01f27b6d 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -100,7 +100,8 @@
     "overseerr": {
         "pending": "Pendent",
         "approved": "Aprovat",
-        "available": "Disponible"
+        "available": "Disponible",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Consultes",

From 257cf17c6d78751d1cd67c85ddf4dc04ad40929c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 186/300] Translated using Weblate (Polish)

Currently translated at 93.7% (238 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 603255b8..c37df7db 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -126,7 +126,8 @@
     "overseerr": {
         "pending": "Oczekiwane",
         "approved": "Zaakceptowane",
-        "available": "Dostępne"
+        "available": "Dostępne",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Zapytania",

From 0df4f63df12024d8f2b58c113b892716f3da1dca Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 187/300] Translated using Weblate (Swedish)

Currently translated at 51.1% (130 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
---
 public/locales/sv/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index d71eb6f7..04ac5683 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -104,7 +104,8 @@
     "overseerr": {
         "pending": "Avvaktar",
         "approved": "Godkända",
-        "available": "Tillgänglig"
+        "available": "Tillgänglig",
+        "processing": "Processing"
     },
     "pihole": {
         "blocked": "Blockerad",

From b8da8509dec006ff4f73c445607c7e0e1f881c28 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 188/300] Translated using Weblate (Croatian)

Currently translated at 98.0% (249 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 63d6055f..3f230e88 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -23,7 +23,8 @@
     "overseerr": {
         "available": "Dostupno",
         "pending": "Predstoji",
-        "approved": "Odobreno"
+        "approved": "Odobreno",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Upiti",

From c7d8e3afdd0416a90da5b952fe9fc9f251d452ac Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 189/300] Translated using Weblate (Hungarian)

Currently translated at 42.5% (108 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
---
 public/locales/hu/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index a760107c..6eb35db0 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -110,7 +110,8 @@
     "overseerr": {
         "pending": "Függőben",
         "approved": "Engedélyezett",
-        "available": "Elérhető"
+        "available": "Elérhető",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Lekérdezések",

From acde90cf72ebd40d95939288273b89f818bee3e3 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 190/300] Translated using Weblate (Hebrew)

Currently translated at 39.7% (101 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
---
 public/locales/he/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index 93d41df7..3ecaab7d 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -110,7 +110,8 @@
     "overseerr": {
         "pending": "ממתין",
         "approved": "מאושר",
-        "available": "זמין"
+        "available": "זמין",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "שאילתות",

From c185994c327e0606fb2aa40eec173b35d9e7de49 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 191/300] Translated using Weblate (Romanian)

Currently translated at 53.9% (137 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
---
 public/locales/ro/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index a0ccb743..12ae60b8 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -23,7 +23,8 @@
     "overseerr": {
         "pending": "În așteptare",
         "approved": "Aprobate",
-        "available": "Disponibile"
+        "available": "Disponibile",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Cereri",

From a81cc70722ea41728cd2c8839b568148ff1c17ef Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 192/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 46.0% (117 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
---
 public/locales/pt-BR/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json
index 9ec148b0..a7fa2154 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -128,7 +128,8 @@
     "overseerr": {
         "pending": "Pendente",
         "approved": "Aprovado",
-        "available": "Disponível"
+        "available": "Disponível",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Consultas",

From f59b6b69d902b4eabb1572f5985e7e5407c0601c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 193/300] Translated using Weblate (Yue)

Currently translated at 46.4% (118 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 public/locales/yue/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index 9d0a0dae..520bc943 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -110,7 +110,8 @@
     "overseerr": {
         "pending": "待定",
         "approved": "批准",
-        "available": "可用"
+        "available": "可用",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "查詢",

From 38585d9d6d98e7f70caffa6fc9c74be69437c817 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 194/300] Translated using Weblate (Finnish)

Currently translated at 48.4% (123 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
---
 public/locales/fi/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index a4051145..40c39bf0 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -110,7 +110,8 @@
     "overseerr": {
         "pending": "Vireillä",
         "approved": "Hyväksytty",
-        "available": "Saatavilla"
+        "available": "Saatavilla",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Kyselyjä",

From d9002b6e41516bafcb1870597b6066a4bae7f3d9 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 195/300] Translated using Weblate (Telugu)

Currently translated at 85.4% (217 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
---
 public/locales/te/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index 3046eb10..6f4351a6 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -122,7 +122,8 @@
     "overseerr": {
         "pending": "పెండింగ్",
         "approved": "ఆమోదించబడింది",
-        "available": "అందుబాటులో"
+        "available": "అందుబాటులో",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "ప్రశ్నలు",

From c3280f0143098d817c7037d4cf08a90b79ba413b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 196/300] Translated using Weblate (Bulgarian)

Currently translated at 18.1% (46 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
---
 public/locales/bg/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index c2cf2e68..ff40f72a 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -131,7 +131,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Queries",

From 5500b8a11556514c113a3b482c434dc22b38df1b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 197/300] Translated using Weblate (Turkish)

Currently translated at 90.9% (231 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
---
 public/locales/tr/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 93e75d12..808a9439 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -131,7 +131,8 @@
     "overseerr": {
         "pending": "Bekliyor",
         "approved": "Onaylı",
-        "available": "Kullanılabilir"
+        "available": "Kullanılabilir",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Sorgular",

From 8d4c01354e115b84c29851cbf8e04de2bd87b7a1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 198/300] Translated using Weblate (Serbian)

Currently translated at 3.5% (9 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
---
 public/locales/sr/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index 94bff3c2..a063bf04 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -131,7 +131,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Queries",

From a1fdc7b4a233745239e6b3daf2a47a02efb343a9 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 199/300] Translated using Weblate (Arabic)

Currently translated at 17.3% (44 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
---
 public/locales/ar/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index 4d864dff..2f88b39d 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -193,7 +193,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Queries",

From 54de1ff25643b9351530ff70ac7471c7f2abbce4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 200/300] Translated using Weblate (Czech)

Currently translated at 88.5% (225 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
---
 public/locales/cs/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index 6d91c628..4a50cfd5 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -147,7 +147,8 @@
     "overseerr": {
         "pending": "Čeká",
         "approved": "Schváleno",
-        "available": "Dostupný"
+        "available": "Dostupný",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Dotazy",

From 6a324f4554b527a5c6c666a793242055225df8ae Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:47 +0000
Subject: [PATCH 201/300] Translated using Weblate (Danish)

Currently translated at 77.9% (198 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
---
 public/locales/da/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index 606cce69..1a56eee4 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -23,7 +23,8 @@
     "overseerr": {
         "pending": "Afventer",
         "approved": "Godkendt",
-        "available": "Tilgængelig"
+        "available": "Tilgængelig",
+        "processing": "Processing"
     },
     "adguard": {
         "queries": "Forespørgsler",

From 7fe542d2e9cc7f13aa6b07cda7f3f2867847bb84 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:48 +0000
Subject: [PATCH 202/300] Translated using Weblate (Malay)

Currently translated at 99.6% (253 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
---
 public/locales/ms/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index b60a4efa..f6b6e9c6 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -220,7 +220,8 @@
     "overseerr": {
         "pending": "Tertangguh",
         "approved": "Lulus",
-        "available": "Sudah Ada"
+        "available": "Sudah Ada",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Permintaan",

From d2d0341dd93bf3896b1b3c02c81459d0ca7f15bd Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 18:34:46 +0000
Subject: [PATCH 203/300] Translated using Weblate (Hindi)

Currently translated at 3.5% (9 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
---
 public/locales/hi/common.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index 3fef196c..0b1b00dc 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -150,7 +150,8 @@
     "overseerr": {
         "pending": "Pending",
         "approved": "Approved",
-        "available": "Available"
+        "available": "Available",
+        "processing": "Processing"
     },
     "pihole": {
         "queries": "Queries",

From 7a390b38f50cf2aa049fe25e625e3aa77b5cfb5d Mon Sep 17 00:00:00 2001
From: phlostically <phlostically@mailinator.com>
Date: Tue, 29 Nov 2022 21:17:40 +0100
Subject: [PATCH 204/300] Added translation using Weblate (Esperanto)

---
 public/locales/eo/common.json | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 public/locales/eo/common.json

diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/public/locales/eo/common.json
@@ -0,0 +1 @@
+{}

From de27b10cf914db7d430113015af93365eb3107a7 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Tue, 29 Nov 2022 20:17:42 +0000
Subject: [PATCH 205/300] Translated using Weblate (Esperanto)

Currently translated at 100.0% (0 of 0 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
---
 public/locales/eo/common.json | 354 +++++++++++++++++++++++++++++++++-
 1 file changed, 353 insertions(+), 1 deletion(-)

diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json
index 0967ef42..e19718b3 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -1 +1,353 @@
-{}
+{
+    "widget": {
+        "missing_type": "Missing Widget Type: {{type}}",
+        "api_error": "API Error",
+        "information": "Information",
+        "status": "Status",
+        "url": "URL",
+        "raw_error": "Raw Error",
+        "response_data": "Response Data"
+    },
+    "weather": {
+        "current": "Current Location",
+        "allow": "Click to allow",
+        "updating": "Updating",
+        "wait": "Please wait"
+    },
+    "search": {
+        "placeholder": "Search…"
+    },
+    "resources": {
+        "cpu": "CPU",
+        "total": "Total",
+        "free": "Free",
+        "used": "Used",
+        "load": "Load"
+    },
+    "unifi": {
+        "users": "Users",
+        "uptime": "System Uptime",
+        "days": "Days",
+        "wan": "WAN",
+        "lan": "LAN",
+        "wlan": "WLAN",
+        "devices": "Devices",
+        "lan_devices": "LAN Devices",
+        "wlan_devices": "WLAN Devices",
+        "lan_users": "LAN Users",
+        "wlan_users": "WLAN Users",
+        "up": "UP",
+        "down": "DOWN",
+        "wait": "Please wait"
+    },
+    "docker": {
+        "rx": "RX",
+        "tx": "TX",
+        "mem": "MEM",
+        "cpu": "CPU",
+        "offline": "Offline",
+        "error": "Error",
+        "unknown": "Unknown"
+    },
+    "ping": {
+        "error": "Error",
+        "ping": "Ping"
+    },
+    "emby": {
+        "playing": "Playing",
+        "transcoding": "Transcoding",
+        "bitrate": "Bitrate",
+        "no_active": "No Active Streams"
+    },
+    "changedetectionio": {
+        "totalObserved": "Total Observed",
+        "diffsDetected": "Diffs Detected"
+    },
+    "tautulli": {
+        "playing": "Playing",
+        "transcoding": "Transcoding",
+        "bitrate": "Bitrate",
+        "no_active": "No Active Streams"
+    },
+    "nzbget": {
+        "rate": "Rate",
+        "remaining": "Remaining",
+        "downloaded": "Downloaded"
+    },
+    "plex": {
+        "streams": "Active Streams",
+        "movies": "Movies",
+        "tv": "TV Shows"
+    },
+    "sabnzbd": {
+        "rate": "Rate",
+        "queue": "Queue",
+        "timeleft": "Time Left"
+    },
+    "rutorrent": {
+        "active": "Active",
+        "upload": "Upload",
+        "download": "Download"
+    },
+    "transmission": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
+    "qbittorrent": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
+    "deluge": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
+    "sonarr": {
+        "wanted": "Wanted",
+        "queued": "Queued",
+        "series": "Series"
+    },
+    "radarr": {
+        "wanted": "Wanted",
+        "missing": "Missing",
+        "queued": "Queued",
+        "movies": "Movies"
+    },
+    "lidarr": {
+        "wanted": "Wanted",
+        "queued": "Queued",
+        "albums": "Albums"
+    },
+    "readarr": {
+        "wanted": "Wanted",
+        "queued": "Queued",
+        "books": "Books"
+    },
+    "bazarr": {
+        "missingEpisodes": "Missing Episodes",
+        "missingMovies": "Missing Movies"
+    },
+    "ombi": {
+        "pending": "Pending",
+        "approved": "Approved",
+        "available": "Available"
+    },
+    "jellyseerr": {
+        "pending": "Pending",
+        "approved": "Approved",
+        "available": "Available"
+    },
+    "overseerr": {
+        "pending": "Pending",
+        "processing": "Processing",
+        "approved": "Approved",
+        "available": "Available"
+    },
+    "pihole": {
+        "queries": "Queries",
+        "blocked": "Blocked",
+        "gravity": "Gravity"
+    },
+    "adguard": {
+        "queries": "Queries",
+        "blocked": "Blocked",
+        "filtered": "Filtered",
+        "latency": "Latency"
+    },
+    "speedtest": {
+        "upload": "Upload",
+        "download": "Download",
+        "ping": "Ping"
+    },
+    "portainer": {
+        "running": "Running",
+        "stopped": "Stopped",
+        "total": "Total"
+    },
+    "traefik": {
+        "routers": "Routers",
+        "services": "Services",
+        "middleware": "Middleware"
+    },
+    "navidrome": {
+        "nothing_streaming": "No Active Streams",
+        "please_wait": "Please Wait"
+    },
+    "npm": {
+        "enabled": "Enabled",
+        "disabled": "Disabled",
+        "total": "Total"
+    },
+    "coinmarketcap": {
+        "configure": "Configure one or more crypto currencies to track",
+        "1hour": "1 Hour",
+        "1day": "1 Day",
+        "7days": "7 Days",
+        "30days": "30 Days"
+    },
+    "gotify": {
+        "apps": "Applications",
+        "clients": "Clients",
+        "messages": "Messages"
+    },
+    "prowlarr": {
+        "enableIndexers": "Indexers",
+        "numberOfGrabs": "Grabs",
+        "numberOfQueries": "Queries",
+        "numberOfFailGrabs": "Fail Grabs",
+        "numberOfFailQueries": "Fail Queries"
+    },
+    "jackett": {
+        "configured": "Configured",
+        "errored": "Errored"
+    },
+    "strelaysrv": {
+        "numActiveSessions": "Sessions",
+        "numConnections": "Connections",
+        "dataRelayed": "Relayed",
+        "transferRate": "Rate"
+    },
+    "mastodon": {
+        "user_count": "Users",
+        "status_count": "Posts",
+        "domain_count": "Domains"
+    },
+    "authentik": {
+        "users": "Users",
+        "loginsLast24H": "Logins (24h)",
+        "failedLoginsLast24H": "Failed Logins (24h)"
+    },
+    "proxmox": {
+        "mem": "MEM",
+        "cpu": "CPU",
+        "lxc": "LXC",
+        "vms": "VMs"
+    },
+    "glances": {
+        "cpu": "CPU",
+        "mem": "MEM",
+        "wait": "Please wait"
+    },
+    "quicklaunch": {
+        "bookmark": "Bookmark",
+        "service": "Service"
+    },
+    "wmo": {
+        "0-day": "Sunny",
+        "0-night": "Clear",
+        "1-day": "Mainly Sunny",
+        "1-night": "Mainly Clear",
+        "2-day": "Partly Cloudy",
+        "2-night": "Partly Cloudy",
+        "3-day": "Cloudy",
+        "3-night": "Cloudy",
+        "45-day": "Foggy",
+        "45-night": "Foggy",
+        "48-day": "Foggy",
+        "48-night": "Foggy",
+        "51-day": "Light Drizzle",
+        "51-night": "Light Drizzle",
+        "53-day": "Drizzle",
+        "53-night": "Drizzle",
+        "55-day": "Heavy Drizzle",
+        "55-night": "Heavy Drizzle",
+        "56-day": "Light Freezing Drizzle",
+        "56-night": "Light Freezing Drizzle",
+        "57-day": "Freezing Drizzle",
+        "57-night": "Freezing Drizzle",
+        "61-day": "Light Rain",
+        "61-night": "Light Rain",
+        "63-day": "Rain",
+        "63-night": "Rain",
+        "65-day": "Heavy Rain",
+        "65-night": "Heavy Rain",
+        "66-day": "Freezing Rain",
+        "66-night": "Freezing Rain",
+        "67-day": "Freezing Rain",
+        "67-night": "Freezing Rain",
+        "71-day": "Light Snow",
+        "71-night": "Light Snow",
+        "73-day": "Snow",
+        "73-night": "Snow",
+        "75-day": "Heavy Snow",
+        "75-night": "Heavy Snow",
+        "77-day": "Snow Grains",
+        "77-night": "Snow Grains",
+        "80-day": "Light Showers",
+        "80-night": "Light Showers",
+        "81-day": "Showers",
+        "81-night": "Showers",
+        "82-day": "Heavy Showers",
+        "82-night": "Heavy Showers",
+        "85-day": "Snow Showers",
+        "85-night": "Snow Showers",
+        "86-day": "Snow Showers",
+        "86-night": "Snow Showers",
+        "95-day": "Thunderstorm",
+        "95-night": "Thunderstorm",
+        "96-day": "Thunderstorm With Hail",
+        "96-night": "Thunderstorm With Hail",
+        "99-day": "Thunderstorm With Hail",
+        "99-night": "Thunderstorm With Hail"
+    },
+    "homebridge": {
+        "available_update": "System",
+        "updates": "Updates",
+        "update_available": "Update Available",
+        "up_to_date": "Up to Date",
+        "child_bridges": "Child Bridges",
+        "child_bridges_status": "{{ok}}/{{total}}"
+    },
+    "watchtower": {
+        "containers_scanned": "Scanned",
+        "containers_updated": "Updated",
+        "containers_failed": "Failed"
+    },
+    "autobrr": {
+        "approvedPushes": "Approved",
+        "rejectedPushes": "Rejected",
+        "filters": "Filters",
+        "indexers": "Indexers"
+    },
+    "tubearchivist": {
+        "downloads": "Queue",
+        "videos": "Videos",
+        "channels": "Channels",
+        "playlists": "Playlists"
+    },
+    "truenas": {
+        "load": "System Load",
+        "uptime": "Uptime",
+        "alerts": "Alerts",
+        "time": "{{value, number(style: unit; unitDisplay: long;)}}"
+    },
+    "pyload": {
+        "speed": "Speed",
+        "active": "Active",
+        "queue": "Queue",
+        "total": "Total"
+    },
+    "gluetun": {
+        "public_ip": "Public IP",
+        "region": "Region",
+        "country": "Country"
+    },
+    "hdhomerun": {
+        "channels": "Channels",
+        "hd": "HD"
+    },
+    "scrutiny": {
+        "passed": "Passed",
+        "failed": "Failed",
+        "unknown": "Unknown"
+    },
+    "paperlessngx": {
+        "inbox": "Inbox",
+        "total": "Total"
+    }
+}

From c2230fb308c372edc083a17981544f5832a24acb Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 29 Nov 2022 13:26:35 -0800
Subject: [PATCH 206/300] Fix quick-launch z-index

Closes #582
---
 src/components/quicklaunch.jsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index f2c09db2..0427022d 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -112,13 +112,13 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
 
   return (
     <div className={classNames(
-      "relative z-10 ease-in-out duration-300 transition-opacity",
+      "relative z-20 ease-in-out duration-300 transition-opacity",
       hidden && !isOpen && "hidden",
       !hidden && isOpen && "opacity-100",
       !isOpen && "opacity-0",
     )} role="dialog" aria-modal="true">
       <div className="fixed inset-0 bg-gray-500 bg-opacity-50" />
-      <div className="fixed inset-0 z-10 overflow-y-auto">
+      <div className="fixed inset-0 z-20 overflow-y-auto">
         <div className="flex min-h-full min-w-full items-start justify-center text-center">
           <dialog className="mt-[10%] min-w-[80%] max-w-[90%] md:min-w-[40%] rounded-md p-0 block font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-50 dark:bg-theme-800">
             <input placeholder="Search" className={classNames(

From 4eabdc1e5ea0533fc6f8c1028434427d5f8a3fde Mon Sep 17 00:00:00 2001
From: Jason Fischer <jazzfisch@outlook.com>
Date: Tue, 29 Nov 2022 20:11:50 -0800
Subject: [PATCH 207/300] Add Synology DiskStation widget

closes #523
---
 public/locales/en/common.json         |  6 +++
 src/widgets/components.js             |  1 +
 src/widgets/diskstation/component.jsx | 41 ++++++++++++++++
 src/widgets/diskstation/proxy.js      | 70 +++++++++++++++++++++++++++
 src/widgets/diskstation/widget.js     | 14 ++++++
 src/widgets/widgets.js                |  2 +
 6 files changed, 134 insertions(+)
 create mode 100644 src/widgets/diskstation/component.jsx
 create mode 100644 src/widgets/diskstation/proxy.js
 create mode 100644 src/widgets/diskstation/widget.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index dbef3ed3..4273fff8 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -118,6 +118,12 @@
         "leech": "Leech",
         "seed": "Seed"
     },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
     "sonarr": {
         "wanted": "Wanted",
         "queued": "Queued",
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 68f11476..606d8291 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -8,6 +8,7 @@ const components = {
   changedetectionio: dynamic(() => import("./changedetectionio/component")),
   coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
   deluge: dynamic(() => import("./deluge/component")),
+  diskstation: dynamic(() => import("./diskstation/component")),
   docker: dynamic(() => import("./docker/component")),
   emby: dynamic(() => import("./emby/component")),
   gluetun: dynamic(() => import("./gluetun/component")),
diff --git a/src/widgets/diskstation/component.jsx b/src/widgets/diskstation/component.jsx
new file mode 100644
index 00000000..3a87eebc
--- /dev/null
+++ b/src/widgets/diskstation/component.jsx
@@ -0,0 +1,41 @@
+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: listData, error: listError } = useWidgetAPI(widget, "list");
+
+  if (listError) {
+    return <Container error={listError} />;
+  }
+
+  const tasks = listData?.data?.tasks;
+  if (!tasks) {
+    return (
+      <Container service={service}>
+        <Block label="diskstation.leech" />
+        <Block label="diskstation.download" />
+        <Block label="diskstation.seed" />
+        <Block label="diskstation.upload" />
+      </Container>
+    );
+  }
+
+  const rateDl = tasks.reduce((acc, task) => acc + (task?.additional?.transfer?.speed_download ?? 0), 0);
+  const rateUl = tasks.reduce((acc, task) => acc + (task?.additional?.transfer?.speed_upload ?? 0), 0);
+  const completed = tasks.filter((task) => task?.additional?.transfer?.size_downloaded === task?.size)?.length || 0;
+  const leech = tasks.length - completed || 0;
+
+  return (
+    <Container service={service}>
+      <Block label="diskstation.leech" value={t("common.number", { value: leech })} />
+      <Block label="diskstation.download" value={t("common.bitrate", { value: rateDl })} />
+      <Block label="diskstation.seed" value={t("common.number", { value: completed })} />
+      <Block label="diskstation.upload" value={t("common.bitrate", { value: rateUl })} />
+    </Container>
+  );
+}
diff --git a/src/widgets/diskstation/proxy.js b/src/widgets/diskstation/proxy.js
new file mode 100644
index 00000000..af767815
--- /dev/null
+++ b/src/widgets/diskstation/proxy.js
@@ -0,0 +1,70 @@
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
+import createLogger from "utils/logger";
+import widgets from "widgets/widgets";
+import getServiceWidget from "utils/config/service-helpers";
+
+const logger = createLogger("diskstationProxyHandler");
+const authApi = "{url}/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=login&account={username}&passwd={password}&session=DownloadStation&format=cookie"
+
+async function login(widget) {
+  const loginUrl = formatApiCall(authApi, widget);
+  const [status, contentType, data] = await httpProxy(loginUrl);
+  if (status !== 200) {
+    return [status, contentType, data];
+  }
+
+  const json = JSON.parse(data.toString());
+  if (json?.success !== true) {
+    // from https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/DownloadStation/All/enu/Synology_Download_Station_Web_API.pdf
+    /*
+      Code Description
+      400  No such account or incorrect password
+      401  Account disabled
+      402  Permission denied
+      403  2-step verification code required
+      404  Failed to authenticate 2-step verification code
+    */
+    let message = "Authentication failed.";
+    if (json?.error?.code >= 403) message += " 2FA enabled.";
+    logger.warn("Unable to login.  Code: %d", json?.error?.code);
+    return [401, "application/json", JSON.stringify({ code: json?.error?.code, message })];
+  }
+
+  return [status, contentType, data];
+}
+
+export default async function diskstationProxyHandler(req, res) {
+  const { group, service, endpoint } = req.query;
+
+  if (!group || !service) {
+    return res.status(400).json({ error: "Invalid proxy service type" });
+  }
+
+  const widget = await getServiceWidget(group, service);
+  const api = widgets?.[widget.type]?.api;
+  if (!api) {
+    return res.status(403).json({ error: "Service does not support API calls" });
+  }
+
+  const url = formatApiCall(api, { endpoint, ...widget });
+  let [status, contentType, data] = await httpProxy(url);
+  if (status !== 200) {
+    logger.debug("Error %d calling endpoint %s", status, url);
+    return res.status(status, data);
+  }
+
+  const json = JSON.parse(data.toString());
+  if (json?.success !== true) {
+    logger.debug("Logging in to DiskStation");
+    [status, contentType, data] = await login(widget);
+    if (status !== 200) {
+      return res.status(status).end(data)
+    }
+
+    [status, contentType, data] = await httpProxy(url);
+  }
+
+  if (contentType) res.setHeader("Content-Type", contentType);
+  return res.status(status).send(data);
+}
diff --git a/src/widgets/diskstation/widget.js b/src/widgets/diskstation/widget.js
new file mode 100644
index 00000000..71187425
--- /dev/null
+++ b/src/widgets/diskstation/widget.js
@@ -0,0 +1,14 @@
+import diskstationProxyHandler from "./proxy";
+
+const widget = {
+  api: "{url}/webapi/DownloadStation/task.cgi?api=SYNO.DownloadStation.Task&version=1&method={endpoint}",
+  proxyHandler: diskstationProxyHandler,
+
+  mappings: {
+    "list": {
+      endpoint: "list&additional=transfer",
+    },
+  },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 72417b77..24dd6e5f 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -5,6 +5,7 @@ import bazarr from "./bazarr/widget";
 import changedetectionio from "./changedetectionio/widget";
 import coinmarketcap from "./coinmarketcap/widget";
 import deluge from "./deluge/widget";
+import diskstation from "./diskstation/widget";
 import emby from "./emby/widget";
 import gluetun from "./gluetun/widget";
 import gotify from "./gotify/widget";
@@ -51,6 +52,7 @@ const widgets = {
   changedetectionio,
   coinmarketcap,
   deluge,
+  diskstation,
   emby,
   gluetun,
   gotify,

From 33bd349e430e91441fc2d3a51eaeb0ae0010041e Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 28 Nov 2022 20:10:44 -0800
Subject: [PATCH 208/300] Add fallback to HTTP GET for ping

---
 src/pages/api/ping.js | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/pages/api/ping.js b/src/pages/api/ping.js
index 79c7da0c..09934f06 100644
--- a/src/pages/api/ping.js
+++ b/src/pages/api/ping.js
@@ -15,11 +15,18 @@ export default async function handler(req, res) {
         });
     }
     
-    const startTime = performance.now();
-    const [status] = await httpProxy(pingURL, {
+    let startTime = performance.now();
+    let [status] = await httpProxy(pingURL, {
       method: "HEAD"
     });
-    const endTime = performance.now();
+    let endTime = performance.now();
+    
+    if (status >= 400 && status < 500) {
+      // try one more time as a GET in case HEAD is rejected for whatever reason
+      startTime = performance.now();
+      [status] = await httpProxy(pingURL);
+      endTime = performance.now();
+    }
 
     return res.status(200).json({
       status,

From 94678be85e1c3e0396c665d6fa667e6e947ca560 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 30 Nov 2022 00:46:35 -0800
Subject: [PATCH 209/300] retry ping > 500 too

---
 src/pages/api/ping.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pages/api/ping.js b/src/pages/api/ping.js
index 09934f06..66eab281 100644
--- a/src/pages/api/ping.js
+++ b/src/pages/api/ping.js
@@ -21,7 +21,7 @@ export default async function handler(req, res) {
     });
     let endTime = performance.now();
     
-    if (status >= 400 && status < 500) {
+    if (status >= 400) {
       // try one more time as a GET in case HEAD is rejected for whatever reason
       startTime = performance.now();
       [status] = await httpProxy(pingURL);

From 039d3df7d806fd9fc602aaf5eef33cc774ac93f7 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 30 Nov 2022 09:35:18 -0800
Subject: [PATCH 210/300] Add token expiration, tweak error handling for npm

---
 src/widgets/npm/proxy.js | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/widgets/npm/proxy.js b/src/widgets/npm/proxy.js
index ff15db62..d6499e58 100644
--- a/src/widgets/npm/proxy.js
+++ b/src/widgets/npm/proxy.js
@@ -20,12 +20,18 @@ async function login(loginUrl, username, password) {
   });
 
   const status = authResponse[0];
-  const data = JSON.parse(Buffer.from(authResponse[2]).toString());
+  let data = authResponse[2];
 
-  if (status === 200) {
-    cache.put(tokenCacheKey, data.token);
+  try {
+    data = JSON.parse(Buffer.from(authResponse[2]).toString());
+    
+    if (status === 200) {
+      const expiration = new Date(data.expires) - Date.now();
+      cache.put(tokenCacheKey, data.token, expiration - (5 * 60 * 1000)); // expiration -5 minutes
+    }
+  } catch (e) {
+    logger.error(`Error ${status} logging into npm`, authResponse[2]);
   }
-
   return [status, data.token ?? data];
 }
 
@@ -51,8 +57,8 @@ export default async function npmProxyHandler(req, res) {
       if (!token) {
         [status, token] = await login(loginUrl, widget.username, widget.password);
         if (status !== 200) {
-          logger.debug(`HTTTP ${status} logging into npm api: ${data}`);
-          return res.status(status).send(data);
+          logger.debug(`HTTTP ${status} logging into npm api: ${token}`);
+          return res.status(status).send(token);
         }
       }
 

From 98c8f2078dc3fc89210f959fbdb6a1223ee6f25c Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 30 Nov 2022 09:52:20 -0800
Subject: [PATCH 211/300] fix another react deps warning

---
 src/components/widgets/datetime/datetime.jsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx
index f4c99de9..88b25e2d 100644
--- a/src/components/widgets/datetime/datetime.jsx
+++ b/src/components/widgets/datetime/datetime.jsx
@@ -15,15 +15,15 @@ const textSizes = {
 export default function DateTime({ options }) {
   const { text_size: textSize, format } = options;
   const { i18n } = useTranslation();
-  const dateFormat = new Intl.DateTimeFormat(i18n.language, { ...format });
   const [date, setDate] = useState("");
   
   useEffect(() => {
+    const dateFormat = new Intl.DateTimeFormat(i18n.language, { ...format });
     const interval = setInterval(() => {
       setDate(dateFormat.format(new Date()));
     }, 1000);
     return () => clearInterval(interval);
-  }, [date, setDate, dateFormat]);
+  }, [date, setDate, i18n.language, format]);
 
   return (
     <div className="flex flex-col justify-center first:ml-0 ml-4">

From 1de017add9387a21262996fb62f079ff561d235e Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Wed, 30 Nov 2022 07:02:04 +0000
Subject: [PATCH 212/300] Translated using Weblate (French)

Currently translated at 100.0% (254 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 457c967a..ceddd133 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -105,7 +105,7 @@
         "pending": "En attente",
         "approved": "Demande",
         "available": "Disponible",
-        "processing": "Processing"
+        "processing": "En traitement"
     },
     "sabnzbd": {
         "rate": "Débit",

From 4bf9fa08dfb635f3537a3e6f5593bf7f35c793ec Mon Sep 17 00:00:00 2001
From: phlostically <phlostically@mailinator.com>
Date: Tue, 29 Nov 2022 20:22:21 +0000
Subject: [PATCH 213/300] Translated using Weblate (Esperanto)

Currently translated at 40.5% (103 of 254 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
---
 public/locales/eo/common.json | 186 +++++++++++++++++-----------------
 1 file changed, 93 insertions(+), 93 deletions(-)

diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json
index e19718b3..26f56002 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -2,36 +2,36 @@
     "widget": {
         "missing_type": "Missing Widget Type: {{type}}",
         "api_error": "API Error",
-        "information": "Information",
-        "status": "Status",
+        "information": "Informo",
+        "status": "Stato",
         "url": "URL",
         "raw_error": "Raw Error",
         "response_data": "Response Data"
     },
     "weather": {
-        "current": "Current Location",
+        "current": "Aktuala loko",
         "allow": "Click to allow",
         "updating": "Updating",
         "wait": "Please wait"
     },
     "search": {
-        "placeholder": "Search…"
+        "placeholder": "Serĉi…"
     },
     "resources": {
-        "cpu": "CPU",
-        "total": "Total",
-        "free": "Free",
-        "used": "Used",
-        "load": "Load"
+        "cpu": "Ĉefprocesoro",
+        "total": "Totalo",
+        "free": "Libera",
+        "used": "Uzata",
+        "load": "Ŝarĝo"
     },
     "unifi": {
-        "users": "Users",
+        "users": "Uzantoj",
         "uptime": "System Uptime",
-        "days": "Days",
+        "days": "Tagoj",
         "wan": "WAN",
         "lan": "LAN",
         "wlan": "WLAN",
-        "devices": "Devices",
+        "devices": "Aparatoj",
         "lan_devices": "LAN Devices",
         "wlan_devices": "WLAN Devices",
         "lan_users": "LAN Users",
@@ -43,18 +43,18 @@
     "docker": {
         "rx": "RX",
         "tx": "TX",
-        "mem": "MEM",
-        "cpu": "CPU",
+        "mem": "Memoro",
+        "cpu": "Ĉefprocesoro",
         "offline": "Offline",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Eraro",
+        "unknown": "Nekonata"
     },
     "ping": {
-        "error": "Error",
+        "error": "Eraro",
         "ping": "Ping"
     },
     "emby": {
-        "playing": "Playing",
+        "playing": "Ludante",
         "transcoding": "Transcoding",
         "bitrate": "Bitrate",
         "no_active": "No Active Streams"
@@ -76,8 +76,8 @@
     },
     "plex": {
         "streams": "Active Streams",
-        "movies": "Movies",
-        "tv": "TV Shows"
+        "movies": "Filmoj",
+        "tv": "Televidprogramoj"
     },
     "sabnzbd": {
         "rate": "Rate",
@@ -86,23 +86,23 @@
     },
     "rutorrent": {
         "active": "Active",
-        "upload": "Upload",
-        "download": "Download"
+        "upload": "Alŝuto",
+        "download": "Elŝuto"
     },
     "transmission": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Elŝuto",
+        "upload": "Alŝuto",
         "leech": "Leech",
         "seed": "Seed"
     },
     "qbittorrent": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Elŝuto",
+        "upload": "Alŝuto",
         "leech": "Leech",
         "seed": "Seed"
     },
     "deluge": {
-        "download": "Download",
+        "download": "Elŝuto",
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
@@ -110,23 +110,23 @@
     "sonarr": {
         "wanted": "Wanted",
         "queued": "Queued",
-        "series": "Series"
+        "series": "Serio"
     },
     "radarr": {
         "wanted": "Wanted",
         "missing": "Missing",
         "queued": "Queued",
-        "movies": "Movies"
+        "movies": "Filmoj"
     },
     "lidarr": {
         "wanted": "Wanted",
         "queued": "Queued",
-        "albums": "Albums"
+        "albums": "Albumoj"
     },
     "readarr": {
         "wanted": "Wanted",
         "queued": "Queued",
-        "books": "Books"
+        "books": "Libroj"
     },
     "bazarr": {
         "missingEpisodes": "Missing Episodes",
@@ -134,19 +134,19 @@
     },
     "ombi": {
         "pending": "Pending",
-        "approved": "Approved",
-        "available": "Available"
+        "approved": "Aprobita",
+        "available": "Havebla"
     },
     "jellyseerr": {
         "pending": "Pending",
-        "approved": "Approved",
-        "available": "Available"
+        "approved": "Aprobita",
+        "available": "Havebla"
     },
     "overseerr": {
         "pending": "Pending",
         "processing": "Processing",
-        "approved": "Approved",
-        "available": "Available"
+        "approved": "Aprobita",
+        "available": "Havebla"
     },
     "pihole": {
         "queries": "Queries",
@@ -155,8 +155,8 @@
     },
     "adguard": {
         "queries": "Queries",
-        "blocked": "Blocked",
-        "filtered": "Filtered",
+        "blocked": "Blokitaj",
+        "filtered": "Filtritaj",
         "latency": "Latency"
     },
     "speedtest": {
@@ -167,11 +167,11 @@
     "portainer": {
         "running": "Running",
         "stopped": "Stopped",
-        "total": "Total"
+        "total": "Totalo"
     },
     "traefik": {
         "routers": "Routers",
-        "services": "Services",
+        "services": "Servoj",
         "middleware": "Middleware"
     },
     "navidrome": {
@@ -185,15 +185,15 @@
     },
     "coinmarketcap": {
         "configure": "Configure one or more crypto currencies to track",
-        "1hour": "1 Hour",
-        "1day": "1 Day",
-        "7days": "7 Days",
-        "30days": "30 Days"
+        "1hour": "1 horo",
+        "1day": "1 tago",
+        "7days": "7 tagoj",
+        "30days": "30 tagoj"
     },
     "gotify": {
         "apps": "Applications",
-        "clients": "Clients",
-        "messages": "Messages"
+        "clients": "Klientoj",
+        "messages": "Mesaĝoj"
     },
     "prowlarr": {
         "enableIndexers": "Indexers",
@@ -207,14 +207,14 @@
         "errored": "Errored"
     },
     "strelaysrv": {
-        "numActiveSessions": "Sessions",
-        "numConnections": "Connections",
+        "numActiveSessions": "Seancoj",
+        "numConnections": "Konektoj",
         "dataRelayed": "Relayed",
         "transferRate": "Rate"
     },
     "mastodon": {
-        "user_count": "Users",
-        "status_count": "Posts",
+        "user_count": "Uzantoj",
+        "status_count": "Afiŝoj",
         "domain_count": "Domains"
     },
     "authentik": {
@@ -223,33 +223,33 @@
         "failedLoginsLast24H": "Failed Logins (24h)"
     },
     "proxmox": {
-        "mem": "MEM",
-        "cpu": "CPU",
+        "mem": "Memoro",
+        "cpu": "Ĉefprocesoro",
         "lxc": "LXC",
         "vms": "VMs"
     },
     "glances": {
-        "cpu": "CPU",
-        "mem": "MEM",
-        "wait": "Please wait"
+        "cpu": "Ĉefprocesoro",
+        "mem": "Memoro",
+        "wait": "Bonvolu atendi"
     },
     "quicklaunch": {
         "bookmark": "Bookmark",
-        "service": "Service"
+        "service": "Servo"
     },
     "wmo": {
-        "0-day": "Sunny",
-        "0-night": "Clear",
+        "0-day": "Suna",
+        "0-night": "Sennuba",
         "1-day": "Mainly Sunny",
         "1-night": "Mainly Clear",
-        "2-day": "Partly Cloudy",
-        "2-night": "Partly Cloudy",
-        "3-day": "Cloudy",
-        "3-night": "Cloudy",
-        "45-day": "Foggy",
-        "45-night": "Foggy",
-        "48-day": "Foggy",
-        "48-night": "Foggy",
+        "2-day": "Nubeta",
+        "2-night": "Nubeta",
+        "3-day": "Nuba",
+        "3-night": "Nuba",
+        "45-day": "Nebula",
+        "45-night": "Nebula",
+        "48-day": "Nebula",
+        "48-night": "Nebula",
         "51-day": "Light Drizzle",
         "51-night": "Light Drizzle",
         "53-day": "Drizzle",
@@ -262,20 +262,20 @@
         "57-night": "Freezing Drizzle",
         "61-day": "Light Rain",
         "61-night": "Light Rain",
-        "63-day": "Rain",
-        "63-night": "Rain",
-        "65-day": "Heavy Rain",
-        "65-night": "Heavy Rain",
-        "66-day": "Freezing Rain",
-        "66-night": "Freezing Rain",
-        "67-day": "Freezing Rain",
-        "67-night": "Freezing Rain",
+        "63-day": "Pluvo",
+        "63-night": "Pluvo",
+        "65-day": "Pluvego",
+        "65-night": "Pluvego",
+        "66-day": "Frosta pluvo",
+        "66-night": "Frosta pluvo",
+        "67-day": "Frosta pluvo",
+        "67-night": "Frosta pluvo",
         "71-day": "Light Snow",
         "71-night": "Light Snow",
-        "73-day": "Snow",
-        "73-night": "Snow",
-        "75-day": "Heavy Snow",
-        "75-night": "Heavy Snow",
+        "73-day": "Neĝo",
+        "73-night": "Neĝo",
+        "75-day": "Neĝego",
+        "75-night": "Neĝego",
         "77-day": "Snow Grains",
         "77-night": "Snow Grains",
         "80-day": "Light Showers",
@@ -288,15 +288,15 @@
         "85-night": "Snow Showers",
         "86-day": "Snow Showers",
         "86-night": "Snow Showers",
-        "95-day": "Thunderstorm",
-        "95-night": "Thunderstorm",
-        "96-day": "Thunderstorm With Hail",
-        "96-night": "Thunderstorm With Hail",
-        "99-day": "Thunderstorm With Hail",
-        "99-night": "Thunderstorm With Hail"
+        "95-day": "Fulmotondro",
+        "95-night": "Fulmotondro",
+        "96-day": "Fulmotondro kun hajlo",
+        "96-night": "Fulmotondro kun hajlo",
+        "99-day": "Fulmotondro kun hajlo",
+        "99-night": "Fulmotondro kun hajlo"
     },
     "homebridge": {
-        "available_update": "System",
+        "available_update": "Sistemo",
         "updates": "Updates",
         "update_available": "Update Available",
         "up_to_date": "Up to Date",
@@ -311,13 +311,13 @@
     "autobrr": {
         "approvedPushes": "Approved",
         "rejectedPushes": "Rejected",
-        "filters": "Filters",
+        "filters": "Filtriloj",
         "indexers": "Indexers"
     },
     "tubearchivist": {
         "downloads": "Queue",
         "videos": "Videos",
-        "channels": "Channels",
+        "channels": "Kanaloj",
         "playlists": "Playlists"
     },
     "truenas": {
@@ -328,17 +328,17 @@
     },
     "pyload": {
         "speed": "Speed",
-        "active": "Active",
+        "active": "Aktiva",
         "queue": "Queue",
         "total": "Total"
     },
     "gluetun": {
         "public_ip": "Public IP",
-        "region": "Region",
-        "country": "Country"
+        "region": "Regiono",
+        "country": "Lando"
     },
     "hdhomerun": {
-        "channels": "Channels",
+        "channels": "Kanaloj",
         "hd": "HD"
     },
     "scrutiny": {
@@ -348,6 +348,6 @@
     },
     "paperlessngx": {
         "inbox": "Inbox",
-        "total": "Total"
+        "total": "Totalo"
     }
 }

From 474f04157801455d91b81f78c6f5aef90f939159 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 214/300] Translated using Weblate (German)

Currently translated at 87.2% (225 of 258 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 df105602..50bba398 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From d5ff929c70b69be3210c205b8fd590d2fa8502c7 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 215/300] Translated using Weblate (Spanish)

Currently translated at 98.0% (253 of 258 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 dce9bf1a..bed3f90b 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -349,5 +349,11 @@
         "upload": "Subida",
         "leech": "Leech",
         "seed": "Semilla"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From a8647db988855d4fd2dfa42ca876b8b808abadce Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 216/300] Translated using Weblate (French)

Currently translated at 98.4% (254 of 258 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 ceddd133..3397e4dc 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -349,5 +349,11 @@
         "upload": "Envoi",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ac9023ecdb7467d89bd1124a8f81ac67d013e3a1 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 217/300] Translated using Weblate (Portuguese)

Currently translated at 44.5% (115 of 258 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 a010ed37..fe217640 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -360,5 +360,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c5acca3e5a5f2d7aa89a99505fda83e0a640e552 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 218/300] Translated using Weblate (Russian)

Currently translated at 18.6% (48 of 258 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 6f6f7215..a19e8953 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed",
+        "leech": "Leech"
     }
 }

From 323930c5d50a2fbe0a35e55c3b9e12f729d9a23e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 219/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 65.1% (168 of 258 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 5824af50..7a83d93e 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 4efcedcee4ba1eea2aa557aa01972feb5b347d47 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 220/300] Translated using Weblate (Italian)

Currently translated at 88.7% (229 of 258 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 5fa50f7b..03e51c06 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From fe39bb369561c2a555da502b921da5351a8dfc6d Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 221/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 30.6% (79 of 258 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 029af22e..8848cc43 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -349,5 +349,11 @@
         "download": "Download",
         "upload": "Upload",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "leech": "Leech",
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From e0789cb4b61ef8007810f2ecdb8406896cc2a6d4 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:04 +0000
Subject: [PATCH 222/300] Translated using Weblate (Vietnamese)

Currently translated at 17.0% (44 of 258 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 783f024d..9e16846c 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ebb1e330a24927b70af7084b29dfa658afe169fc Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:05 +0000
Subject: [PATCH 223/300] Translated using Weblate (Dutch)

Currently translated at 24.4% (63 of 258 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 04d8f20d..ef315b38 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 70972d1b852cdcc96b6620b50bd9a7410d699561 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:05 +0000
Subject: [PATCH 224/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.4% (9 of 258 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 dc7b232e..34ab29e1 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From a3bf7e2da732cde8265af5c287e3c36276d26bf8 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 225/300] Translated using Weblate (Catalan)

Currently translated at 50.7% (131 of 258 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 01f27b6d..8ad1f684 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -349,5 +349,11 @@
         "download": "Download",
         "upload": "Upload",
         "leech": "Leech"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ff3e0bcbc8993525683cf2f818a0abe112500ad2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 226/300] Translated using Weblate (Polish)

Currently translated at 92.2% (238 of 258 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 c37df7db..aa0159b6 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c1fd9559df1cc3a580cf44cc2067a2a147589209 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:00 +0000
Subject: [PATCH 227/300] Translated using Weblate (Swedish)

Currently translated at 50.3% (130 of 258 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 04ac5683..72c44723 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -349,5 +349,11 @@
         "leech": "Leech",
         "upload": "Upload",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 6225f3a6c1d851baf6d441ac37c162e443c0ff9b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:00 +0000
Subject: [PATCH 228/300] Translated using Weblate (Croatian)

Currently translated at 96.5% (249 of 258 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 3f230e88..e1933ea4 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 16979dfcc4793bbd2d74e83029a485c514dbe0f0 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 229/300] Translated using Weblate (Hungarian)

Currently translated at 41.8% (108 of 258 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 6eb35db0..8737c2fb 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -349,5 +349,11 @@
         "seed": "Seed",
         "upload": "Upload",
         "leech": "Leech"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 25c0502e02002b7ba9e1ee639375c4f668de98d6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:00 +0000
Subject: [PATCH 230/300] Translated using Weblate (Hebrew)

Currently translated at 39.1% (101 of 258 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 3ecaab7d..5bea6cfe 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "upload": "Upload",
+        "leech": "Leech",
+        "download": "Download",
+        "seed": "Seed"
     }
 }

From 5443c1e1cdec608eb35ac1c1115c84fe1dbc818a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 231/300] Translated using Weblate (Romanian)

Currently translated at 53.1% (137 of 258 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 12ae60b8..1fcad29a 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 77d523e2a4cfca47a298ada94a054130dc8bc499 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 232/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 45.3% (117 of 258 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 a7fa2154..4fa0d3fc 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 531b1a91babb37a70bca1d016b04843c4c8cd008 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 233/300] Translated using Weblate (Yue)

Currently translated at 45.7% (118 of 258 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 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 520bc943..a9b3d445 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 6da0ebd11b4cfba9485148a40713456465445e4c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 234/300] Translated using Weblate (Finnish)

Currently translated at 47.6% (123 of 258 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 40c39bf0..51ae4db6 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -349,5 +349,11 @@
         "leech": "Leech",
         "seed": "Seed",
         "download": "Download"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 65e3d503672b1b7cb02e13614cbe6bc942178fc2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 235/300] Translated using Weblate (Telugu)

Currently translated at 84.1% (217 of 258 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 6f4351a6..7254966d 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -349,5 +349,11 @@
         "download": "Download",
         "upload": "Upload",
         "leech": "Leech"
+    },
+    "diskstation": {
+        "leech": "Leech",
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From e238db9336501a48b287c38ec13594345c6a89b7 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 236/300] Translated using Weblate (Bulgarian)

Currently translated at 17.8% (46 of 258 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 ff40f72a..0e5a5952 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "seed": "Seed",
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech"
     }
 }

From 8e1b99ee32ba84c6046c8b0ae67fb7977d13b7ee Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 237/300] Translated using Weblate (Turkish)

Currently translated at 89.5% (231 of 258 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 808a9439..8e1c445a 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 5b43b07e1f19b7ca86cfe4b1925dc3dec1882c57 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 238/300] Translated using Weblate (Serbian)

Currently translated at 3.4% (9 of 258 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 a063bf04..a616fc63 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 585fe5fb1c454cf5d711c3d0b128c1b5dd156208 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:01 +0000
Subject: [PATCH 239/300] Translated using Weblate (Arabic)

Currently translated at 17.0% (44 of 258 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 2f88b39d..6e52983d 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "leech": "Leech",
+        "seed": "Seed",
+        "download": "Download",
+        "upload": "Upload"
     }
 }

From 2c717636a6a85f548cdca156525fcb5be535388c Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 240/300] Translated using Weblate (Czech)

Currently translated at 87.2% (225 of 258 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 4a50cfd5..e4917c5b 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -349,5 +349,11 @@
         "leech": "Leech",
         "seed": "Seed",
         "download": "Download"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2725bcbbe157e3f6617a9941abd776827f2cebce Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:03 +0000
Subject: [PATCH 241/300] Translated using Weblate (Danish)

Currently translated at 76.7% (198 of 258 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 1a56eee4..9a9f2ea4 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From a4e1a22783237e0a0c6eea427df02819cd36b7c2 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:05 +0000
Subject: [PATCH 242/300] Translated using Weblate (Malay)

Currently translated at 98.0% (253 of 258 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 f6b6e9c6..a011501c 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -349,5 +349,11 @@
         "upload": "Muat Naik",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "upload": "Upload",
+        "download": "Download",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 458b16ff6da01220c73e28ed1dc5b1fac7de7637 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 243/300] Translated using Weblate (Hindi)

Currently translated at 3.4% (9 of 258 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 0b1b00dc..384cb92b 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -349,5 +349,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "diskstation": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 1a29c1fc8f005fe205f63411804f297052669a61 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Wed, 30 Nov 2022 17:57:02 +0000
Subject: [PATCH 244/300] Translated using Weblate (Esperanto)

Currently translated at 39.9% (103 of 258 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 26f56002..431e0008 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -349,5 +349,11 @@
     "paperlessngx": {
         "inbox": "Inbox",
         "total": "Totalo"
+    },
+    "diskstation": {
+        "download": "Download",
+        "leech": "Leech",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From 1aeb3a3b634374be05591eb77c8b7ebc4e6c8581 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Wed, 30 Nov 2022 20:52:30 -0800
Subject: [PATCH 245/300] Add a perfunctory key to <span>

---
 src/components/quicklaunch.jsx | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index 0427022d..050de448 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -107,7 +107,8 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
 
   function highlightText(text) {
     const parts = text.split(new RegExp(`(${searchString})`, 'gi'));
-    return <span>{parts.map(part => part.toLowerCase() === searchString.toLowerCase() ? <span className="bg-theme-300/10">{part}</span> : part)}</span>;
+    // eslint-disable-next-line react/no-array-index-key
+    return <span>{parts.map((part, i) => part.toLowerCase() === searchString.toLowerCase() ? <span key={`${searchString}_${i}`} className="bg-theme-300/10">{part}</span> : part)}</span>;
   }
 
   return (

From 7087ed80cc90b6ee4fcdbf6c1043b77c85a6a53a Mon Sep 17 00:00:00 2001
From: JigSawFr <JigSawFr@users.noreply.github.com>
Date: Thu, 1 Dec 2022 12:40:19 +0100
Subject: [PATCH 246/300] Add flood widget

---
 public/locales/en/common.json   |  6 ++++
 src/widgets/components.js       |  1 +
 src/widgets/flood/component.jsx | 53 ++++++++++++++++++++++++++++
 src/widgets/flood/proxy.js      | 61 +++++++++++++++++++++++++++++++++
 src/widgets/flood/widget.js     |  7 ++++
 src/widgets/widgets.js          |  2 ++
 6 files changed, 130 insertions(+)
 create mode 100644 src/widgets/flood/component.jsx
 create mode 100644 src/widgets/flood/proxy.js
 create mode 100644 src/widgets/flood/widget.js

diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 4273fff8..80ba5357 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -70,6 +70,12 @@
         "bitrate": "Bitrate",
         "no_active": "No Active Streams"
     },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
+    },
     "changedetectionio": {
         "totalObserved": "Total Observed",
         "diffsDetected": "Diffs Detected"
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 606d8291..b0752b62 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -11,6 +11,7 @@ const components = {
   diskstation: dynamic(() => import("./diskstation/component")),
   docker: dynamic(() => import("./docker/component")),
   emby: dynamic(() => import("./emby/component")),
+  flood: dynamic(() => import("./flood/component")),
   gluetun: dynamic(() => import("./gluetun/component")),
   gotify: dynamic(() => import("./gotify/component")),
   hdhomerun: dynamic(() => import("./hdhomerun/component")),
diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx
new file mode 100644
index 00000000..0615154f
--- /dev/null
+++ b/src/widgets/flood/component.jsx
@@ -0,0 +1,53 @@
+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: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents");
+
+  if (torrentError) {
+    return <Container error={torrentError} />;
+  }
+
+  if (!torrentData) {
+    return (
+      <Container service={service}>
+        <Block label="flood.leech" />
+        <Block label="flood.download" />
+        <Block label="flood.seed" />
+        <Block label="flood.upload" />
+      </Container>
+    );
+  }
+
+  let rateDl = 0;
+  let rateUl = 0;
+  let completed = 0;
+  let leech = 0;
+
+  for (var torrent in torrentData.torrents) {
+    rateDl += torrentData.torrents[torrent].downRate;
+    rateUl += torrentData.torrents[torrent].upRate;
+    if(torrentData.torrents[torrent].status.includes('complete')){
+      completed += 1;
+    }
+    if(torrentData.torrents[torrent].status.includes('downloading')){
+      leech += 1;
+    }
+  }
+
+  return (
+    <Container service={service}>
+      <Block label="flood.leech" value={t("common.number", { value: leech })} />
+      <Block label="flood.download" value={t("common.bitrate", { value: rateDl })} />
+      <Block label="flood.seed" value={t("common.number", { value: completed })} />
+      <Block label="flood.upload" value={t("common.bitrate", { value: rateUl })} />
+    </Container>
+  );
+}
diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js
new file mode 100644
index 00000000..adcebddc
--- /dev/null
+++ b/src/widgets/flood/proxy.js
@@ -0,0 +1,61 @@
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
+import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+
+const logger = createLogger("floodProxyHandler");
+
+async function login(widget) {
+  logger.debug("flood is rejecting the request, logging in.");
+  const loginUrl = new URL(`${widget.url}/api/auth/authenticate`).toString();
+  const loginHeaders = {
+    "Accept-Encoding": "application/json"
+  };
+  if (widget.username && widget.password) {
+    loginHeaders.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`
+  }
+
+  const loginParams = { method: "POST", loginHeaders };
+
+  // eslint-disable-next-line no-unused-vars
+  const [status, contentType, data] = await httpProxy(loginUrl, loginParams);
+  return [status, data];
+}
+
+export default async function floodProxyHandler(req, res) {
+  const { group, service, endpoint } = req.query;
+
+  if (!group || !service) {
+    logger.debug("Invalid or missing service '%s' or group '%s'", service, group);
+    return res.status(400).json({ error: "Invalid proxy service type" });
+  }
+
+  const widget = await getServiceWidget(group, service);
+
+  if (!widget) {
+    logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
+    return res.status(400).json({ error: "Invalid proxy service type" });
+  }
+
+  const url = new URL(formatApiCall("{url}/api/{endpoint}", { endpoint, ...widget }));
+  const params = { method: "GET", headers: {} };
+
+  let [status, contentType, data] = await httpProxy(url, params);
+  if (status === 401) {
+    [status, data] = await login(widget);
+
+    if (status !== 200) {
+      logger.error("HTTP %d logging in to flood.  Data: %s", status, data);
+      return res.status(status).end(data);
+    }
+
+    [status, contentType, data] = await httpProxy(url, params);
+  }
+
+  if (status !== 200) {
+    logger.error("HTTP %d getting data from flood.  Data: %s", status, data);
+  }
+
+  if (contentType) res.setHeader("Content-Type", contentType);
+  return res.status(status).send(data);
+}
diff --git a/src/widgets/flood/widget.js b/src/widgets/flood/widget.js
new file mode 100644
index 00000000..027ff344
--- /dev/null
+++ b/src/widgets/flood/widget.js
@@ -0,0 +1,7 @@
+import floodProxyHandler from "./proxy";
+
+const widget = {
+  proxyHandler: floodProxyHandler,
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 24dd6e5f..b3eaa885 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -7,6 +7,7 @@ import coinmarketcap from "./coinmarketcap/widget";
 import deluge from "./deluge/widget";
 import diskstation from "./diskstation/widget";
 import emby from "./emby/widget";
+import flood from "./flood/widget";
 import gluetun from "./gluetun/widget";
 import gotify from "./gotify/widget";
 import hdhomerun from "./hdhomerun/widget";
@@ -54,6 +55,7 @@ const widgets = {
   deluge,
   diskstation,
   emby,
+  flood,
   gluetun,
   gotify,
   hdhomerun,

From 9d2f1ab8c8449224ab7264c108f4b7e7fcbe4e54 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 1 Dec 2022 06:36:51 -0800
Subject: [PATCH 247/300] Add default interval setting for coinmarketcap

---
 src/utils/config/service-helpers.js     | 2 ++
 src/widgets/coinmarketcap/component.jsx | 5 +++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index 15740d22..e0a9f23f 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -118,6 +118,7 @@ export function cleanServiceGroups(groups) {
           container,
           currency, // coinmarketcap widget
           symbols,
+          defaultinterval
         } = cleanedService.widget;
 
         cleanedService.widget = {
@@ -129,6 +130,7 @@ export function cleanServiceGroups(groups) {
 
         if (currency) cleanedService.widget.currency = currency;
         if (symbols) cleanedService.widget.symbols = symbols;
+        if (defaultinterval) cleanedService.widget.defaultinterval = defaultinterval;
 
         if (type === "docker") {
           if (server) cleanedService.widget.server = server;
diff --git a/src/widgets/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx
index 90b91a5e..180ffe22 100644
--- a/src/widgets/coinmarketcap/component.jsx
+++ b/src/widgets/coinmarketcap/component.jsx
@@ -17,11 +17,12 @@ export default function Component({ service }) {
     { label: t("coinmarketcap.30days"), value: "30d" },
   ];
 
-  const [dateRange, setDateRange] = useState(dateRangeOptions[0].value);
-
   const { widget } = service;
   const { symbols } = widget;
   const currencyCode = widget.currency ?? "USD";
+  const interval = widget.defaultinterval ?? dateRangeOptions[0].value;
+
+  const [dateRange, setDateRange] = useState(interval);
 
   const { data: statsData, error: statsError } = useWidgetAPI(widget, "v1/cryptocurrency/quotes/latest", {
     symbol: `${symbols.join(",")}`,

From 97a3346ff63e1444c126e5025f9f559d2457bb70 Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Wed, 30 Nov 2022 19:00:45 +0000
Subject: [PATCH 248/300] Translated using Weblate (Spanish)

Currently translated at 99.6% (257 of 258 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index bed3f90b..2c85b3fc 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -105,7 +105,7 @@
         "pending": "Pendiente",
         "approved": "Aprobado",
         "available": "Disponible",
-        "processing": "Processing"
+        "processing": "Procesando"
     },
     "sabnzbd": {
         "rate": "Tasa",
@@ -139,7 +139,7 @@
     "transmission": {
         "download": "Bajada",
         "upload": "Subida",
-        "leech": "Compañeros",
+        "leech": "Leech",
         "seed": "Semillas"
     },
     "jackett": {
@@ -164,7 +164,7 @@
     "qbittorrent": {
         "download": "Bajada",
         "upload": "Subida",
-        "leech": "Compañeros",
+        "leech": "Leech",
         "seed": "Semillas"
     },
     "mastodon": {
@@ -351,9 +351,9 @@
         "seed": "Semilla"
     },
     "diskstation": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Descargar",
+        "upload": "Cargar",
         "leech": "Leech",
-        "seed": "Seed"
+        "seed": "Semilla"
     }
 }

From 0d28fe25f83e3695b52a0f41e7e170f7d5a2d73e Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Wed, 30 Nov 2022 18:39:02 +0000
Subject: [PATCH 249/300] Translated using Weblate (French)

Currently translated at 100.0% (258 of 258 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 3397e4dc..bf512faf 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -351,8 +351,8 @@
         "seed": "Seed"
     },
     "diskstation": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Réception",
+        "upload": "Envoi",
         "leech": "Leech",
         "seed": "Seed"
     }

From 8a84eba232187327c704130cc7d0881393d5f7ad Mon Sep 17 00:00:00 2001
From: JigSawFr <JigSawFr@users.noreply.github.com>
Date: Thu, 1 Dec 2022 20:55:14 +0100
Subject: [PATCH 250/300] fix(widgets): move flood auth from BASIC to raw json
 body

---
 src/widgets/flood/proxy.js | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js
index adcebddc..6c7921cc 100644
--- a/src/widgets/flood/proxy.js
+++ b/src/widgets/flood/proxy.js
@@ -8,14 +8,19 @@ const logger = createLogger("floodProxyHandler");
 async function login(widget) {
   logger.debug("flood is rejecting the request, logging in.");
   const loginUrl = new URL(`${widget.url}/api/auth/authenticate`).toString();
-  const loginHeaders = {
-    "Accept-Encoding": "application/json"
-  };
-  if (widget.username && widget.password) {
-    loginHeaders.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`
-  }
 
-  const loginParams = { method: "POST", loginHeaders };
+  const loginParams = { 
+    method: "POST", 
+    headers: { "Content-Type": "application/json" }, 
+    body: null
+  };
+
+  if (widget.username && widget.password) {
+    loginParams.body = JSON.stringify({
+      "username": widget.username,
+      "password": widget.password
+    });
+  }
 
   // eslint-disable-next-line no-unused-vars
   const [status, contentType, data] = await httpProxy(loginUrl, loginParams);

From 8c918f1ea60d6c94e02a085cf3aad9e16777b797 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:45 +0000
Subject: [PATCH 251/300] Translated using Weblate (German)

Currently translated at 85.8% (225 of 262 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 50bba398..76da6f02 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ba44c0ae9da59effc4c113b4ea0b9b67179b2b36 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:45 +0000
Subject: [PATCH 252/300] Translated using Weblate (Spanish)

Currently translated at 98.0% (257 of 262 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 2c85b3fc..80da36bf 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -355,5 +355,11 @@
         "upload": "Cargar",
         "leech": "Leech",
         "seed": "Semilla"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 31e6c1fa8667919912bea120c29d18b5b2944cd6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:45 +0000
Subject: [PATCH 253/300] Translated using Weblate (French)

Currently translated at 98.4% (258 of 262 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 bf512faf..1addd4fd 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -355,5 +355,11 @@
         "upload": "Envoi",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 22dd4e5f776c0cfcdc8bdc30db204312ba2bd7f0 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:45 +0000
Subject: [PATCH 254/300] Translated using Weblate (Portuguese)

Currently translated at 43.8% (115 of 262 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 fe217640..93058498 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -366,5 +366,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From d2f3098b2a8c394c3cb1e53538daa7495b537f0d Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 255/300] Translated using Weblate (Russian)

Currently translated at 18.3% (48 of 262 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 a19e8953..1b7688ea 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "seed": "Seed",
         "leech": "Leech"
+    },
+    "flood": {
+        "upload": "Upload",
+        "download": "Download",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2e6d760c534df1223357b8c15f6776899c16f4ff Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 256/300] Translated using Weblate (Chinese (Simplified))

Currently translated at 64.1% (168 of 262 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 7a83d93e..512fbcc1 100644
--- a/public/locales/zh-CN/common.json
+++ b/public/locales/zh-CN/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "leech": "Leech",
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From 2a9c39532ae8807d533240d5ee432e28ce98f630 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 257/300] Translated using Weblate (Italian)

Currently translated at 87.4% (229 of 262 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 03e51c06..169e42bd 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c72961573bd6a2b76e711cb837e4786ffa22da11 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:45 +0000
Subject: [PATCH 258/300] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
 =?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently translated at 30.1% (79 of 262 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 8848cc43..8a6d7965 100644
--- a/public/locales/nb-NO/common.json
+++ b/public/locales/nb-NO/common.json
@@ -355,5 +355,11 @@
         "download": "Download",
         "upload": "Upload",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 5de93bcad2d465e90f529d558a6c17d4d0e1b3e7 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 259/300] Translated using Weblate (Vietnamese)

Currently translated at 16.7% (44 of 262 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 9e16846c..e01e4fd4 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed",
+        "leech": "Leech"
     }
 }

From 0a7616f0f6986f56762fd3b2a3ebd88509cdcc83 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 260/300] Translated using Weblate (Dutch)

Currently translated at 24.0% (63 of 262 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 ef315b38..9a16f6d8 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 7cae96a77b4eac167df623c5832936155b8bc29e Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:47 +0000
Subject: [PATCH 261/300] Translated using Weblate (Chinese (Traditional))

Currently translated at 3.4% (9 of 262 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 34ab29e1..f760d795 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c3305c2cd721989e7fe84881e9d8fd32738b5971 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 262/300] Translated using Weblate (Catalan)

Currently translated at 50.0% (131 of 262 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 8ad1f684..dcf1ca70 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 2ff06d12b0ba7dfcb8c02844de74c4208f2e2426 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 263/300] Translated using Weblate (Polish)

Currently translated at 90.8% (238 of 262 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 aa0159b6..4e17d14e 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 25c5f36a0c7f2835020cb5c8f096ec0303507586 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:41 +0000
Subject: [PATCH 264/300] Translated using Weblate (Swedish)

Currently translated at 49.6% (130 of 262 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 72c44723..e670291b 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 45ba9c6961858c1782cde40390dec0e3fea14f93 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:41 +0000
Subject: [PATCH 265/300] Translated using Weblate (Croatian)

Currently translated at 95.0% (249 of 262 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 e1933ea4..f7964938 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From faac4518f539ddf948211d954b10d08374512737 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 266/300] Translated using Weblate (Hungarian)

Currently translated at 41.2% (108 of 262 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 8737c2fb..6ad93d4a 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From dcafcb983ed0ff591edf1bdd2c7298023fde1c71 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 267/300] Translated using Weblate (Hebrew)

Currently translated at 38.5% (101 of 262 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 5bea6cfe..53439ae0 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -355,5 +355,11 @@
         "leech": "Leech",
         "download": "Download",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From f4e3cafa25adc4ce82392ce77ec70696a34ae505 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 268/300] Translated using Weblate (Romanian)

Currently translated at 52.2% (137 of 262 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 1fcad29a..6c2a635f 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From d70c6184428084766df5d3a7b2cc4b78774a8984 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:43 +0000
Subject: [PATCH 269/300] Translated using Weblate (Portuguese (Brazil))

Currently translated at 44.6% (117 of 262 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 4fa0d3fc..0bfa8ecc 100644
--- a/public/locales/pt-BR/common.json
+++ b/public/locales/pt-BR/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From da75b7b0d3c6c0ea2dd3490529cc198a54711d72 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 270/300] Translated using Weblate (Yue)

Currently translated at 45.0% (118 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
---
 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 a9b3d445..80e3a788 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From ce1be46c0ba14d77efbd831dddc97f54fb0b8c28 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 271/300] Translated using Weblate (Finnish)

Currently translated at 46.9% (123 of 262 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 51ae4db6..54ac45c4 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 8eaa9425723ce65b40a4ef087465b1d75a1083f9 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 272/300] Translated using Weblate (Telugu)

Currently translated at 82.8% (217 of 262 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 7254966d..85effa8d 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -355,5 +355,11 @@
         "download": "Download",
         "upload": "Upload",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 19e297e4c6220ad93cfcd74aa190cc8d236d6913 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 273/300] Translated using Weblate (Bulgarian)

Currently translated at 17.5% (46 of 262 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 0e5a5952..abbd3cca 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -355,5 +355,11 @@
         "download": "Download",
         "upload": "Upload",
         "leech": "Leech"
+    },
+    "flood": {
+        "leech": "Leech",
+        "seed": "Seed",
+        "download": "Download",
+        "upload": "Upload"
     }
 }

From 98165bf9ddb499f9ccf99932d3da3a74c5af80a6 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:42 +0000
Subject: [PATCH 274/300] Translated using Weblate (Turkish)

Currently translated at 88.1% (231 of 262 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 8e1c445a..5312035f 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From bf1c67a7ac66001a5d3873d4bedaebb8acbb9301 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:43 +0000
Subject: [PATCH 275/300] Translated using Weblate (Serbian)

Currently translated at 3.4% (9 of 262 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 a616fc63..6b03fa0f 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "seed": "Seed",
+        "upload": "Upload",
+        "leech": "Leech"
     }
 }

From 285ae970c8add0c86d0b2899e95b0e853114f74f Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:43 +0000
Subject: [PATCH 276/300] Translated using Weblate (Arabic)

Currently translated at 16.7% (44 of 262 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 6e52983d..cfe661e6 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -355,5 +355,11 @@
         "seed": "Seed",
         "download": "Download",
         "upload": "Upload"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From c1473b404517dbaa9fbaa123d058ea3b9b572b1b Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 277/300] Translated using Weblate (Czech)

Currently translated at 85.8% (225 of 262 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 e4917c5b..66da71bd 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From f5ad46f1e18e677f4003ab09cfa93c5c73786c16 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:44 +0000
Subject: [PATCH 278/300] Translated using Weblate (Danish)

Currently translated at 75.5% (198 of 262 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 9a9f2ea4..fae5a68c 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "leech": "Leech",
+        "download": "Download",
+        "upload": "Upload",
+        "seed": "Seed"
     }
 }

From d8039031ca14e4dc6467a1ff7bf659fc82491950 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:46 +0000
Subject: [PATCH 279/300] Translated using Weblate (Malay)

Currently translated at 96.5% (253 of 262 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 a011501c..5bb77f76 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -355,5 +355,11 @@
         "download": "Download",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 8672998f08a20ae1d3142c62472c6dd50676d311 Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:43 +0000
Subject: [PATCH 280/300] Translated using Weblate (Hindi)

Currently translated at 3.4% (9 of 262 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 384cb92b..e2f5091b 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -355,5 +355,11 @@
         "upload": "Upload",
         "leech": "Leech",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From aaacf2ea4bc330d9544bce2564ed595284c7053a Mon Sep 17 00:00:00 2001
From: Anonymous <noreply@weblate.org>
Date: Fri, 2 Dec 2022 00:46:43 +0000
Subject: [PATCH 281/300] Translated using Weblate (Esperanto)

Currently translated at 39.3% (103 of 262 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 431e0008..c8a23676 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -355,5 +355,11 @@
         "leech": "Leech",
         "upload": "Upload",
         "seed": "Seed"
+    },
+    "flood": {
+        "download": "Download",
+        "upload": "Upload",
+        "leech": "Leech",
+        "seed": "Seed"
     }
 }

From 01b55a17f1aafdd8c4312dfb321b6b9caee55259 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 1 Dec 2022 16:53:57 -0800
Subject: [PATCH 282/300] fix flood lint

---
 src/widgets/flood/component.jsx | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx
index 0615154f..4676d798 100644
--- a/src/widgets/flood/component.jsx
+++ b/src/widgets/flood/component.jsx
@@ -31,16 +31,16 @@ export default function Component({ service }) {
   let completed = 0;
   let leech = 0;
 
-  for (var torrent in torrentData.torrents) {
-    rateDl += torrentData.torrents[torrent].downRate;
-    rateUl += torrentData.torrents[torrent].upRate;
-    if(torrentData.torrents[torrent].status.includes('complete')){
+  Object.values(torrentData.torrents).forEach(torrent => {
+    rateDl += torrent.downRate;
+    rateUl += torrent.upRate;
+    if(torrent.status.includes('complete')){
       completed += 1;
     }
-    if(torrentData.torrents[torrent].status.includes('downloading')){
+    if(torrent.status.includes('downloading')){
       leech += 1;
     }
-  }
+  })
 
   return (
     <Container service={service}>

From 98cefe37d20264cc5eb45079614761a748fa97a5 Mon Sep 17 00:00:00 2001
From: Nonoss117 <nonoss117@gmail.com>
Date: Fri, 2 Dec 2022 06:04:05 +0000
Subject: [PATCH 283/300] Translated using Weblate (French)

Currently translated at 100.0% (262 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
---
 public/locales/fr/common.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 1addd4fd..34a15897 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -357,8 +357,8 @@
         "seed": "Seed"
     },
     "flood": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Récep.",
+        "upload": "Envoi",
         "leech": "Leech",
         "seed": "Seed"
     }

From 57d12c32fc7fce799c2763157bd2574852a5eef6 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 3 Dec 2022 01:43:53 -0800
Subject: [PATCH 284/300] Hide docker memory stats when unsupported

---
 src/widgets/docker/component.jsx | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx
index bdc49be3..9d3affd3 100644
--- a/src/widgets/docker/component.jsx
+++ b/src/widgets/docker/component.jsx
@@ -46,7 +46,9 @@ export default function Component({ service }) {
   return (
     <Container service={service}>
       <Block label="docker.cpu" value={t("common.percent", { value: calculateCPUPercent(statsData.stats) })} />
-      <Block label="docker.mem" value={t("common.bytes", { value: statsData.stats.memory_stats.usage })} />
+      {statsData.stats.memory_stats.usage && 
+        <Block label="docker.mem" value={t("common.bytes", { value: statsData.stats.memory_stats.usage })} />
+      }
       {network && (
         <>
           <Block label="docker.rx" value={t("common.bytes", { value: network.rx_bytes })} />

From 35a7ba77e3d890ec73b9edefb920648ec66561fa Mon Sep 17 00:00:00 2001
From: gallegonovato <fran-carro@hotmail.es>
Date: Fri, 2 Dec 2022 17:32:49 +0000
Subject: [PATCH 285/300] Translated using Weblate (Spanish)

Currently translated at 100.0% (262 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
---
 public/locales/es/common.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 80da36bf..1eaceaa4 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -357,8 +357,8 @@
         "seed": "Semilla"
     },
     "flood": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Descargar",
+        "upload": "Subir",
         "leech": "Leech",
         "seed": "Seed"
     }

From 6045e532075605d3826eedbf7bfd5661222f4867 Mon Sep 17 00:00:00 2001
From: retmas-gh <github@oppai.ovh>
Date: Sat, 3 Dec 2022 15:00:09 +0000
Subject: [PATCH 286/300] Translated using Weblate (Polish)

Currently translated at 98.4% (258 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
---
 public/locales/pl/common.json | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 4e17d14e..c4accc5a 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -127,7 +127,7 @@
         "pending": "Oczekiwane",
         "approved": "Zaakceptowane",
         "available": "Dostępne",
-        "processing": "Processing"
+        "processing": "Przetwarzane"
     },
     "pihole": {
         "queries": "Zapytania",
@@ -336,29 +336,29 @@
         "ping": "Ping"
     },
     "scrutiny": {
-        "passed": "Passed",
-        "failed": "Failed",
-        "unknown": "Unknown"
+        "passed": "Powodzenie",
+        "failed": "Niepowodzenie",
+        "unknown": "Nieznane"
     },
     "paperlessngx": {
-        "inbox": "Inbox",
-        "total": "Total"
+        "inbox": "Skrzynka odbiorcza",
+        "total": "W sumie"
     },
     "deluge": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Pobieranie",
+        "upload": "Wysyłanie",
         "leech": "Leech",
         "seed": "Seed"
     },
     "diskstation": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Pobieranie",
+        "upload": "Wysyłanie",
         "leech": "Leech",
         "seed": "Seed"
     },
     "flood": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Pobieranie",
+        "upload": "Wysyłanie",
         "leech": "Leech",
         "seed": "Seed"
     }

From 1a9445384962c3ff3f398cb81b3954f27c34a068 Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Sun, 4 Dec 2022 19:33:15 +0100
Subject: [PATCH 287/300] Respect scrutiny device status threshold setting

---
 src/widgets/scrutiny/component.jsx | 43 ++++++++++++++++++++++++------
 src/widgets/scrutiny/widget.js     |  6 +++++
 2 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index 2e44d778..8bba3030 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -3,15 +3,39 @@ 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: scrutinyData, error: scrutinyError } = useWidgetAPI(widget, "summary");
-
-  if (scrutinyError) {
-    return <Container error={scrutinyError} />;
+  // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/shared/device-status.pipe.ts
+  const DeviceStatus = {
+    passed: 0,
+    failed_smart: 1,
+    failed_scrutiny: 2,
+    failed_both: 3
+  }
+  
+  // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/core/config/app.config.ts
+  const DeviceStatusThreshold = {
+    smart : 1,
+    scrutiny: 2,
+    both: 3
   }
 
-  if (!scrutinyData) {
+  const thresholdStatusMapping = new Map([
+    [DeviceStatusThreshold.smart, DeviceStatus.failed_smart],
+    [DeviceStatusThreshold.scrutiny, DeviceStatus.scrutiny],
+    [DeviceStatusThreshold.both, DeviceStatusThreshold.both]
+  ])
+  
+  const { widget } = service;
+
+  const { data: scrutinySettings, error: scrutinySettingsError } = useWidgetAPI(widget, "settings");
+  const { data: scrutinyData, error: scrutinyError } = useWidgetAPI(widget, "summary");
+
+  if (scrutinyError || scrutinySettingsError) {
+    const finalError = scrutinyError ?? scrutinySettingsError;
+    return <Container error={finalError} />;
+  }
+
+  if (!scrutinyData || !scrutinySettings) {
     return (
       <Container service={service}>
         <Block label="scrutiny.passed" />
@@ -22,10 +46,11 @@ export default function Component({ service }) {
   }
 
   const deviceIds = Object.values(scrutinyData.data.summary);
+  const statusThreshold = scrutinySettings.settings.metrics.status_threshold;
   
+  const failed = deviceIds.filter(deviceId => [thresholdStatusMapping.get(statusThreshold), DeviceStatus.failed_both].includes(deviceId.device.device_status))?.length || 0;
+  const unknown = deviceIds.filter(deviceId => deviceId.device.device_status < DeviceStatus.passed || deviceId.device.device_status > DeviceStatus.failed_both)?.length || 0;
   const passed = deviceIds.filter(deviceId => deviceId.device.device_status === 0)?.length || 0;
-  const failed = deviceIds.filter(deviceId => deviceId.device.device_status > 0 && deviceId.device.device_status <= 3)?.length || 0;
-  const unknown = deviceIds.length - (passed + failed) || 0;
 
   return (
     <Container service={service}>
@@ -35,3 +60,5 @@ export default function Component({ service }) {
     </Container>
   );
 }
+
+
diff --git a/src/widgets/scrutiny/widget.js b/src/widgets/scrutiny/widget.js
index 8af7e04e..0d2e6b5c 100644
--- a/src/widgets/scrutiny/widget.js
+++ b/src/widgets/scrutiny/widget.js
@@ -11,6 +11,12 @@ const widget = {
         "data",
       ]
     },
+    settings: {
+      endpoint: "settings",
+      validate: [
+        "settings",
+      ]
+    }
   },
 };
 

From 3f79a2fdda7a7d60d51a05e698924d5bfe66b119 Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Sun, 4 Dec 2022 20:01:00 +0100
Subject: [PATCH 288/300] thresholdStatusMapping bugfix

---
 src/widgets/scrutiny/component.jsx | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index 8bba3030..a9919c9d 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -21,8 +21,8 @@ export default function Component({ service }) {
 
   const thresholdStatusMapping = new Map([
     [DeviceStatusThreshold.smart, DeviceStatus.failed_smart],
-    [DeviceStatusThreshold.scrutiny, DeviceStatus.scrutiny],
-    [DeviceStatusThreshold.both, DeviceStatusThreshold.both]
+    [DeviceStatusThreshold.scrutiny, DeviceStatus.failed_scrutiny],
+    [DeviceStatusThreshold.both, DeviceStatus.both]
   ])
   
   const { widget } = service;

From cbf72eedab97f82ed5c4aac7d0dceccb1d383818 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 4 Dec 2022 15:33:51 -0800
Subject: [PATCH 289/300] fix missing passing condition

---
 src/widgets/scrutiny/component.jsx | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index a9919c9d..00ebe5ed 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -14,16 +14,10 @@ export default function Component({ service }) {
   
   // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/core/config/app.config.ts
   const DeviceStatusThreshold = {
-    smart : 1,
+    smart: 1,
     scrutiny: 2,
     both: 3
   }
-
-  const thresholdStatusMapping = new Map([
-    [DeviceStatusThreshold.smart, DeviceStatus.failed_smart],
-    [DeviceStatusThreshold.scrutiny, DeviceStatus.failed_scrutiny],
-    [DeviceStatusThreshold.both, DeviceStatus.both]
-  ])
   
   const { widget } = service;
 
@@ -48,9 +42,9 @@ export default function Component({ service }) {
   const deviceIds = Object.values(scrutinyData.data.summary);
   const statusThreshold = scrutinySettings.settings.metrics.status_threshold;
   
-  const failed = deviceIds.filter(deviceId => [thresholdStatusMapping.get(statusThreshold), DeviceStatus.failed_both].includes(deviceId.device.device_status))?.length || 0;
+  const failed = deviceIds.filter(deviceId => (deviceId.device.device_status > 0 && statusThreshold === DeviceStatusThreshold.both) || [statusThreshold, DeviceStatus.failed_both].includes(deviceId.device.device_status))?.length || 0;
   const unknown = deviceIds.filter(deviceId => deviceId.device.device_status < DeviceStatus.passed || deviceId.device.device_status > DeviceStatus.failed_both)?.length || 0;
-  const passed = deviceIds.filter(deviceId => deviceId.device.device_status === 0)?.length || 0;
+  const passed = deviceIds.filter(deviceId => deviceId.device.device_status === 0 || (deviceId.device.device_status > statusThreshold && deviceId.device.device_status < DeviceStatus.failed_both))?.length || 0;
 
   return (
     <Container service={service}>

From 90cb395dc6f9be7606efd0265f4a77b295694c8b Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Mon, 5 Dec 2022 08:01:24 +0100
Subject: [PATCH 290/300] change calculation of passed devices

---
 src/widgets/scrutiny/component.jsx | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index 00ebe5ed..707a991f 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -9,7 +9,10 @@ export default function Component({ service }) {
     passed: 0,
     failed_smart: 1,
     failed_scrutiny: 2,
-    failed_both: 3
+    failed_both: 3,
+
+    isFailed: function ( s ) { return s > this.passed && s <= this.failed_both},
+    isUnknown: function ( s ) { return s < this.passed || s > this.failed_both}
   }
   
   // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/core/config/app.config.ts
@@ -37,14 +40,14 @@ export default function Component({ service }) {
         <Block label="scrutiny.unknown" />
       </Container>
     );
-  }
+  } 
 
   const deviceIds = Object.values(scrutinyData.data.summary);
   const statusThreshold = scrutinySettings.settings.metrics.status_threshold;
-  
-  const failed = deviceIds.filter(deviceId => (deviceId.device.device_status > 0 && statusThreshold === DeviceStatusThreshold.both) || [statusThreshold, DeviceStatus.failed_both].includes(deviceId.device.device_status))?.length || 0;
-  const unknown = deviceIds.filter(deviceId => deviceId.device.device_status < DeviceStatus.passed || deviceId.device.device_status > DeviceStatus.failed_both)?.length || 0;
-  const passed = deviceIds.filter(deviceId => deviceId.device.device_status === 0 || (deviceId.device.device_status > statusThreshold && deviceId.device.device_status < DeviceStatus.failed_both))?.length || 0;
+
+  const failed = deviceIds.filter(deviceId => (DeviceStatus.isFailed(deviceId.device.device_status) && statusThreshold === DeviceStatusThreshold.both) || [statusThreshold, DeviceStatus.failed_both].includes(deviceId.device.device_status))?.length || 0;
+  const unknown = deviceIds.filter(deviceId => DeviceStatus.isUnknown(deviceId.device.device_status))?.length || 0;
+  const passed = deviceIds.length - (failed + unknown);
 
   return (
     <Container service={service}>
@@ -52,7 +55,7 @@ export default function Component({ service }) {
       <Block label="scrutiny.failed" value={failed} />
       <Block label="scrutiny.unknown" value={unknown} />
     </Container>
+    
   );
-}
-
-
+  
+}
\ No newline at end of file

From 0ce5311b5fb7f64d69d55894da345163175f8d6b Mon Sep 17 00:00:00 2001
From: Niklas <niklastasler@gmail.com>
Date: Mon, 5 Dec 2022 08:13:41 +0100
Subject: [PATCH 291/300] fix lint errors

---
 src/widgets/scrutiny/component.jsx | 41 +++++++++++++++---------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index 707a991f..0f769d9f 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -2,26 +2,26 @@ import Container from "components/services/widget/container";
 import Block from "components/services/widget/block";
 import useWidgetAPI from "utils/proxy/use-widget-api";
 
+
+// @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/shared/device-status.pipe.ts
+const DeviceStatus = {
+  passed: 0,
+  failed_smart: 1,
+  failed_scrutiny: 2,
+  failed_both: 3,
+
+  isFailed(s){ return s > this.passed && s <= this.failed_both},
+  isUnknown(s){ return s < this.passed || s > this.failed_both}
+}
+
+// @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/core/config/app.config.ts
+const DeviceStatusThreshold = {
+  smart: 1,
+  scrutiny: 2,
+  both: 3
+}
+
 export default function Component({ service }) {
-
-  // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/shared/device-status.pipe.ts
-  const DeviceStatus = {
-    passed: 0,
-    failed_smart: 1,
-    failed_scrutiny: 2,
-    failed_both: 3,
-
-    isFailed: function ( s ) { return s > this.passed && s <= this.failed_both},
-    isUnknown: function ( s ) { return s < this.passed || s > this.failed_both}
-  }
-  
-  // @see https://github.com/AnalogJ/scrutiny/blob/d8d56f77f9e868127c4849dac74d65512db658e8/webapp/frontend/src/app/core/config/app.config.ts
-  const DeviceStatusThreshold = {
-    smart: 1,
-    scrutiny: 2,
-    both: 3
-  }
-  
   const { widget } = service;
 
   const { data: scrutinySettings, error: scrutinySettingsError } = useWidgetAPI(widget, "settings");
@@ -58,4 +58,5 @@ export default function Component({ service }) {
     
   );
   
-}
\ No newline at end of file
+}
+

From 6de0205d0730960974961ee10e191a0892d82e96 Mon Sep 17 00:00:00 2001
From: Saxo_Broko <rascalxena@y7mail.com>
Date: Tue, 6 Dec 2022 00:22:44 +1100
Subject: [PATCH 292/300] Linked weather providers and added an attributi...

attribution for Open-Meteo
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3dd0e794..b9023ae9 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@
   - Coin Market Cap, Mastodon
 - Information & Utility Widgets
   - System Stats (Disk, CPU, Memory)
-  - Weather via WeatherAPI.com or OpenWeatherMap
+  - Weather via [WeatherAPI.com](https://www.weatherapi.com/), [OpenWeatherMap](https://openweathermap.org/), or [Open-Meteo](https://open-meteo.com/)
   - Search Bar
 - Customizable
   - 21 theme colors with light and dark mode support

From 656b818488ab4bf2d61e03d557e51c5265f54616 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 5 Dec 2022 08:52:45 -0800
Subject: [PATCH 293/300] Fix conditions map for openmeteo

---
 src/components/widgets/openmeteo/icon.jsx    |   2 +-
 src/utils/weather/openmeteo-condition-map.js | 212 +++++++++++++++++++
 2 files changed, 213 insertions(+), 1 deletion(-)
 create mode 100644 src/utils/weather/openmeteo-condition-map.js

diff --git a/src/components/widgets/openmeteo/icon.jsx b/src/components/widgets/openmeteo/icon.jsx
index a2b01ba1..12d93fcb 100644
--- a/src/components/widgets/openmeteo/icon.jsx
+++ b/src/components/widgets/openmeteo/icon.jsx
@@ -1,4 +1,4 @@
-import mapIcon from "utils/weather/owm-condition-map";
+import mapIcon from "utils/weather/openmeteo-condition-map";
 
 export default function Icon({ condition, timeOfDay }) {
   const IconComponent = mapIcon(condition, timeOfDay);
diff --git a/src/utils/weather/openmeteo-condition-map.js b/src/utils/weather/openmeteo-condition-map.js
new file mode 100644
index 00000000..06ed3d46
--- /dev/null
+++ b/src/utils/weather/openmeteo-condition-map.js
@@ -0,0 +1,212 @@
+import * as Icons from "react-icons/wi";
+
+// see https://open-meteo.com/en/docs
+
+const conditions = [
+  {
+    code: 1,
+    icon: {
+      day: Icons.WiDayCloudy,
+      night: Icons.WiNightAltCloudy,
+    },
+  },
+  {
+    code: 2,
+    icon: {
+      day: Icons.WiDayCloudy,
+      night: Icons.WiNightAltCloudy,
+    },
+  },
+  {
+    code: 3,
+    icon: {
+      day: Icons.WiDayCloudy,
+      night: Icons.WiNightAltCloudy,
+    },
+  },
+  {
+    code: 45,
+    icon: {
+      day: Icons.WiDayFog,
+      night: Icons.WiNightFog,
+    },
+  },
+  {
+    code: 48,
+    icon: {
+      day: Icons.WiDayFog,
+      night: Icons.WiNightFog,
+    },
+  },
+  {
+    code: 51,
+    icon: {
+      day: Icons.WiDaySprinkle,
+      night: Icons.WiNightAltSprinkle,
+    },
+  },
+  {
+    code: 53,
+    icon: {
+      day: Icons.WiDaySprinkle,
+      night: Icons.WiNightAltSprinkle,
+    },
+  },
+  {
+    code: 55,
+    icon: {
+      day: Icons.WiDaySprinkle,
+      night: Icons.WiNightAltSprinkle,
+    },
+  },
+  {
+    code: 56,
+    icon: {
+      day: Icons.WiDaySleet,
+      night: Icons.WiNightAltSleet,
+    },
+  },
+  {
+    code: 57,
+    icon: {
+      day: Icons.WiDaySleet,
+      night: Icons.WiNightAltSleet,
+    },
+  },
+  {
+    code: 61,
+    icon: {
+      day: Icons.WiDayShowers,
+      night: Icons.WiNightAltShowers,
+    },
+  },
+  {
+    code: 63,
+    icon: {
+      day: Icons.WiDayShowers,
+      night: Icons.WiNightAltShowers,
+    },
+  },
+  {
+    code: 65,
+    icon: {
+      day: Icons.WiDayShowers,
+      night: Icons.WiNightAltShowers,
+    },
+  },
+  {
+    code: 66,
+    icon: {
+      day: Icons.WiDaySleet,
+      night: Icons.WiNightAltSleet,
+    },
+  },
+  {
+    code: 67,
+    icon: {
+      day: Icons.WiDaySleet,
+      night: Icons.WiNightAltSleet,
+    },
+  },
+  {
+    code: 71,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 73,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 75,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 77,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 80,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 81,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 82,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 85,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 86,
+    icon: {
+      day: Icons.WiDaySnow,
+      night: Icons.WiNightAltSnow,
+    },
+  },
+  {
+    code: 95,
+    icon: {
+      day: Icons.WiDayThunderstorm,
+      night: Icons.WiNightAltThunderstorm,
+    },
+  },
+  {
+    code: 96,
+    icon: {
+      day: Icons.WiDayThunderstorm,
+      night: Icons.WiNightAltThunderstorm,
+    },
+  },
+  {
+    code: 99,
+    icon: {
+      day: Icons.WiDayThunderstorm,
+      night: Icons.WiNightAltThunderstorm,
+    },
+  },
+];
+
+export default function mapIcon(weatherStatusCode, timeOfDay) {
+  const mapping = conditions.find((condition) => condition.code === weatherStatusCode);
+  console.log(weatherStatusCode, timeOfDay, mapping);
+
+  if (mapping) {
+    if (timeOfDay === "day") {
+      return mapping.icon.day;
+    }
+
+    if (timeOfDay === "night") {
+      return mapping.icon.night;
+    }
+  }
+
+  return Icons.WiDaySunny;
+}

From 535a7d2f2d3f92235f1ddf5c5cebd9671a01b272 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 5 Dec 2022 09:41:19 -0800
Subject: [PATCH 294/300] Add optional tz

---
 src/pages/api/widgets/openmeteo.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/pages/api/widgets/openmeteo.js b/src/pages/api/widgets/openmeteo.js
index e79931cb..37233645 100644
--- a/src/pages/api/widgets/openmeteo.js
+++ b/src/pages/api/widgets/openmeteo.js
@@ -1,8 +1,9 @@
 import cachedFetch from "utils/proxy/cached-fetch";
 
 export default async function handler(req, res) {
-  const { latitude, longitude, units, cache } = req.query;
+  const { latitude, longitude, units, cache, timezone } = req.query;
   const degrees = units === "imperial" ? "fahrenheit" : "celsius";
-  const apiUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=sunrise,sunset&current_weather=true&temperature_unit=${degrees}&timezone=auto`;
+  const timezeone = timezone ?? 'auto'
+  const apiUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=sunrise,sunset&current_weather=true&temperature_unit=${degrees}&timezone=${timezeone}`;
   return res.send(await cachedFetch(apiUrl, cache));
 }
\ No newline at end of file

From a7676c4daa700e5bbcb9b6ba25940f5d1e8baa84 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 5 Dec 2022 09:41:54 -0800
Subject: [PATCH 295/300] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b9023ae9..586b4456 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@
   - Coin Market Cap, Mastodon
 - Information & Utility Widgets
   - System Stats (Disk, CPU, Memory)
-  - Weather via [WeatherAPI.com](https://www.weatherapi.com/), [OpenWeatherMap](https://openweathermap.org/), or [Open-Meteo](https://open-meteo.com/)
+  - Weather via [OpenWeatherMap](https://openweathermap.org/) or [Open-Meteo](https://open-meteo.com/)
   - Search Bar
 - Customizable
   - 21 theme colors with light and dark mode support

From f89093a0672f989b8428f7ded34df4dd5129c29f Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 5 Dec 2022 09:57:32 -0800
Subject: [PATCH 296/300] Update openmeteo-condition-map.js

---
 src/utils/weather/openmeteo-condition-map.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/utils/weather/openmeteo-condition-map.js b/src/utils/weather/openmeteo-condition-map.js
index 06ed3d46..9ae67365 100644
--- a/src/utils/weather/openmeteo-condition-map.js
+++ b/src/utils/weather/openmeteo-condition-map.js
@@ -196,7 +196,6 @@ const conditions = [
 
 export default function mapIcon(weatherStatusCode, timeOfDay) {
   const mapping = conditions.find((condition) => condition.code === weatherStatusCode);
-  console.log(weatherStatusCode, timeOfDay, mapping);
 
   if (mapping) {
     if (timeOfDay === "day") {

From 5d8b937e9cfa25ee35f2714416f7c21531c3fddf Mon Sep 17 00:00:00 2001
From: Milo Ivir <mail@milotype.de>
Date: Mon, 5 Dec 2022 19:16:32 +0000
Subject: [PATCH 297/300] Translated using Weblate (Croatian)

Currently translated at 97.7% (256 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
---
 public/locales/hr/common.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index f7964938..58539904 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -24,7 +24,7 @@
         "available": "Dostupno",
         "pending": "Predstoji",
         "approved": "Odobreno",
-        "processing": "Processing"
+        "processing": "Obrada"
     },
     "pihole": {
         "queries": "Upiti",
@@ -345,20 +345,20 @@
         "total": "Ukupno"
     },
     "deluge": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Preuzimanje",
+        "upload": "Prijenos",
         "leech": "Leech",
         "seed": "Seed"
     },
     "diskstation": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Preuzimanje",
+        "upload": "Prijenos",
         "leech": "Leech",
         "seed": "Seed"
     },
     "flood": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Preuzimanje",
+        "upload": "Prijenos",
         "leech": "Leech",
         "seed": "Seed"
     }

From 94af8044f11aae0cd128075cd4eabfe04440a4af Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 6 Dec 2022 15:36:53 -0800
Subject: [PATCH 298/300] fix minor flood without a backend error

---
 src/widgets/flood/component.jsx | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx
index 4676d798..80ad2b28 100644
--- a/src/widgets/flood/component.jsx
+++ b/src/widgets/flood/component.jsx
@@ -11,11 +11,11 @@ export default function Component({ service }) {
 
   const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents");
 
-  if (torrentError) {
-    return <Container error={torrentError} />;
+  if (torrentError || !torrentData?.torrents) {
+    return <Container error={torrentError ?? {message: "No torrent data returned"}} />;
   }
 
-  if (!torrentData) {
+  if (!torrentData || !torrentData.torrents) {
     return (
       <Container service={service}>
         <Block label="flood.leech" />

From 59cb7baf0b288f24ef23b8affdb7e50b4d33d2d3 Mon Sep 17 00:00:00 2001
From: Diogo Gaspar <diogogaspar932@gmail.com>
Date: Wed, 7 Dec 2022 00:04:47 +0000
Subject: [PATCH 299/300] Translated using Weblate (Portuguese)

Currently translated at 52.2% (137 of 262 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
---
 public/locales/pt/common.json | 46 +++++++++++++++++------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 93058498..3cde6047 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -3,10 +3,10 @@
         "missing_type": "Widget ausente: {{type}}",
         "api_error": "Erro da API",
         "status": "Status",
-        "information": "Information",
-        "url": "URL",
+        "information": "Informação",
+        "url": "Endereço URL",
         "raw_error": "Raw Error",
-        "response_data": "Response Data"
+        "response_data": "Dados da Resposta"
     },
     "search": {
         "placeholder": "Pesquisar…"
@@ -24,8 +24,8 @@
         "mem": "Mem",
         "cpu": "CPU",
         "offline": "Desligado",
-        "error": "Error",
-        "unknown": "Unknown"
+        "error": "Erro",
+        "unknown": "Desconhecido"
     },
     "emby": {
         "playing": "A reproduzir",
@@ -150,7 +150,7 @@
     "transmission": {
         "download": "Baixando",
         "upload": "Enviando",
-        "leech": "Sanguessugas",
+        "leech": "Leech",
         "seed": "Semeadores"
     },
     "jackett": {
@@ -201,25 +201,25 @@
         "vms": "VMs"
     },
     "unifi": {
-        "users": "Users",
-        "uptime": "System Uptime",
-        "days": "Days",
+        "users": "Utilizadores",
+        "uptime": "Tempo de Atividade do Sistema",
+        "days": "Dias",
         "wan": "WAN",
-        "lan_users": "LAN Users",
-        "wlan_users": "WLAN Users",
+        "lan_users": "Utilizadores LAN",
+        "wlan_users": "Utilizadores WLAN",
         "up": "UP",
         "down": "DOWN",
-        "wait": "Please wait",
+        "wait": "Por favor aguarde",
         "lan": "LAN",
         "wlan": "WLAN",
-        "devices": "Devices",
-        "lan_devices": "LAN Devices",
-        "wlan_devices": "WLAN Devices"
+        "devices": "Dispositivos",
+        "lan_devices": "Dispositivos LAN",
+        "wlan_devices": "Dispositivos WLAN"
     },
     "plex": {
-        "streams": "Active Streams",
-        "movies": "Movies",
-        "tv": "TV Shows"
+        "streams": "Streams Ativas",
+        "movies": "Filmes",
+        "tv": "Series de TV"
     },
     "glances": {
         "cpu": "CPU",
@@ -227,8 +227,8 @@
         "wait": "Please wait"
     },
     "changedetectionio": {
-        "totalObserved": "Total Observed",
-        "diffsDetected": "Diffs Detected"
+        "totalObserved": "Total Observado",
+        "diffsDetected": "Diferenças Detetadas"
     },
     "wmo": {
         "0-day": "Sunny",
@@ -343,7 +343,7 @@
         "hd": "HD"
     },
     "ping": {
-        "error": "Error",
+        "error": "Erro",
         "ping": "Ping"
     },
     "scrutiny": {
@@ -368,8 +368,8 @@
         "seed": "Seed"
     },
     "flood": {
-        "download": "Download",
-        "upload": "Upload",
+        "download": "Descarregar",
+        "upload": "Carregar",
         "leech": "Leech",
         "seed": "Seed"
     }

From 537fd0ac216b4a64fac1faef021bbfb20d7709a6 Mon Sep 17 00:00:00 2001
From: clay <clay@clbx.io>
Date: Thu, 8 Dec 2022 00:05:33 -0500
Subject: [PATCH 300/300] Correct spelling of Authentik

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 586b4456..6409c2d2 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@
 - Service Integration
   - Sonarr, Radarr, Readarr, Prowlarr, Bazarr, Lidarr, Emby, Jellyfin, Tautulli (Plex)
   - Ombi, Overseerr, Jellyseerr, Jackett, NZBGet, SABnzbd, ruTorrent, Transmission, qBittorrent
-  - Portainer, Traefik, Speedtest Tracker, PiHole, AdGuard Home, Nginx Proxy Manager, Gotify, Syncthing Relay Server, Authentic, Proxmox
+  - Portainer, Traefik, Speedtest Tracker, PiHole, AdGuard Home, Nginx Proxy Manager, Gotify, Syncthing Relay Server, Authentik, Proxmox
 - Information Providers
   - Coin Market Cap, Mastodon
 - Information & Utility Widgets