From 4b796b49297d6304845800136e2ec77aa3d8667d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sat, 8 May 2021 00:08:57 +0200 Subject: [PATCH] Add supervisor_ingress support to my (#9087) --- hassio/src/hassio-my-redirect.ts | 6 ++++ hassio/src/hassio-router.ts | 3 +- .../src/ingress-view/hassio-ingress-view.ts | 33 +++++++++++++++++++ src/translations/en.json | 3 +- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/hassio/src/hassio-my-redirect.ts b/hassio/src/hassio-my-redirect.ts index 0e73adc52929..76fed4cd682b 100644 --- a/hassio/src/hassio-my-redirect.ts +++ b/hassio/src/hassio-my-redirect.ts @@ -43,6 +43,12 @@ const REDIRECTS: Redirects = { addon: "string", }, }, + supervisor_ingress: { + redirect: "/hassio/ingress", + params: { + addon: "string", + }, + }, supervisor_add_addon_repository: { redirect: "/hassio/store", params: { diff --git a/hassio/src/hassio-router.ts b/hassio/src/hassio-router.ts index 4e71ca7ca641..2662bfa3572e 100644 --- a/hassio/src/hassio-router.ts +++ b/hassio/src/hassio-router.ts @@ -61,11 +61,10 @@ class HassioRouter extends HassRouterPage { el.hass = this.hass; el.narrow = this.narrow; el.route = route; + el.supervisor = this.supervisor; if (el.localName === "hassio-ingress-view") { el.ingressPanel = this.panel.config && this.panel.config.ingress; - } else { - el.supervisor = this.supervisor; } } diff --git a/hassio/src/ingress-view/hassio-ingress-view.ts b/hassio/src/ingress-view/hassio-ingress-view.ts index bbdde5c053ee..54942ca950c8 100644 --- a/hassio/src/ingress-view/hassio-ingress-view.ts +++ b/hassio/src/ingress-view/hassio-ingress-view.ts @@ -12,14 +12,17 @@ import { } from "lit-element"; import { fireEvent } from "../../../src/common/dom/fire_event"; import { navigate } from "../../../src/common/navigate"; +import { extractSearchParam } from "../../../src/common/url/search-params"; import { fetchHassioAddonInfo, HassioAddonDetails, } from "../../../src/data/hassio/addon"; +import { extractApiErrorMessage } from "../../../src/data/hassio/common"; import { createHassioSession, validateHassioSession, } from "../../../src/data/hassio/ingress"; +import { Supervisor } from "../../../src/data/supervisor/supervisor"; import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box"; import "../../../src/layouts/hass-loading-screen"; import "../../../src/layouts/hass-subpage"; @@ -29,6 +32,8 @@ import { HomeAssistant, Route } from "../../../src/types"; class HassioIngressView extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; + @property({ attribute: false }) public supervisor!: Supervisor; + @property() public route!: Route; @property() public ingressPanel = false; @@ -80,6 +85,34 @@ class HassioIngressView extends LitElement { : iframe}`; } + protected async firstUpdated(): Promise { + if (this.route.path === "") { + const requestedAddon = extractSearchParam("addon"); + let addonInfo: HassioAddonDetails; + if (requestedAddon) { + try { + addonInfo = await fetchHassioAddonInfo(this.hass, requestedAddon); + } catch (err) { + await showAlertDialog(this, { + text: extractApiErrorMessage(err), + title: requestedAddon, + }); + history.back(); + return; + } + if (!addonInfo.ingress) { + await showAlertDialog(this, { + text: this.supervisor.localize("my.error_addon_no_ingress"), + title: addonInfo.name, + }); + history.back(); + } else { + navigate(this, `/hassio/ingress/${addonInfo.slug}`, true); + } + } + } + } + protected updated(changedProps: PropertyValues) { super.updated(changedProps); diff --git a/src/translations/en.json b/src/translations/en.json index ff075ced07a5..ba76e41b0ca7 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -3786,7 +3786,8 @@ "not_supported": "[%key:ui::panel::my::not_supported%]", "faq_link": "[%key:ui::panel::my::faq_link%]", "error": "[%key:ui::panel::my::error%]", - "error_addon_not_found": "Add-on not found" + "error_addon_not_found": "Add-on not found", + "error_addon_no_ingress": "The requested add-on does not support ingress" }, "system": { "log": {