diff --git a/hassio/src/dashboard/hassio-update.ts b/hassio/src/dashboard/hassio-update.ts index 5859a7f78f..ccff99445b 100644 --- a/hassio/src/dashboard/hassio-update.ts +++ b/hassio/src/dashboard/hassio-update.ts @@ -19,7 +19,7 @@ import "../../../src/components/ha-svg-icon"; import { extractApiErrorMessage, HassioResponse, - ignoredStatusCodes, + ignoreSupervisorError, } from "../../../src/data/hassio/common"; import { HassioHassOSInfo } from "../../../src/data/hassio/host"; import { @@ -216,11 +216,7 @@ export class HassioUpdate extends LitElement { } catch (err) { // Only show an error if the status code was not expected (user behind proxy) // or no status at all(connection terminated) - if ( - this.hass.connection.connected && - err.status_code && - !ignoredStatusCodes.has(err.status_code) - ) { + if (this.hass.connection.connected && !ignoreSupervisorError(err)) { showAlertDialog(this, { title: this.supervisor.localize("common.error.update_failed"), text: extractApiErrorMessage(err), diff --git a/hassio/src/dialogs/update/dialog-supervisor-update.ts b/hassio/src/dialogs/update/dialog-supervisor-update.ts index ee2edff4b4..47f509331d 100644 --- a/hassio/src/dialogs/update/dialog-supervisor-update.ts +++ b/hassio/src/dialogs/update/dialog-supervisor-update.ts @@ -14,7 +14,10 @@ import "../../../../src/components/ha-dialog"; import "../../../../src/components/ha-settings-row"; import "../../../../src/components/ha-svg-icon"; import "../../../../src/components/ha-switch"; -import { extractApiErrorMessage } from "../../../../src/data/hassio/common"; +import { + extractApiErrorMessage, + ignoreSupervisorError, +} from "../../../../src/data/hassio/common"; import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot"; import { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import type { HomeAssistant } from "../../../../src/types"; @@ -160,7 +163,9 @@ class DialogSupervisorUpdate extends LitElement { try { await this._dialogParams!.updateHandler!(); } catch (err) { - this._error = extractApiErrorMessage(err); + if (this.hass.connection.connected && !ignoreSupervisorError(err)) { + this._error = extractApiErrorMessage(err); + } this._action = null; return; } diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts index 1525f71a62..2abc9c1652 100644 --- a/hassio/src/system/hassio-host-info.ts +++ b/hassio/src/system/hassio-host-info.ts @@ -21,7 +21,7 @@ import "../../../src/components/ha-card"; import "../../../src/components/ha-settings-row"; import { extractApiErrorMessage, - ignoredStatusCodes, + ignoreSupervisorError, } from "../../../src/data/hassio/common"; import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware"; import { @@ -274,7 +274,7 @@ class HassioHostInfo extends LitElement { await rebootHost(this.hass); } catch (err) { // Ignore connection errors, these are all expected - if (err.status_code && !ignoredStatusCodes.has(err.status_code)) { + if (this.hass.connection.connected && !ignoreSupervisorError(err)) { showAlertDialog(this, { title: this.supervisor.localize("system.host.failed_to_reboot"), text: extractApiErrorMessage(err), @@ -304,7 +304,7 @@ class HassioHostInfo extends LitElement { await shutdownHost(this.hass); } catch (err) { // Ignore connection errors, these are all expected - if (err.status_code && !ignoredStatusCodes.has(err.status_code)) { + if (this.hass.connection.connected && !ignoreSupervisorError(err)) { showAlertDialog(this, { title: this.supervisor.localize("system.host.failed_to_shutdown"), text: extractApiErrorMessage(err), diff --git a/src/data/hassio/common.ts b/src/data/hassio/common.ts index de6a28c68b..dd774816a1 100644 --- a/src/data/hassio/common.ts +++ b/src/data/hassio/common.ts @@ -28,7 +28,22 @@ export const extractApiErrorMessage = (error: any): string => { : error; }; -export const ignoredStatusCodes = new Set([502, 503, 504]); +const ignoredStatusCodes = new Set([502, 503, 504]); + +export const ignoreSupervisorError = (error): boolean => { + if (error && error.status_code && ignoredStatusCodes.has(error.status_code)) { + return true; + } + if ( + error && + error.message && + (error.message.includes("ERR_CONNECTION_CLOSED") || + error.message.includes("ERR_CONNECTION_RESET")) + ) { + return true; + } + return false; +}; export const fetchHassioStats = async ( hass: HomeAssistant,