diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index adf2612b9f..9bdeec7793 100755 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -22,7 +22,11 @@ import { fetchHassioSnapshotInfo, HassioSnapshotDetail, } from "../../../../src/data/hassio/snapshot"; -import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box"; +import { Supervisor } from "../../../../src/data/supervisor/supervisor"; +import { + showAlertDialog, + showConfirmationDialog, +} from "../../../../src/dialogs/generic/show-dialog-box"; import { PolymerChangedEvent } from "../../../../src/polymer-types"; import { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import { HomeAssistant } from "../../../../src/types"; @@ -75,6 +79,8 @@ interface FolderItem { class HassioSnapshotDialog extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; + @property({ attribute: false }) public supervisor?: Supervisor; + @internalProperty() private _error?: string; @internalProperty() private _onboarding = false; @@ -102,6 +108,7 @@ class HassioSnapshotDialog extends LitElement { this._dialogParams = params; this._onboarding = params.onboarding ?? false; + this.supervisor = params.supervisor; } protected render(): TemplateResult { @@ -298,6 +305,16 @@ class HassioSnapshotDialog extends LitElement { } private async _partialRestoreClicked() { + if ( + this.supervisor !== undefined && + this.supervisor.info.state !== "running" + ) { + await showAlertDialog(this, { + title: "Could not restore snapshot", + text: `Restoring a snapshot is not possible right now because the system is in ${this.supervisor.info.state} state.`, + }); + return; + } if ( !(await showConfirmationDialog(this, { title: "Are you sure you want partially to restore this snapshot?", @@ -359,6 +376,16 @@ class HassioSnapshotDialog extends LitElement { } private async _fullRestoreClicked() { + if ( + this.supervisor !== undefined && + this.supervisor.info.state !== "running" + ) { + await showAlertDialog(this, { + title: "Could not restore snapshot", + text: `Restoring a snapshot is not possible right now because the system is in ${this.supervisor.info.state} state.`, + }); + return; + } if ( !(await showConfirmationDialog(this, { title: diff --git a/hassio/src/dialogs/snapshot/show-dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/show-dialog-hassio-snapshot.ts index b5f6d964e9..8c7bcd2be7 100644 --- a/hassio/src/dialogs/snapshot/show-dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/show-dialog-hassio-snapshot.ts @@ -1,9 +1,11 @@ import { fireEvent } from "../../../../src/common/dom/fire_event"; +import { Supervisor } from "../../../../src/data/supervisor/supervisor"; export interface HassioSnapshotDialogParams { slug: string; onDelete?: () => void; onboarding?: boolean; + supervisor?: Supervisor; } export const showHassioSnapshotDialog = ( diff --git a/hassio/src/snapshots/hassio-snapshots.ts b/hassio/src/snapshots/hassio-snapshots.ts index 4cce8cc0ff..1fd11ed1ff 100644 --- a/hassio/src/snapshots/hassio-snapshots.ts +++ b/hassio/src/snapshots/hassio-snapshots.ts @@ -41,6 +41,7 @@ import { reloadHassioSnapshots, } from "../../../src/data/hassio/snapshot"; import { Supervisor } from "../../../src/data/supervisor/supervisor"; +import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box"; import "../../../src/layouts/hass-tabs-subpage"; import { PolymerChangedEvent } from "../../../src/polymer-types"; import { haStyle } from "../../../src/resources/styles"; @@ -211,7 +212,13 @@ class HassioSnapshots extends LitElement { : undefined}
- + Create
@@ -325,6 +332,12 @@ class HassioSnapshots extends LitElement { } private async _createSnapshot(ev: CustomEvent): Promise { + if (this.supervisor.info.state !== "running") { + await showAlertDialog(this, { + title: "Could not create snapshot", + text: `Creating a snapshot is not possible right now because the system is in ${this.supervisor.info.state} state.`, + }); + } const button = ev.currentTarget as any; button.progress = true; @@ -386,6 +399,7 @@ class HassioSnapshots extends LitElement { private _snapshotClicked(ev) { showHassioSnapshotDialog(this, { slug: ev.currentTarget!.snapshot.slug, + supervisor: this.supervisor, onDelete: () => this._updateSnapshots(), }); } @@ -395,6 +409,7 @@ class HassioSnapshots extends LitElement { showSnapshot: (slug: string) => showHassioSnapshotDialog(this, { slug, + supervisor: this.supervisor, onDelete: () => this._updateSnapshots(), }), reloadSnapshot: () => this.refreshData(), diff --git a/src/data/hassio/supervisor.ts b/src/data/hassio/supervisor.ts index 0db84b3d6c..a21cfd1915 100644 --- a/src/data/hassio/supervisor.ts +++ b/src/data/hassio/supervisor.ts @@ -49,6 +49,15 @@ export type HassioInfo = { hostname: string; logging: string; machine: string; + state: + | "initialize" + | "setup" + | "startup" + | "running" + | "freeze" + | "shutdown" + | "stopping" + | "close"; operating_system: string; supervisor: string; supported: boolean;