From 19bdc0ec34a8bc9576d71e6df7b182e192c6b814 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:01:42 -0700 Subject: [PATCH] Enhancement: handle immich v1.118 breaking API change (#4110) --- docs/widgets/services/immich.md | 6 ++++++ src/utils/config/service-helpers.js | 6 +++--- src/widgets/immich/component.jsx | 18 +++++++++++++----- src/widgets/immich/widget.js | 14 ++++++++++---- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/docs/widgets/services/immich.md b/docs/widgets/services/immich.md index 63780ee04..4da6e187d 100644 --- a/docs/widgets/services/immich.md +++ b/docs/widgets/services/immich.md @@ -5,6 +5,11 @@ description: Immich Widget Configuration Learn more about [Immich](https://github.com/immich-app/immich). +| Immich Version | Homepage Widget Version | +| -------------- | ----------------------- | +| < v1.118 | 1 (default) | +| >= v1.118 | 2 | + Find your API key under `Account Settings > API Keys`. Allowed fields: `["users" ,"photos", "videos", "storage"]`. @@ -16,4 +21,5 @@ widget: type: immich url: http://immich.host.or.ip key: adminapikeyadminapikeyadminapikey + version: 2 # optional, default is 1 ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 6138d2e90..24ba57e23 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -406,7 +406,7 @@ export function cleanServiceGroups(groups) { // frigate enableRecentEvents, - // glances, mealie, pihole, pfsense + // glances, immich, mealie, pihole, pfsense version, // glances @@ -568,8 +568,8 @@ export function cleanServiceGroups(groups) { if (snapshotHost) cleanedService.widget.snapshotHost = snapshotHost; if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath; } - if (["glances", "mealie", "pfsense", "pihole"].includes(type)) { - if (version) cleanedService.widget.version = version; + if (["glances", "immich", "mealie", "pfsense", "pihole"].includes(type)) { + if (version) cleanedService.widget.version = parseInt(version, 10); } if (type === "glances") { if (metric) cleanedService.widget.metric = metric; diff --git a/src/widgets/immich/component.jsx b/src/widgets/immich/component.jsx index 5f5bbedde..ed27d4d84 100644 --- a/src/widgets/immich/component.jsx +++ b/src/widgets/immich/component.jsx @@ -8,11 +8,19 @@ export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { data: versionData, error: versionError } = useWidgetAPI(widget, "version"); - // see https://github.com/gethomepage/homepage/issues/2282 - const endpoint = - versionData?.major > 1 || (versionData?.major === 1 && versionData?.minor > 84) ? "statistics" : "stats"; - const { data: immichData, error: immichError } = useWidgetAPI(widget, endpoint); + const { version = 1 } = widget; + + const versionEndpoint = version === 2 ? "version_v2" : "version"; + + const { data: versionData, error: versionError } = useWidgetAPI(widget, versionEndpoint); + + let statsEndpoint = version === 2 ? "statistics_v2" : "stats"; + if (version === 1) { + // see https://github.com/gethomepage/homepage/issues/2282 + statsEndpoint = + versionData?.major > 1 || (versionData?.major === 1 && versionData?.minor > 84) ? "statistics" : "stats"; + } + const { data: immichData, error: immichError } = useWidgetAPI(widget, statsEndpoint); if (immichError || versionError || immichData?.statusCode === 401) { return ; diff --git a/src/widgets/immich/widget.js b/src/widgets/immich/widget.js index 230f8ab27..da3308c25 100644 --- a/src/widgets/immich/widget.js +++ b/src/widgets/immich/widget.js @@ -1,18 +1,24 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { - api: "{url}/api/server-info/{endpoint}", + api: "{url}/api/{endpoint}", proxyHandler: credentialedProxyHandler, mappings: { version: { - endpoint: "version", + endpoint: "server-info/version", }, statistics: { - endpoint: "statistics", + endpoint: "server-info/statistics", }, stats: { - endpoint: "stats", + endpoint: "server-info/stats", + }, + version_v2: { + endpoint: "server/version", + }, + statistics_v2: { + endpoint: "server/statistics", }, }, };