Block update on error and not running state

This commit is contained in:
Ludeeus 2021-03-01 23:12:13 +00:00
parent 5ae10e8516
commit 2a4cebf724
7 changed files with 37 additions and 14 deletions

View File

@ -934,7 +934,10 @@ class HassioAddonInfo extends LitElement {
} }
private async _updateClicked(): Promise<void> { private async _updateClicked(): Promise<void> {
showDialogSupervisorAddonUpdate(this, { addon: this.addon }); showDialogSupervisorAddonUpdate(this, {
addon: this.addon,
supervisor: this.supervisor,
});
} }
private async _startClicked(ev: CustomEvent): Promise<void> { private async _startClicked(ev: CustomEvent): Promise<void> {

View File

@ -136,7 +136,7 @@ export class HassioUpdate extends LitElement {
private async _confirmUpdate(ev): Promise<void> { private async _confirmUpdate(ev): Promise<void> {
const item = ev.currentTarget; const item = ev.currentTarget;
if (item.key === "core") { if (item.key === "core") {
showDialogSupervisorCoreUpdate(this, { core: this.supervisor.core }); showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
return; return;
} }
item.progress = true; item.progress = true;

View File

@ -6,6 +6,7 @@ import {
html, html,
internalProperty, internalProperty,
LitElement, LitElement,
property,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
@ -19,6 +20,7 @@ import {
updateHassioAddon, updateHassioAddon,
} from "../../../../src/data/hassio/addon"; } from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common"; import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot"; import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types"; import type { HomeAssistant } from "../../../../src/types";
@ -26,6 +28,8 @@ import { SupervisorDialogSupervisorAddonUpdateParams } from "./show-dialog-addon
@customElement("dialog-supervisor-addon-update") @customElement("dialog-supervisor-addon-update")
class DialogSupervisorAddonUpdate extends LitElement { class DialogSupervisorAddonUpdate extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
public hass!: HomeAssistant; public hass!: HomeAssistant;
public addon!: HassioAddonDetails; public addon!: HassioAddonDetails;
@ -43,6 +47,7 @@ class DialogSupervisorAddonUpdate extends LitElement {
): Promise<void> { ): Promise<void> {
this._opened = true; this._opened = true;
this.addon = params.addon; this.addon = params.addon;
this.supervisor = params.supervisor;
await this.updateComplete; await this.updateComplete;
} }
@ -50,6 +55,7 @@ class DialogSupervisorAddonUpdate extends LitElement {
this._action = null; this._action = null;
this._createSnapshot = true; this._createSnapshot = true;
this._opened = false; this._opened = false;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName }); fireEvent(this, "dialog-closed", { dialog: this.localName });
} }
@ -94,7 +100,12 @@ class DialogSupervisorAddonUpdate extends LitElement {
<mwc-button @click=${this.closeDialog} slot="secondaryAction"> <mwc-button @click=${this.closeDialog} slot="secondaryAction">
Cancel Cancel
</mwc-button> </mwc-button>
<mwc-button @click=${this._update} slot="primaryAction"> <mwc-button
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
Update Update
</mwc-button>` </mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active> : html`<ha-circular-progress alt="Updating" size="large" active>

View File

@ -1,8 +1,10 @@
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
import { HassioAddonDetails } from "../../../../src/data/hassio/addon"; import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorAddonUpdateParams { export interface SupervisorDialogSupervisorAddonUpdateParams {
addon: HassioAddonDetails; addon: HassioAddonDetails;
supervisor: Supervisor;
} }
export const showDialogSupervisorAddonUpdate = ( export const showDialogSupervisorAddonUpdate = (

View File

@ -6,6 +6,7 @@ import {
html, html,
internalProperty, internalProperty,
LitElement, LitElement,
property,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
@ -16,17 +17,17 @@ import "../../../../src/components/ha-svg-icon";
import "../../../../src/components/ha-switch"; import "../../../../src/components/ha-switch";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common"; import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot"; import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { HassioHomeAssistantInfo } from "../../../../src/data/hassio/supervisor";
import { updateCore } from "../../../../src/data/supervisor/core"; import { updateCore } from "../../../../src/data/supervisor/core";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types"; import type { HomeAssistant } from "../../../../src/types";
import { SupervisorDialogSupervisorCoreUpdateParams } from "./show-dialog-core-update"; import { SupervisorDialogSupervisorCoreUpdateParams } from "./show-dialog-core-update";
@customElement("dialog-supervisor-core-update") @customElement("dialog-supervisor-core-update")
class DialogSupervisorCoreUpdate extends LitElement { class DialogSupervisorCoreUpdate extends LitElement {
public hass!: HomeAssistant; @property({ attribute: false }) public supervisor!: Supervisor;
public core!: HassioHomeAssistantInfo; public hass!: HomeAssistant;
@internalProperty() private _opened = false; @internalProperty() private _opened = false;
@ -40,7 +41,7 @@ class DialogSupervisorCoreUpdate extends LitElement {
params: SupervisorDialogSupervisorCoreUpdateParams params: SupervisorDialogSupervisorCoreUpdateParams
): Promise<void> { ): Promise<void> {
this._opened = true; this._opened = true;
this.core = params.core; this.supervisor = params.supervisor;
await this.updateComplete; await this.updateComplete;
} }
@ -48,6 +49,7 @@ class DialogSupervisorCoreUpdate extends LitElement {
this._action = null; this._action = null;
this._createSnapshot = true; this._createSnapshot = true;
this._opened = false; this._opened = false;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName }); fireEvent(this, "dialog-closed", { dialog: this.localName });
} }
@ -70,7 +72,7 @@ class DialogSupervisorCoreUpdate extends LitElement {
</slot> </slot>
<div> <div>
Are you sure you want to update Home Assistant Core to version Are you sure you want to update Home Assistant Core to version
${this.core.version_latest}? ${this.supervisor.core.version_latest}?
</div> </div>
<ha-settings-row three-rows> <ha-settings-row three-rows>
@ -91,14 +93,19 @@ class DialogSupervisorCoreUpdate extends LitElement {
<mwc-button @click=${this.closeDialog} slot="secondaryAction"> <mwc-button @click=${this.closeDialog} slot="secondaryAction">
Cancel Cancel
</mwc-button> </mwc-button>
<mwc-button @click=${this._update} slot="primaryAction"> <mwc-button
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
Update Update
</mwc-button>` </mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active> : html`<ha-circular-progress alt="Updating" size="large" active>
</ha-circular-progress> </ha-circular-progress>
<p class="progress-text"> <p class="progress-text">
${this._action === "update" ${this._action === "update"
? `Updating Home Assistant Core to version ${this.core.version_latest}` ? `Updating Home Assistant Core to version ${this.supervisor.core.version_latest}`
: "Creating snapshot of Home Assistant Core"} : "Creating snapshot of Home Assistant Core"}
</p>`} </p>`}
${this._error ? html`<p class="error">${this._error}</p>` : ""} ${this._error ? html`<p class="error">${this._error}</p>` : ""}
@ -115,7 +122,7 @@ class DialogSupervisorCoreUpdate extends LitElement {
this._action = "snapshot"; this._action = "snapshot";
try { try {
await createHassioPartialSnapshot(this.hass, { await createHassioPartialSnapshot(this.hass, {
name: `core_${this.core.version}`, name: `core_${this.supervisor.core.version}`,
folders: ["homeassistant"], folders: ["homeassistant"],
homeassistant: true, homeassistant: true,
}); });

View File

@ -1,8 +1,8 @@
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
import { HassioHomeAssistantInfo } from "../../../../src/data/hassio/supervisor"; import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorCoreUpdateParams { export interface SupervisorDialogSupervisorCoreUpdateParams {
core: HassioHomeAssistantInfo; supervisor: Supervisor;
} }
export const showDialogSupervisorCoreUpdate = ( export const showDialogSupervisorCoreUpdate = (

View File

@ -152,7 +152,7 @@ class HassioCoreInfo extends LitElement {
} }
private async _coreUpdate(): Promise<void> { private async _coreUpdate(): Promise<void> {
showDialogSupervisorCoreUpdate(this, { core: this.supervisor.core }); showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
} }
static get styles(): CSSResult[] { static get styles(): CSSResult[] {